--- 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