PluginCxFreeze.py

branch
eric7
changeset 139
4df5e67b084b
parent 137
da8cc28e689f
child 140
9e20ee9c7ca2
--- a/PluginCxFreeze.py	Thu Dec 30 11:53:44 2021 +0100
+++ b/PluginCxFreeze.py	Wed Sep 21 16:47:33 2022 +0200
@@ -16,7 +16,7 @@
 from EricWidgets import EricMessageBox
 from EricGui.EricAction import EricAction
 from EricWidgets.EricApplication import ericApp
-    
+
 import Utilities
 
 # Start-of-Header
@@ -44,7 +44,7 @@
 def exeDisplayDataList():
     """
     Public method to support the display of some executable info.
-    
+
     @return dictionary containing the data to query the presence of
         the executable
     @rtype dict
@@ -52,16 +52,15 @@
     dataList = []
     data = {
         "programEntry": True,
-        "header": QCoreApplication.translate(
-            "CxFreezePlugin", "Packagers - cx_freeze"),
-        "exe": 'dummyfreeze',
-        "versionCommand": '--version',
-        "versionStartsWith": 'dummyfreeze',
+        "header": QCoreApplication.translate("CxFreezePlugin", "Packagers - cx_freeze"),
+        "exe": "dummyfreeze",
+        "versionCommand": "--version",
+        "versionStartsWith": "dummyfreeze",
         "versionPosition": -1,
         "version": "",
         "versionCleanup": None,
     }
-    
+
     if _checkProgram():
         for exePath in exePy3:
             data["exe"] = exePath
@@ -75,7 +74,7 @@
 def _findExecutable(majorVersion):
     """
     Restricted function to determine the names of the executable.
-    
+
     @param majorVersion major Python version of the executables
     @type int
     @return names of the executable
@@ -86,7 +85,7 @@
         minorVersions = range(10)
     else:
         return []
-    
+
     executables = set()
     if Utilities.isWindowsPlatform():
         #
@@ -95,57 +94,66 @@
         try:
             import winreg
         except ImportError:
-            import _winreg as winreg    # __IGNORE_WARNING__
-        
+            import _winreg as winreg  # __IGNORE_WARNING__
+
         def getExePath(branch, access, versionStr):
             try:
-                software = winreg.OpenKey(branch, 'Software', 0, access)
-                python = winreg.OpenKey(software, 'Python', 0, access)
-                pcore = winreg.OpenKey(python, 'PythonCore', 0, access)
+                software = winreg.OpenKey(branch, "Software", 0, access)
+                python = winreg.OpenKey(software, "Python", 0, access)
+                pcore = winreg.OpenKey(python, "PythonCore", 0, access)
                 version = winreg.OpenKey(pcore, versionStr, 0, access)
-                installpath = winreg.QueryValue(version, 'InstallPath')
-                exe = os.path.join(installpath, 'Scripts', 'cxfreeze.bat')
+                installpath = winreg.QueryValue(version, "InstallPath")
+                exe = os.path.join(installpath, "Scripts", "cxfreeze.bat")
                 if os.access(exe, os.X_OK):
                     return exe
-            except WindowsError:        # __IGNORE_WARNING__
+            except WindowsError:  # __IGNORE_WARNING__
                 return None
             return None
-        
+
         versionSuffixes = ["", "-32", "-64"]
         for minorVersion in minorVersions:
             for versionSuffix in versionSuffixes:
-                versionStr = '{0}.{1}{2}'.format(majorVersion, minorVersion,
-                                                 versionSuffix)
+                versionStr = "{0}.{1}{2}".format(
+                    majorVersion, minorVersion, versionSuffix
+                )
                 exePath = getExePath(
                     winreg.HKEY_CURRENT_USER,
-                    winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
+                    winreg.KEY_WOW64_32KEY | winreg.KEY_READ,
+                    versionStr,
+                )
                 if exePath is not None:
                     executables.add(exePath)
-                
+
                 exePath = getExePath(
                     winreg.HKEY_LOCAL_MACHINE,
-                    winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
+                    winreg.KEY_WOW64_32KEY | winreg.KEY_READ,
+                    versionStr,
+                )
                 if exePath is not None:
                     executables.add(exePath)
-                
+
                 # Even on Intel 64-bit machines it's 'AMD64'
-                if platform.machine() == 'AMD64':
+                if platform.machine() == "AMD64":
                     exePath = getExePath(
                         winreg.HKEY_CURRENT_USER,
-                        winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
+                        winreg.KEY_WOW64_64KEY | winreg.KEY_READ,
+                        versionStr,
+                    )
                     if exePath is not None:
                         executables.add(exePath)
-                    
+
                     exePath = getExePath(
                         winreg.HKEY_LOCAL_MACHINE,
-                        winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
+                        winreg.KEY_WOW64_64KEY | winreg.KEY_READ,
+                        versionStr,
+                    )
                     if exePath is not None:
                         executables.add(exePath)
