ProjectDjango/Project.py

changeset 169
b8f263e05c39
parent 168
c6182aab51e9
child 172
ea7980ded4f3
diff -r c6182aab51e9 -r b8f263e05c39 ProjectDjango/Project.py
--- a/ProjectDjango/Project.py	Wed Dec 30 11:02:06 2020 +0100
+++ b/ProjectDjango/Project.py	Sat Apr 24 11:25:03 2021 +0200
@@ -10,6 +10,7 @@
 import os
 import re
 import shutil
+import contextlib
 
 from PyQt5.QtCore import QObject, QTimer, QUrl, QFileInfo
 from PyQt5.QtGui import QDesktopServices
@@ -52,14 +53,16 @@
         if args is None:
             args = []
         
-        if cmd.endswith(('gnome-terminal', 'konsole', 'xfce4-terminal',
-                         'mate-terminal')):
-            if '-e' in args:
-                index = args.index('-e') + 1
-                cargs = ' '.join(args[index:])
-                args[index:] = [cargs]
+        if (
+            cmd.endswith(('gnome-terminal', 'konsole', 'xfce4-terminal',
+                          'mate-terminal')) and
+            '-e' in args
+        ):
+            index = args.index('-e') + 1
+            cargs = ' '.join(args[index:])
+            args[index:] = [cargs]
         
-        super(QProcess, self).start(cmd, args, mode)
+        super().start(cmd, args, mode)
     
     @staticmethod
     def startDetached(cmd, args=None, path=''):
@@ -75,12 +78,14 @@
         if args is None:
             args = []
         
-        if cmd.endswith(('gnome-terminal', 'konsole', 'xfce4-terminal',
-                         'mate-terminal')):
-            if '-e' in args:
-                index = args.index('-e') + 1
-                cargs = ' '.join(args[index:])
-                args[index:] = [cargs]
+        if (
+            cmd.endswith(('gnome-terminal', 'konsole', 'xfce4-terminal',
+                          'mate-terminal')) and
+            '-e' in args
+        ):
+            index = args.index('-e') + 1
+            cargs = ' '.join(args[index:])
+            args[index:] = [cargs]
         
         return QProcessPyQt.startDetached(cmd, args, path)
 
