--- a/PluginProjectDjango.py Fri Dec 31 13:17:55 2021 +0100 +++ b/PluginProjectDjango.py Wed Sep 21 16:42:20 2022 +0200 @@ -30,9 +30,7 @@ className = "ProjectDjangoPlugin" packageName = "ProjectDjango" shortDescription = "Project support for Django projects." -longDescription = ( - """This plugin implements project support for Django projects.""" -) +longDescription = """This plugin implements project support for Django projects.""" needsRestart = False pyqtApi = 2 # End-of-Header @@ -45,16 +43,15 @@ def apiFiles(language): """ Module function to return the API files made available by this plugin. - + @param language language to get APIs for @type str @return list of API filenames @rtype list of str """ if language in ["Python3"]: - apisDir = os.path.join(os.path.dirname(__file__), - "ProjectDjango", "APIs") - apis = glob.glob(os.path.join(apisDir, '*.api')) + apisDir = os.path.join(os.path.dirname(__file__), "ProjectDjango", "APIs") + apis = glob.glob(os.path.join(apisDir, "*.api")) else: apis = [] return apis @@ -63,7 +60,7 @@ def createDjangoPage(configDlg): """ Module function to create the Django configuration page. - + @param configDlg reference to the configuration dialog @type ConfigurationWidget @return reference to the configuration page @@ -71,26 +68,29 @@ """ global djangoPluginObject from ProjectDjango.ConfigurationPage.DjangoPage import DjangoPage + page = DjangoPage(djangoPluginObject) return page - + def getConfigData(): """ Module function returning data as required by the configuration dialog. - + @return dictionary containing the relevant data @rtype dict """ usesDarkPalette = ericApp().usesDarkPalette() iconSuffix = "dark" if usesDarkPalette else "light" - + return { "djangoPage": [ QCoreApplication.translate("ProjectDjangoPlugin", "Django"), - os.path.join("ProjectDjango", "icons", - "django-{0}".format(iconSuffix)), - createDjangoPage, None, None], + os.path.join("ProjectDjango", "icons", "django-{0}".format(iconSuffix)), + createDjangoPage, + None, + None, + ], } @@ -107,45 +107,38 @@ """ Class implementing the Django project plugin. """ + PreferencesKey = "Django" - + lexerAssociations = { "*.htm": "Pygments|HTML+Django/Jinja", "*.html": "Pygments|HTML+Django/Jinja", } - + def __init__(self, ui): """ Constructor - + @param ui reference to the user interface object @type UserInterface """ QObject.__init__(self, ui) self.__ui = ui self.__initialize() - + self.__defaults = { "VirtualEnvironmentNamePy3": "", - "Python3ConsoleType": "ipython", - "ServerAddress": "", - "RecentNumberApps": 10, "UseIPv6": False, "UseThreading": True, - "TranslationsEditor": "", "FuzzyTranslations": False, - "UseExternalBrowser": False, - "CheckDeployMode": False, - "RecentNumberTestData": 10, "KeepTestDatabase": False, - "RecentNumberDatabaseNames": 10, } if isWindowsPlatform(): @@ -157,120 +150,131 @@ else: self.__defaults["ConsoleCommandNoClose"] = "konsole --noclose -e" self.__defaults["ConsoleCommand"] = "konsole -e" - + self.__translator = None self.__loadTranslator() - + def __initialize(self): """ Private slot to (re)initialize the plugin. """ self.__object = None - + self.__mainMenu = None self.__mainAct = None self.__separatorAct = None - + self.__ericProject = ericApp().getObject("Project") - + self.__supportedVariants = [] - + def activate(self): """ Public method to activate this plugin. - + @return tuple of None and activation status @rtype bool """ global djangoPluginObject djangoPluginObject = self - + usesDarkPalette = ericApp().usesDarkPalette() iconSuffix = "dark" if usesDarkPalette else "light" - + self.__object = Project(self, iconSuffix, self.__ui) self.__object.initActions() ericApp().registerPluginObject("ProjectDjango", self.__object) - + self.__mainMenu = self.__object.initMenu() - + self.__supportedVariants = self.__object.supportedPythonVariants() - + if self.__supportedVariants: self.__ericProject.registerProjectType( - "Django", self.tr("Django"), + "Django", + self.tr("Django"), self.fileTypesCallback, lexerAssociationCallback=self.lexerAssociationCallback, binaryTranslationsCallback=self.binaryTranslationsCallback, - progLanguages=self.__supportedVariants[:]) - + progLanguages=self.__supportedVariants[:], + ) + from Project.ProjectBrowser import ( - SourcesBrowserFlag, FormsBrowserFlag, TranslationsBrowserFlag, - OthersBrowserFlag + SourcesBrowserFlag, + FormsBrowserFlag, + TranslationsBrowserFlag, + OthersBrowserFlag, ) + Preferences.setProjectBrowserFlagsDefault( "Django", - SourcesBrowserFlag | FormsBrowserFlag | - TranslationsBrowserFlag | OthersBrowserFlag, + SourcesBrowserFlag + | FormsBrowserFlag + | TranslationsBrowserFlag + | OthersBrowserFlag, ) - + if self.__ericProject.isOpen(): self.__projectOpened() self.__object.projectOpenedHooks() - - ericApp().getObject("Project").projectOpened.connect( - self.__projectOpened) - ericApp().getObject("Project").projectClosed.connect( - self.__projectClosed) - ericApp().getObject("Project").newProject.connect( - self.__projectOpened) - + + ericApp().getObject("Project").projectOpened.connect(self.__projectOpened) + ericApp().getObject("Project").projectClosed.connect(self.__projectClosed) + ericApp().getObject("Project").newProject.connect(self.__projectOpened) + ericApp().getObject("Project").projectOpenedHooks.connect( - self.__object.projectOpenedHooks) + self.__object.projectOpenedHooks + ) ericApp().getObject("Project").projectClosedHooks.connect( - self.__object.projectClosedHooks) + self.__object.projectClosedHooks + ) ericApp().getObject("Project").newProjectHooks.connect( - self.__object.projectOpenedHooks) - + self.__object.projectOpenedHooks + ) + ericApp().getObject("Project").projectAboutToBeCreated.connect( - self.__object.startProjectOrApplication) + self.__object.startProjectOrApplication + ) ericApp().getObject("Project").newProject.connect( - self.__object.newProjectCreated) - + self.__object.newProjectCreated + ) + return None, True - + def deactivate(self): """ Public method to deactivate this plugin. """ ericApp().unregisterPluginObject("ProjectDjango") - - ericApp().getObject("Project").projectOpened.disconnect( - self.__projectOpened) - ericApp().getObject("Project").projectClosed.disconnect( - self.__projectClosed) - ericApp().getObject("Project").newProject.disconnect( - self.__projectOpened) - + + ericApp().getObject("Project").projectOpened.disconnect(self.__projectOpened) + ericApp().getObject("Project").projectClosed.disconnect(self.__projectClosed) + ericApp().getObject("Project").newProject.disconnect(self.__projectOpened) + ericApp().getObject("Project").projectOpenedHooks.disconnect( - self.__object.projectOpenedHooks) + self.__object.projectOpenedHooks + ) ericApp().getObject("Project").projectClosedHooks.disconnect( - self.__object.projectClosedHooks) + self.__object.projectClosedHooks + ) ericApp().getObject("Project").newProjectHooks.disconnect( - self.__object.projectOpenedHooks) - + self.__object.projectOpenedHooks + ) + ericApp().getObject("Project").projectAboutToBeCreated.disconnect( - self.__object.startProjectOrApplication) + self.__object.startProjectOrApplication + ) ericApp().getObject("Project").newProject.disconnect( - self.__object.newProjectCreated) - + self.__object.newProjectCreated + ) + self.__ericProject.unregisterProjectType("Django") - + self.__object.projectClosedHooks() self.__projectClosed() - + self.__initialize() - + def __loadTranslator(self): """ Private method to load the translation file. @@ -279,7 +283,8 @@ loc = self.__ui.getLocale() if loc and loc != "C": locale_dir = os.path.join( - os.path.dirname(__file__), "ProjectDjango", "i18n") + os.path.dirname(__file__), "ProjectDjango", "i18n" + ) translation = "django_{0}".format(loc) translator = QTranslator(None) loaded = translator.load(translation, locale_dir) @@ -287,10 +292,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 __projectOpened(self): """ Private slot to handle the projectOpened signal. @@ -299,10 +306,10 @@ projectToolsMenu = self.__ui.getMenu("project_tools") insertBeforeAct = projectToolsMenu.actions()[0] self.__mainAct = projectToolsMenu.insertMenu( - insertBeforeAct, self.__mainMenu) - self.__separatorAct = projectToolsMenu.insertSeparator( - insertBeforeAct) - + insertBeforeAct, self.__mainMenu + ) + self.__separatorAct = projectToolsMenu.insertSeparator(insertBeforeAct) + def __projectClosed(self): """ Private slot to handle the projectClosed signal. @@ -314,11 +321,11 @@ self.__mainAct = None self.__separatorAct = None self.__object.projectClosed() - + def fileTypesCallback(self): """ Public method get the filetype associations of the Django project type. - + @return dictionary with file type associations @rtype dict """ @@ -332,16 +339,16 @@ "*.mo": "TRANSLATIONS", "*.py": "SOURCES", } - if self.__ericProject.getProjectType() == "Django" else - {} + if self.__ericProject.getProjectType() == "Django" + else {} ) return fileTypes - + def lexerAssociationCallback(self, filename): """ Public method to get the lexer association of the Django project type for a file. - + @param filename name of the file @type str @return name of the lexer (Pygments lexers are prefixed with @@ -351,14 +358,14 @@ for pattern, language in self.lexerAssociations.items(): if fnmatch.fnmatch(filename, pattern): return language - + return "" - + def binaryTranslationsCallback(self, filename): """ Public method to determine the filename of a compiled translation file given the translation source file. - + @param filename name of the translation source file @type str @return name of the binary translation file @@ -367,45 +374,56 @@ if filename.endswith(".po"): filename = filename.replace(".po", ".mo") return filename - + def getPreferences(self, key): """ Public method to retrieve the various settings. - + @param key the key of the value to get @type str @return value of the requested setting @rtype Any """ if key in ["RecentNumberApps", "RecentNumberTestData"]: - return int(Preferences.Prefs.settings.value( - self.PreferencesKey + "/" + key, self.__defaults[key])) - elif key in ["UseIPv6", "UseThreading", - "UseExternalBrowser", "CheckDeployMode", - "KeepTestDatabase", "FuzzyTranslations", ]: - return Preferences.toBool(Preferences.Prefs.settings.value( - self.PreferencesKey + "/" + key, self.__defaults[key])) + return int( + Preferences.Prefs.settings.value( + self.PreferencesKey + "/" + key, self.__defaults[key] + ) + ) + elif key in [ + "UseIPv6", + "UseThreading", + "UseExternalBrowser", + "CheckDeployMode", + "KeepTestDatabase", + "FuzzyTranslations", + ]: + return Preferences.toBool( + Preferences.Prefs.settings.value( + self.PreferencesKey + "/" + key, self.__defaults[key] + ) + ) else: return Preferences.Prefs.settings.value( - self.PreferencesKey + "/" + key, self.__defaults[key]) - + self.PreferencesKey + "/" + key, self.__defaults[key] + ) + def setPreferences(self, key, value): """ Public method to store the various settings. - + @param key the key of the setting to be set @type str @param value value to be set @type Any """ - Preferences.Prefs.settings.setValue( - self.PreferencesKey + "/" + key, value) - + Preferences.Prefs.settings.setValue(self.PreferencesKey + "/" + key, value) + if key in ["VirtualEnvironmentNamePy3"]: self.__reregisterProjectType() elif key == "TranslationsEditor" and self.__object: self.__object.registerOpenHook() - + def __reregisterProjectType(self): """ Private method to re-register the project type. @@ -414,21 +432,23 @@ if supportedVariants != self.__supportedVariants: # step 1: unregister self.__ericProject.unregisterProjectType("Django") - + # step 2: register again with new language settings self.__supportedVariants = supportedVariants if self.__supportedVariants: self.__ericProject.registerProjectType( - "Django", self.tr("Django"), + "Django", + self.tr("Django"), self.fileTypesCallback, lexerAssociationCallback=self.lexerAssociationCallback, binaryTranslationsCallback=self.binaryTranslationsCallback, - progLanguages=self.__supportedVariants[:]) - + progLanguages=self.__supportedVariants[:], + ) + def getMenu(self, name): """ Public method to get a reference to the requested menu. - + @param name name of the menu (string) @return reference to the menu (QMenu) or None, if no menu with the given name exists @@ -437,11 +457,11 @@ return self.__object.getMenu(name) else: return None - + def getMenuNames(self): """ Public method to get the names of all menus. - + @return menu names (list of string) """ if self.__object is not None: @@ -449,5 +469,6 @@ else: return [] + # # eflag: noqa = M801