-        
+
         if not executables and majorVersion >= 3:
             # check the PATH environment variable if nothing was found
             # Python 3 only
-            path = Utilities.getEnvironmentEntry('PATH')
+            path = Utilities.getEnvironmentEntry("PATH")
             if path:
                 dirs = path.split(os.pathsep)
                 for directory in dirs:
@@ -156,18 +164,17 @@
     else:
         #
         # Linux, Unix ...
-        cxfreezeScript = 'cxfreeze'
+        cxfreezeScript = "cxfreeze"
         scriptSuffixes = ["", "-python{0}".format(majorVersion)]
         for minorVersion in minorVersions:
-            scriptSuffixes.append(
-                "-python{0}.{1}".format(majorVersion, minorVersion))
+            scriptSuffixes.append("-python{0}.{1}".format(majorVersion, minorVersion))
         # There could be multiple cxfreeze executables in the path
         # e.g. for different python variants
-        path = Utilities.getEnvironmentEntry('PATH')
+        path = Utilities.getEnvironmentEntry("PATH")
         # environment variable not defined
         if path is None:
             return []
-        
+
         # step 1: determine possible candidates
         exes = []
         dirs = path.split(os.pathsep)
@@ -176,7 +183,7 @@
                 exe = os.path.join(directory, cxfreezeScript + suffix)
                 if os.access(exe, os.X_OK):
                     exes.append(exe)
-        
+
         # step 2: determine the Python variant
         _exePy3 = set()
         versionArgs = ["-c", "import sys; print(sys.version_info[0])"]
@@ -189,12 +196,12 @@
             process.waitForFinished(5000)
             # get a QByteArray of the output
             versionBytes = process.readAllStandardOutput()
-            versionStr = str(versionBytes, encoding='utf-8').strip()
+            versionStr = str(versionBytes, encoding="utf-8").strip()
             if versionStr == "3":
                 _exePy3.add(exe)
-        
+
         executables = _exePy3
-    
+
     # sort items, the probably newest topmost
     executables = list(executables)
     executables.sort(reverse=True)
@@ -204,23 +211,24 @@
 def _checkProgram():
     """
     Restricted function to check the availability of cxfreeze.
-    
+
     @return flag indicating availability
     @rtype bool
     """
     global error, exePy3
-    
+
     exePy3 = _findExecutable(3)
     if exePy3 == []:
         if Utilities.isWindowsPlatform():
             error = QCoreApplication.translate(
                 "CxFreezePlugin",
                 "The cxfreeze.bat executable could not be found."
-                "Did you run the cxfreeze-postinstall script?")
+                "Did you run the cxfreeze-postinstall script?",
+            )
         else:
             error = QCoreApplication.translate(
-                "CxFreezePlugin",
-                "The cxfreeze executable could not be found.")
+                "CxFreezePlugin", "The cxfreeze executable could not be found."
+            )
         return False
     else:
         return True
@@ -230,10 +238,11 @@
     """
     Class implementing the CxFreeze plugin.
     """
+
     def __init__(self, ui):
         """
         Constructor
-        
+
         @param ui reference to the user interface object
         @type UserInterface
         """
@@ -241,56 +250,63 @@
         self.__ui = ui
         self.__initialize()
         _checkProgram()
-        
+
         self.__translator = None
         self.__loadTranslator()
-        
+
     def __initialize(self):
         """
         Private slot to (re)initialize the plugin.
         """
         self.__projectAct = None
         self.__projectSeparator = None
-       
+
     def activate(self):
         """
         Public method to activate this plugin.
-        
+
         @return tuple of None and activation status
         @rtype tuple of (None, bool)
         """
         global error
-        
+
         # There is already an error, don't activate
         if error:
             return None, False
-        
+
         # cxfreeze is only activated if it is available
         if not _checkProgram():
             return None, False
-        
+
         project = ericApp().getObject("Project")
         menu = project.getMenu("Packagers")
         if menu:
             self.__projectAct = EricAction(
-                self.tr('Use cx_freeze'),
-                self.tr('Use cx_&freeze'), 0, 0,
-                self, 'packagers_cxfreeze')
+                self.tr("Use cx_freeze"),
+                self.tr("Use cx_&freeze"),
+                0,
+                0,
+                self,
+                "packagers_cxfreeze",
+            )
             self.__projectAct.setStatusTip(
-                self.tr('Generate a distribution package using cx_freeze'))
-            self.__projectAct.setWhatsThis(self.tr(
-                """<b>Use cx_freeze</b>"""
-                """<p>Generate a distribution package using cx_freeze."""
-                """ The command is executed in the project path. All"""
-                """ files and directories must be given absolute or"""
-                """ relative to the project directory.</p>"""
-            ))
+                self.tr("Generate a distribution package using cx_freeze")
+            )
+            self.__projectAct.setWhatsThis(
+                self.tr(
+                    """<b>Use cx_freeze</b>"""
+                    """<p>Generate a distribution package using cx_freeze."""
+                    """ The command is executed in the project path. All"""
+                    """ files and directories must be given absolute or"""
+                    """ relative to the project directory.</p>"""
+                )
+            )
             self.__projectAct.triggered.connect(self.__cxfreeze)
             project.addEricActions([self.__projectAct])
             self.__projectSeparator = menu.addSeparator()
             menu.addAction(self.__projectAct)
             project.showMenu.connect(self.__projectShowMenu)