@@ -103,7 +108,7 @@
         @param parent parent
         @type QObject
         """
-        super(Project, self).__init__(parent)
+        super().__init__(parent)
         
         self.__plugin = plugin
         self.__iconSuffix = iconSuffix
@@ -392,108 +397,6 @@
         """
         Private method to define the database SQL related actions.
         """
-        self.databaseSqlCreateTablesAct = E5Action(
-            self.tr('Create Tables'),
-            self.tr('Create &Tables'),
-            0, 0,
-            self, 'django_database_sql_create_tables')
-        self.databaseSqlCreateTablesAct.setStatusTip(self.tr(
-            'Prints the CREATE TABLE SQL statements for one or more'
-            ' applications'))
-        self.databaseSqlCreateTablesAct.setWhatsThis(self.tr(
-            """<b>Create Tables</b>"""
-            """<p>Prints the CREATE TABLE SQL statements for one or """
-            """more applications.</p>"""
-        ))
-        self.databaseSqlCreateTablesAct.triggered.connect(
-            self.__databaseSqlCreateTables)
-        self.actions.append(self.databaseSqlCreateTablesAct)
-        
-        self.databaseSqlCreateIndexesAct = E5Action(
-            self.tr('Create Indexes'),
-            self.tr('Create &Indexes'),
-            0, 0,
-            self, 'django_database_sql_create_indexes')
-        self.databaseSqlCreateIndexesAct.setStatusTip(self.tr(
-            'Prints the CREATE INDEX SQL statements for one or more'
-            ' applications'))
-        self.databaseSqlCreateIndexesAct.setWhatsThis(self.tr(
-            """<b>Create Indexes</b>"""
-            """<p>Prints the CREATE INDEX SQL statements for one or """
-            """more applications.</p>"""
-        ))
-        self.databaseSqlCreateIndexesAct.triggered.connect(
-            self.__databaseSqlCreateIndexes)
-        self.actions.append(self.databaseSqlCreateIndexesAct)
-        
-        self.databaseSqlCreateEverythingAct = E5Action(
-            self.tr('Create Everything'),
-            self.tr('Create &Everything'),
-            0, 0,
-            self, 'django_database_sql_create_everything')
-        self.databaseSqlCreateEverythingAct.setStatusTip(self.tr(
-            'Prints the CREATE ... SQL statements for one or more'
-            ' applications'))
-        self.databaseSqlCreateEverythingAct.setWhatsThis(self.tr(
-            """<b>Create Everything</b>"""
-            """<p>Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL """
-            """statements for one or more applications.</p>"""
-        ))
-        self.databaseSqlCreateEverythingAct.triggered.connect(
-            self.__databaseSqlCreateEverything)
-        self.actions.append(self.databaseSqlCreateEverythingAct)
-        
-        self.databaseSqlCustomAct = E5Action(
-            self.tr('Custom Statements'),
-            self.tr('&Custom Statements'),
-            0, 0,
-            self, 'django_database_sql_custom')
-        self.databaseSqlCustomAct.setStatusTip(self.tr(
-            'Prints the custom table modifying SQL statements for '
-            'one or more applications'))
-        self.databaseSqlCustomAct.setWhatsThis(self.tr(
-            """<b>Custom Statements</b>"""
-            """<p>Prints the custom table modifying SQL statements """
-            """for one or more applications.</p>"""
-        ))
-        self.databaseSqlCustomAct.triggered.connect(
-            self.__databaseSqlCustom)
-        self.actions.append(self.databaseSqlCustomAct)
-        
-        self.databaseSqlDropTablesAct = E5Action(
-            self.tr('Drop Tables'),
-            self.tr('&Drop Tables'),
-            0, 0,
-            self, 'django_database_sql_drop_tables')
-        self.databaseSqlDropTablesAct.setStatusTip(self.tr(
-            'Prints the DROP TABLE SQL statements for '
-            'one or more applications'))
-        self.databaseSqlDropTablesAct.setWhatsThis(self.tr(
-            """<b>Drop Tables</b>"""
-            """<p>Prints the DROP TABLE SQL statements """
-            """for one or more applications.</p>"""
-        ))
-        self.databaseSqlDropTablesAct.triggered.connect(
-            self.__databaseSqlDropTables)
-        self.actions.append(self.databaseSqlDropTablesAct)
-        
-        self.databaseSqlDropIndexesAct = E5Action(
-            self.tr('Drop Indexes'),
-            self.tr('&Drop Indexes'),
-            0, 0,
-            self, 'django_database_sql_drop_indexes')
-        self.databaseSqlDropIndexesAct.setStatusTip(self.tr(
-            'Prints the DROP INDEX SQL statements for '
-            'one or more applications'))
-        self.databaseSqlDropIndexesAct.setWhatsThis(self.tr(
-            """<b>Drop Indexes</b>"""
-            """<p>Prints the DROP INDEX SQL statements """
-            """for one or more applications.</p>"""
-        ))
-        self.databaseSqlDropIndexesAct.triggered.connect(
-            self.__databaseSqlDropIndexes)
-        self.actions.append(self.databaseSqlDropIndexesAct)
-        
         self.databaseSqlFlushAct = E5Action(
             self.tr('Flush Database'),
             self.tr('&Flush Database'),
@@ -923,16 +826,6 @@
         menu = QMenu(self.tr("Show &SQL"), self.__ui)
         menu.setTearOffEnabled(True)
         
-        if self.getDjangoVersion() < (1, 9, 0):
-            menu.addAction(self.databaseSqlCreateTablesAct)
-            menu.addAction(self.databaseSqlCreateIndexesAct)
-            menu.addAction(self.databaseSqlCreateEverythingAct)
-            menu.addSeparator()
-            menu.addAction(self.databaseSqlCustomAct)
-            menu.addSeparator()
-            menu.addAction(self.databaseSqlDropTablesAct)
-            menu.addAction(self.databaseSqlDropIndexesAct)
-            menu.addSeparator()
         menu.addAction(self.databaseSqlFlushAct)
         menu.addAction(self.databaseSqlResetSeqAct)
         menu.addSeparator()
@@ -981,9 +874,8 @@
         menu.addAction(self.diffSettingsAct)
         menu.addSeparator()
         menu.addAction(self.runPythonShellAct)
-        if self.getDjangoVersion() >= (1, 9, 0):
-            menu.addSeparator()
-            menu.addAction(self.testEmailAct)
+        menu.addSeparator()
+        menu.addAction(self.testEmailAct)
         
         self.__menus["tools"] = menu
         
@@ -1253,9 +1145,8 @@
                 return []
             
         cur_path = os.path.join(os.curdir, file)
-        if os.path.exists(cur_path):
-            if os.access(cur_path, os.X_OK):
-                paths.append(cur_path)
+        if os.path.exists(cur_path) and os.access(cur_path, os.X_OK):
+            paths.append(cur_path)
 
         path = os.getenv('PATH')
         
@@ -1333,11 +1224,11 @@
         """
         if not language:
             language = self.__e5project.getProjectLanguage()
