Ignore:
Timestamp:
09/11/13 13:29:11 (7 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Use 'easy_install' to install add-ons.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/orngDlgs.py

    r11654 r11695  
    854854        self.busy(True) 
    855855        self.repaint() 
     856 
     857        addons = Orange.utils.addons.open_addons(flag="r") 
     858 
    856859        add, remove, upgrade = self.to_install(), self.to_remove(), self.to_upgrade 
    857860 
     
    872875            return box.exec_() 
    873876 
     877        def subprocesswait(process): 
     878            output = [] 
     879            while process.poll() is None: 
     880                try: 
     881                    line = process.stdout.readline() 
     882                except IOError as ex: 
     883                    if ex.errno != 4: 
     884                        raise 
     885                else: 
     886                    output.append(line) 
     887                    qApp.processEvents(QEventLoop.ExcludeUserInputEvents) 
     888                    print line, 
     889 
     890            if process.returncode: 
     891                output = "".join(output) 
     892                output += process.stdout.read() 
     893 
     894                errormessage("Error", 
     895                             "'easy_install' exited with error code %i" % 
     896                             process.returncode, 
     897                             details=output) 
     898            return process.returncode 
     899 
     900        def easy_install(req): 
     901            try: 
     902                process = Orange.utils.addons.easy_install_process([req]) 
     903            except (OSError, IOError): 
     904                # TODO: Should show some usefull message (executable not 
     905                # found, permission error, ... 
     906                raise 
     907            else: 
     908                subprocesswait(process) 
     909 
    874910        for name in upgrade: 
     911            req = "{0}=={1}".format( 
     912                name, addons[name.lower()].available_version) 
     913 
     914            self.busy("Upgrading %s ..." % name) 
     915            self.progress.setRange(0, 0) 
     916            self.repaint() 
     917 
     918            easy_install(req) 
     919 
     920        for name in remove: 
     921            self.busy("Uninstalling %s ..." % name) 
     922            self.repaint() 
    875923            try: 
    876                 self.busy("Upgrading %s ..." % name) 
    877                 self.repaint() 
    878                 Orange.utils.addons.upgrade(name, self.pcb) 
    879             except subprocess.CalledProcessError, ex: 
    880                 errormessage("Error", 
    881                              "setup.py script exited with error code %i" \ 
    882                              % ex.returncode, 
    883                              details=ex.output) 
    884             except Exception, e: 
    885                 errormessage("Error", 
    886                              "Problem upgrading add-on %s: %s" % (name, e), 
    887                              exc_info=True) 
    888  
    889         for name in remove: 
    890             try: 
    891                 self.busy("Uninstalling %s ..." % name) 
    892                 self.repaint() 
    893924                Orange.utils.addons.uninstall(name, self.pcb) 
    894925            except Exception, e: 
     
    898929 
    899930        for name in add: 
    900             try: 
    901                 self.busy("Installing %s ..." % name) 
    902                 self.repaint() 
    903                 Orange.utils.addons.install(name, self.pcb) 
    904             except subprocess.CalledProcessError, ex: 
    905                 errormessage("Error", 
    906                              "setup.py script exited with error code %i" \ 
    907                              % ex.returncode, 
    908                              details=ex.output) 
    909  
    910             except Exception, e: 
    911                 errormessage("Error", 
    912                              "Problem installing add-on %s: %s" % (name, e), 
    913                              exc_info=True) 
    914  
    915         if len(upgrade) > 0: 
    916             QMessageBox.warning(self, "Restart Orange", "After upgrading add-ons, it is very important to restart Orange to make sure the changes have been applied.") 
    917         elif len(remove) > 0:  # Don't bother with this if there has already been one (more important) warning. 
    918             QMessageBox.warning(self, "Restart Orange", "After removal of add-ons, it is suggested that you restart Orange for the changes to become effective.") 
     931            req = "{0}=={1}".format( 
     932                name, addons[name.lower()].available_version) 
     933 
     934            self.busy("Installing %s ..." % name) 
     935            self.progress.setRange(0, 0) 
     936            self.repaint() 
     937 
     938            easy_install(req) 
     939 
     940        if len(add) + len(upgrade) + len(remove) > 0: 
     941            QMessageBox.information( 
     942                self, "Restart Orange", 
     943                "Please restart Orange for changes to take effect.") 
    919944 
    920945        QDialog.accept(self) 
Note: See TracChangeset for help on using the changeset viewer.