-        
+
         error = ""
         return None, True
 
@@ -302,32 +318,27 @@
         if menu:
             if self.__projectAct:
                 menu.removeAction(self.__projectAct)
-                ericApp().getObject("Project").removeEricActions(
-                    [self.__projectAct])
+                ericApp().getObject("Project").removeEricActions([self.__projectAct])
             if self.__projectSeparator:
                 menu.removeAction(self.__projectSeparator)
-        
+
         self.__initialize()
-    
+
     def __projectShowMenu(self, menuName, menu):
         """
         Private slot called, when the the project menu or a submenu is
         about to be shown.
-        
+
         @param menuName name of the menu to be shown
         @type str
         @param menu reference to the menu
         @type QMenu
         """
-        if (
-            menuName == "Packagers" and
-            self.__projectAct is not None
-        ):
+        if menuName == "Packagers" and self.__projectAct is not None:
             self.__projectAct.setEnabled(
-                ericApp().getObject("Project").getProjectLanguage() ==
-                "Python3"
+                ericApp().getObject("Project").getProjectLanguage() == "Python3"
             )
-    
+
     def __loadTranslator(self):
         """
         Private method to load the translation file.
@@ -335,8 +346,7 @@
         if self.__ui is not None:
             loc = self.__ui.getLocale()
             if loc and loc != "C":
-                locale_dir = os.path.join(os.path.dirname(__file__),
-                                          "CxFreeze", "i18n")
+                locale_dir = os.path.join(os.path.dirname(__file__), "CxFreeze", "i18n")
                 translation = "cxfreeze_{0}".format(loc)
                 translator = QTranslator(None)
                 loaded = translator.load(translation, locale_dir)
@@ -344,10 +354,12 @@
                     self.__translator = translator
                     ericApp().installTranslator(self.__translator)
                 else:
-                    print("Warning: translation file '{0}' could not be"
-                          " loaded.".format(translation))
+                    print(
+                        "Warning: translation file '{0}' could not be"
+                        " loaded.".format(translation)
+                    )
                     print("Using default.")
-    
+
     def __cxfreeze(self):
         """
         Private slot to handle the cxfreeze execution.
@@ -360,17 +372,20 @@
                 self.tr("cxfreeze"),
                 self.tr(
                     """There is no main script defined for the current"""
-                    """ project."""),
-                EricMessageBox.StandardButtons(EricMessageBox.Abort))
+                    """ project."""
+                ),
+                EricMessageBox.StandardButtons(EricMessageBox.Abort),
+            )
             return
-        
+
         majorVersionStr = project.getProjectLanguage()
         exe = {"Python3": exePy3}.get(majorVersionStr)
         if exe == []:
             EricMessageBox.critical(
                 self.__ui,
                 self.tr("cxfreeze"),
-                self.tr("""The cxfreeze executable could not be found."""))
+                self.tr("""The cxfreeze executable could not be found."""),
+            )
             return
 
         # check if all files saved and errorfree before continue
@@ -378,18 +393,19 @@
             return
 
         from CxFreeze.CxfreezeConfigDialog import CxfreezeConfigDialog
-        parms = project.getData('PACKAGERSPARMS', "CXFREEZE")
+
+        parms = project.getData("PACKAGERSPARMS", "CXFREEZE")
         dlg = CxfreezeConfigDialog(project, exe, parms)
         if dlg.exec() == QDialog.DialogCode.Accepted:
             args, parms = dlg.generateParameters()
-            project.setData('PACKAGERSPARMS', "CXFREEZE", parms)
-            
+            project.setData("PACKAGERSPARMS", "CXFREEZE", parms)
+
             # now do the call
             from CxFreeze.CxfreezeExecDialog import CxfreezeExecDialog
+
             dia = CxfreezeExecDialog("cxfreeze")
             dia.show()
-            res = dia.start(args, parms, project.ppath,
-                            project.getMainScript())
+            res = dia.start(args, parms, project.ppath, project.getMainScript())
             if res:
                 dia.exec()
 
@@ -397,14 +413,15 @@
 def installDependencies(pipInstall):
     """
     Function to install dependencies of this plug-in.
-    
+
     @param pipInstall function to be called with a list of package names.
     @type function
     """
     try:
-        import cx_Freeze         # __IGNORE_WARNING__
+        import cx_Freeze  # __IGNORE_WARNING__
     except ImportError:
         pipInstall(["cx-Freeze"])
 
+
 #
 # eflag: noqa = M801

eric ide

mercurial