-        if language == "Python3":
-            venvName = self.__plugin.getPreferences(
-                "VirtualEnvironmentNamePy3")
-        else:
-            venvName = ""
+        venvName = (
+            self.__plugin.getPreferences("VirtualEnvironmentNamePy3")
+            if language == "Python3" else
+            ""
+        )
         if venvName:
             virtEnv = self.__virtualEnvManager.getVirtualenvDirectory(
                 venvName)
@@ -1460,11 +1351,11 @@
                 venvName = Preferences.getDebugger("Python3VirtualEnv")
         else:
             venvName = ""
-        if venvName:
-            python = self.__virtualEnvManager.getVirtualenvInterpreter(
-                venvName)
-        else:
-            python = ""
+        python = (
+            self.__virtualEnvManager.getVirtualenvInterpreter(venvName)
+            if venvName else
+            ""
+        )
         
         return python
     
@@ -2058,7 +1949,7 @@
             if addr:
                 args.append(addr)
             
-            try:
+            with contextlib.suppress(DjangoNoSiteSelectedException):
                 if Utilities.isWindowsPlatform():
                     serverProcStarted, pid = QProcess.startDetached(
                         args[0], args[1:], self.__sitePath())
@@ -2077,8 +1968,6 @@
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django server could not be started.'))
-            except DjangoNoSiteSelectedException:
-                pass
     
     def __serverProcFinished(self):
         """
@@ -2212,10 +2101,7 @@
             database = self.getRecentDatabaseNames()[0]
         
         self.__currentDatabase = database
-        if database:
-            curDb = database
-        else:
-            curDb = self.tr("<default>")
+        curDb = database if database else self.tr("<default>")
         self.selectDatabaseNameAct.setText(
             self.tr('&Current Database ({0})').format(curDb))
     
@@ -2304,7 +2190,7 @@
             args.append("dbshell")
             if self.__currentDatabase:
                 args.append("--database={0}".format(self.__currentDatabase))
-            try:
+            with contextlib.suppress(DjangoNoSiteSelectedException):
                 wd = self.__sitePath()
                 self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
@@ -2313,8 +2199,6 @@
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django process could not be started.'))
-            except DjangoNoSiteSelectedException:
-                pass
     
     #######################################################################
     ## slots below implement database functions outputting SQL statements
@@ -2357,60 +2241,6 @@
         if res:
             dia.exec()
     
-    def __databaseSqlCreateTables(self):
-        """
-        Private slot to print the CREATE TABLE SQL statements for one
-        or more applications.
-        
-        Note: available before Django v1.9.0
-        """
-        self.__sqlCommand(self.tr("Create Tables"), "sql")
-    
-    def __databaseSqlCreateIndexes(self):
-        """
-        Private slot to print the CREATE INDEX SQL statements for one
-        or more applications.
-        
-        Note: available before Django v1.9.0
-        """
-        self.__sqlCommand(self.tr("Create Indexes"), "sqlindexes")
-    
-    def __databaseSqlCreateEverything(self):
-        """
-        Private slot to print the CREATE TABLE, custom SQL and
-        CREATE INDEX SQL statements for one or more applications.
-        
-        Note: available before Django v1.9.0
-        """
-        self.__sqlCommand(self.tr("Create Everything"), "sqlall")
-    
-    def __databaseSqlCustom(self):
-        """
-        Private slot to print the custom table modifying SQL statements
-        for one or more applications.
-        
-        Note: available before Django v1.9.0
-        """
-        self.__sqlCommand(self.tr("Custom Statements"), "sqlcustom")
-    
-    def __databaseSqlDropTables(self):
-        """
-        Private slot to print the DROP TABLE SQL statements for one or
-        more applications.
-        
-        Note: available before Django v1.9.0
-        """
-        self.__sqlCommand(self.tr("Drop Tables"), "sqlclear")
-    
-    def __databaseSqlDropIndexes(self):
-        """
-        Private slot to print the DROP INDEX SQL statements for one or
-        more applications.
-        
-        Note: available before Django v1.9.0
-        """
-        self.__sqlCommand(self.tr("Drop Indexes"), "sqldropindexes")
-    
     def __databaseSqlFlushDatabase(self):
         """
         Private slot to print a list of statements to return all database
