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