ProjectDjango/Project.py

changeset 80
34b6482eb9f6
parent 78
5822c2e2b1c7
child 82
fc196e739797
--- a/ProjectDjango/Project.py	Tue Dec 20 16:20:16 2016 +0100
+++ b/ProjectDjango/Project.py	Tue Dec 20 19:56:11 2016 +0100
@@ -56,8 +56,11 @@
         @keyparam args list of parameters (list of strings)
         @keyparam mode access mode (QIODevice.OpenMode)
         """
-        if cmd.endswith('gnome-terminal') and args[0] == '-e':
-            args = ['-e', ' '.join(args[1:])]
+        if cmd.endswith(('gnome-terminal', 'konsole')):
+            if '-e' in args:
+                index = args.index('-e') + 1
+                cargs = ' '.join(args[index:])
+                args[index:] = [cargs]
         
         super(QProcess, self).start(cmd, args, mode)
     
@@ -72,8 +75,11 @@
         @keyparam path new working directory (string)
         @return tuple of successful start and process id (boolean, integer)
         """
-        if cmd.endswith('gnome-terminal') and args[0] == '-e':
-            args = ['-e', ' '.join(args[1:])]
+        if cmd.endswith(('gnome-terminal', 'konsole')):
+            if '-e' in args:
+                index = args.index('-e') + 1
+                cargs = ' '.join(args[index:])
+                args[index:] = [cargs]
         
         return QProcessPyQt.startDetached(cmd, args, path)
 
@@ -552,34 +558,6 @@
         self.diffSettingsAct.triggered.connect(self.__diffSettings)
         self.actions.append(self.diffSettingsAct)
     