@@ -2549,10 +2379,11 @@
         @param migration name of a migration to update to
         @type str
         """
-        if migration == "zero":
-            title = self.tr("Unapply Migrations")
-        else:
-            title = self.tr("Apply Migrations")
+        title = (
+            self.tr("Unapply Migrations")
+            if migration == "zero" else
+            self.tr("Apply Migrations")
+        )
         
         try:
             path = self.__sitePath()
@@ -2612,33 +2443,31 @@
         args.append("manage.py")
         args.append("showmigrations")
         args.append("--list")
-        if self.getDjangoVersion() >= (1, 9, 0):
-            if self.__currentDatabase:
-                args.append("--database={0}".format(self.__currentDatabase))
+        if self.__currentDatabase:
+            args.append("--database={0}".format(self.__currentDatabase))
         
         migrations = {}
         proc = QProcess()
         if path:
             proc.setWorkingDirectory(path)
         proc.start(self.__getPythonExecutable(), args)
-        if proc.waitForStarted():
-            if proc.waitForFinished():
-                output = str(proc.readAllStandardOutput(),
-                             Preferences.getSystem("IOEncoding"), 'replace')
-                if output:
-                    recentApp = ""
-                    for line in output.splitlines():
-                        if not line.startswith(" "):
-                            # application name
-                            recentApp = line.strip()
-                            migrations[recentApp] = []
-                        else:
-                            # migration name
-                            line = line.strip()
-                            applied = line[1] != " "
-                            name = line[3:].strip()
-                            if recentApp:
-                                migrations[recentApp].append((applied, name))
+        if proc.waitForStarted() and proc.waitForFinished():
+            output = str(proc.readAllStandardOutput(),
+                         Preferences.getSystem("IOEncoding"), 'replace')
+            if output:
+                recentApp = ""
+                for line in output.splitlines():
+                    if not line.startswith(" "):
+                        # application name
+                        recentApp = line.strip()
+                        migrations[recentApp] = []
+                    else:
+                        # migration name
+                        line = line.strip()
+                        applied = line[1] != " "
+                        name = line[3:].strip()
+                        if recentApp:
+                            migrations[recentApp].append((applied, name))
         return migrations
     
     def __makeMigrations(self):
@@ -2792,14 +2621,9 @@
             args.append(self.__getPythonExecutable())
             args.append("manage.py")
             args.append("shell")
-            if self.getDjangoVersion() < (1, 10, 0):
-                if (self.__plugin.getPreferences("Python3ConsoleType") ==
-                        "python"):
-                    args.append("--plain")
-            else:
-                args.append("--interface={0}".format(
-                    self.__plugin.getPreferences("Python3ConsoleType")))
-            try:
+            args.append("--interface={0}".format(
+                self.__plugin.getPreferences("Python3ConsoleType")))
+            with contextlib.suppress(DjangoNoSiteSelectedException):
                 wd = self.__sitePath()
                 self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
@@ -2808,16 +2632,11 @@
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django process could not be started.'))
-            except DjangoNoSiteSelectedException:
-                pass
     
     def __sendTestEmail(self):
         """
         Private slot to send a test email through Django.
         """
-        if self.getDjangoVersion() < (1, 9, 0):
-            return
-        
         title = self.tr("Send Test Email")
         
         from .DjangoSendTestEmailDataDialog import (
@@ -2909,10 +2728,8 @@
             args.append("--indent={0}".format(indent))
             for excl in excls:
                 args.append("--exclude={0}".format(excl))
-            if self.getDjangoVersion() >= (1, 9, 0):
-                if self.__currentDatabase:
-                    args.append("--database={0}".format(
-                        self.__currentDatabase))
+            if self.__currentDatabase:
+                args.append("--database={0}".format(self.__currentDatabase))
             args += appls
             
             if dumpFormat == "json":
@@ -2948,9 +2765,8 @@
             args.append(self.__getPythonExecutable())
             args.append("manage.py")
             args.append("loaddata")
-            if self.getDjangoVersion() >= (1, 11, 0):
-                for excl in excludes:
-                    args.append("--exclude={0}".format(excl))
+            for excl in excludes:
+                args.append("--exclude={0}".format(excl))
             if ignore:
                 args.append("--ignorenonexistent")
             if appLabel:
@@ -3043,7 +2859,7 @@
                     args.append("--addrport={0}".format(addr))
                 args += fixtures
                 
-                try:
+                with contextlib.suppress(DjangoNoSiteSelectedException):
                     if Utilities.isWindowsPlatform():
                         serverProcStarted, pid = QProcess.startDetached(
                             args[0], args[1:], self.__sitePath())
@@ -3065,8 +2881,6 @@
                             self.tr('Process Generation Error'),
                             self.tr('The Django test server could not be'
                                     ' started.'))
-                except DjangoNoSiteSelectedException:
-                    pass
     
     def __testServerProcFinished(self):
         """
@@ -3104,7 +2918,7 @@
                 args.append("manage.py")
                 args.append("changepassword")
                 args.append(userName)
-                try:
+                with contextlib.suppress(DjangoNoSiteSelectedException):
                     wd = self.__sitePath()
                     self.__adjustWorkingDirectory(args, wd)
                     started, pid = QProcess.startDetached(
@@ -3115,8 +2929,6 @@
                             self.tr('Process Generation Error'),
                             self.tr('The Django process could not be'
                                     ' started.'))
-                except DjangoNoSiteSelectedException:
-                    pass
     
     def __createSuperUser(self):
         """
@@ -3130,7 +2942,7 @@
             args.append(self.__getPythonExecutable())
             args.append("manage.py")
             args.append("createsuperuser")
-            try:
+            with contextlib.suppress(DjangoNoSiteSelectedException):
                 wd = self.__sitePath()
                 self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
@@ -3139,8 +2951,6 @@
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django process could not be started.'))
-            except DjangoNoSiteSelectedException:
-                pass
     
     ##################################################################
     ## slots below implement session functions
@@ -3453,9 +3263,8 @@
                 args.append("manage.py")
                 args.append("compilemessages")
                 args.append("--locale={0}".format(locale))
-                if self.getDjangoVersion() >= (1, 8, 0):
-                    if self.__plugin.getPreferences("FuzzyTranslations"):
-                        args.append("--use-fuzzy")
+                if self.__plugin.getPreferences("FuzzyTranslations"):
+                    args.append("--use-fuzzy")
                 argsLists.append(args)
         
         if len(argsLists) == 0:
@@ -3491,9 +3300,8 @@
         args.append(self.__getPythonExecutable())
         args.append("manage.py")
         args.append("compilemessages")
-        if self.getDjangoVersion() >= (1, 8, 0):
-            if self.__plugin.getPreferences("FuzzyTranslations"):
-                args.append("--use-fuzzy")
+        if self.__plugin.getPreferences("FuzzyTranslations"):
+            args.append("--use-fuzzy")
         
         try:
             wd = self.__sitePath()

eric ide

mercurial