-        self.cleanupAct = E5Action(
-            self.tr('Cleanup'),
-            self.tr('&Cleanup'),
-            0, 0,
-            self, 'django_tools_cleanup')
-        self.cleanupAct.setStatusTip(self.tr(
-            'Cleans out old data from the database'))
-        self.cleanupAct.setWhatsThis(self.tr(
-            """<b>Cleanup</b>"""
-            """<p>Cleans out old data from the database.</p>"""
-        ))
-        self.cleanupAct.triggered.connect(self.__cleanup)
-        self.actions.append(self.cleanupAct)
-    
-        self.validateAct = E5Action(
-            self.tr('Validate'),
-            self.tr('&Validate'),
-            0, 0,
-            self, 'django_tools_validate')
-        self.validateAct.setStatusTip(self.tr(
-            'Validates all installed models'))
-        self.validateAct.setWhatsThis(self.tr(
-            """<b>Validate</b>"""
-            """<p>Validates all installed models.</p>"""
-        ))
-        self.validateAct.triggered.connect(self.__validate)
-        self.actions.append(self.validateAct)
-    
         self.runPythonShellAct = E5Action(
             self.tr('Start Python Console'),
             self.tr('Start &Python Console'),
@@ -640,6 +618,23 @@
         self.runTestAct.triggered.connect(self.__runTestSuite)
         self.actions.append(self.runTestAct)
         
+        self.runDeprecationTestAct = E5Action(
+            self.tr('Run Testsuite (-Wall)'),
+            self.tr('Run Testsuite (-Wall)'),
+            0, 0,
+            self, 'django_tools_run_deprecation_test')
+        self.runDeprecationTestAct.setStatusTip(self.tr(
+            'Run the test suite for applications or the whole site with'
+            ' activated deprecation warnings'))
+        self.runDeprecationTestAct.setWhatsThis(self.tr(
+            """<b>Run Testsuite (-Wall)</b>"""
+            """<p>Run the test suite for applications or the whole site"""
+            """ with activated deprecation warnings.</p>"""
+        ))
+        self.runDeprecationTestAct.triggered.connect(
+            lambda: self.__runTestSuite(deprecation=True))
+        self.actions.append(self.runDeprecationTestAct)
+        
         self.runTestServerAct = E5Action(
             self.tr('Run Testserver'),
             self.tr('Run Test&server'),
@@ -867,8 +862,9 @@
         menu = QMenu(self.tr("&Database"), self.__ui)
         menu.setTearOffEnabled(True)
         
-        menu.addAction(self.syncDatabaseAct)
-        menu.addSeparator()
+        if self.getDjangoVersion() < (1, 7, 0):
+            menu.addAction(self.syncDatabaseAct)
+            menu.addSeparator()
         menu.addAction(self.inspectDatabaseAct)
         menu.addSeparator()
         menu.addAction(self.flushDatabaseAct)
@@ -947,8 +943,6 @@
         menu.setTearOffEnabled(True)
         
         menu.addAction(self.diffSettingsAct)
-        menu.addAction(self.cleanupAct)
-        menu.addAction(self.validateAct)
         menu.addSeparator()
         menu.addAction(self.runPythonShellAct)
         
@@ -970,6 +964,7 @@
         menu.addAction(self.loadDataAct)
         menu.addSeparator()
         menu.addAction(self.runTestAct)
+        menu.addAction(self.runDeprecationTestAct)
         menu.addAction(self.runTestServerAct)
         
         self.__menus["testing"] = menu
@@ -1600,6 +1595,24 @@
         else:
             return (False, consoleCmd)
     
+    def __adjustWorkingDirectory(self, args, wd):
+        """
+        Private method to adjust the working directory in the arguments list.
+        
+        @param args list of arguments to be modified
+        @type list of str
+        @param wd working directory
+        @type str
+        """
+        if args[0].endswith("konsole") and "--workdir" in args:
+            index = args.index("--workdir")
+            args[index + 1] = wd
+        elif args[0].endswith("gnome-terminal"):
+            for index in range(len(args)):
+                if args[index].startswith("--working-directory="):
+                    args[index] = "--working-directory={0}".format(wd)
+                    break
+    
     ##################################################################
     ## slots below implement creation functions
     ##################################################################
@@ -2019,6 +2032,7 @@
             args.append("syncdb")
             try:
                 wd = self.__sitePath()
+                self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
                 if not started:
                     E5MessageBox.critical(
@@ -2097,6 +2111,7 @@
             args.append("dbshell")
             try:
                 wd = self.__sitePath()
+                self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
                 if not started:
                     E5MessageBox.critical(
@@ -2523,50 +2538,6 @@
         if res:
             dia.exec_()
     
-    def __cleanup(self):
-        """
-        Private slot to clean out old data from the database.
-        """
-        title = self.tr("Cleanup")
-        
-        args = []
-        args.append(self.__getPythonExecutable())
-        args.append("manage.py")
-        args.append("cleanup")
-        
-        try:
-            path = self.__sitePath()
-        except DjangoNoSiteSelectedException:
-            return
-        
-        dia = DjangoDialog(
-            title,
-            msgSuccess=self.tr("Database cleaned up successfully."))
-        res = dia.startProcess(args, path)
-        if res:
-            dia.exec_()
-    
-    def __validate(self):
-        """
-        Private slot to validate all installed models.
-        """
-        title = self.tr("Validate")
-        
-        args = []
-        args.append(self.__getPythonExecutable())
-        args.append("manage.py")
-        args.append("validate")
-        
-        try:
-            path = self.__sitePath()
-        except DjangoNoSiteSelectedException:
-            return
-        
-        dia = DjangoDialog(title)
-        res = dia.startProcess(args, path)
-        if res:
-            dia.exec_()
-    
     def __runPythonShell(self):
         """
         Private slot to start a Python console for a Django project.
@@ -2588,6 +2559,7 @@
                     args.append("--plain")
             try:
                 wd = self.__sitePath()
+                self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
                 if not started:
                     E5MessageBox.critical(
@@ -2704,9 +2676,12 @@
             if res:
                 dia.exec_()
     
-    def __runTestSuite(self):
+    def __runTestSuite(self, deprecation=False):
         """
         Private slot to run the test suite for applications or the whole site.
+        
+        @param deprecation flag indicating to test for deprecation warnings
+        @type bool
         """
         consoleCmd = self.__isSpawningConsole(
             self.__plugin.getPreferences("ConsoleCommandNoClose"))[1]
@@ -2719,10 +2694,13 @@
             args = Utilities.parseOptionString(consoleCmd)
             args[0] = Utilities.getExecutablePath(args[0])
             args.append(self.__getPythonExecutable())
+            if deprecation:
+                args.append("-Wall")
             args.append("manage.py")
             args.append("test")
             args += self.__getApplications()
             
+            self.__adjustWorkingDirectory(args, wd)
             started, pid = QProcess.startDetached(args[0], args[1:], wd)
             if not started:
                 E5MessageBox.critical(
@@ -2816,6 +2794,7 @@
                 args.append(userName)
                 try:
                     wd = self.__sitePath()
+                    self.__adjustWorkingDirectory(args, wd)
                     started, pid = QProcess.startDetached(
                         args[0], args[1:], wd)
                     if not started:
@@ -2841,6 +2820,7 @@
             args.append("createsuperuser")
             try:
                 wd = self.__sitePath()
+                self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
                 if not started:
                     E5MessageBox.critical(

eric ide

mercurial