--- a/ProjectDjango/Project.py Mon Dec 19 19:26:40 2016 +0100 +++ b/ProjectDjango/Project.py Mon Dec 19 20:22:37 2016 +0100 @@ -747,6 +747,20 @@ self.actions.append(self.makeMigrationsAct) # TODO: squashmigrations + self.squashMigrationsAct = E5Action( + self.tr('Squash Migrations'), + self.tr('S&quash Migrations'), + 0, 0, + self, 'django_migration_squash') + self.squashMigrationsAct.setStatusTip(self.tr( + 'Squash migrations of an application of the project')) + self.squashMigrationsAct.setWhatsThis(self.tr( + """<b>Squash Migrations</b>""" + """<p>This squashes migrations of an application of the""" + """ Django project.</p>""" + )) + self.squashMigrationsAct.triggered.connect(self.__squashMigrations) + self.actions.append(self.squashMigrationsAct) # TODO: sqlmigrate @@ -861,6 +875,8 @@ menu.addAction(self.unmigrateAct) menu.addSeparator() menu.addAction(self.makeMigrationsAct) + menu.addSeparator() + menu.addAction(self.squashMigrationsAct) self.__menus["migrations"] = menu @@ -1333,7 +1349,7 @@ os.path.join(virtualEnv, pythonExe) ]: if os.path.exists(python): - break + break else: python = "" @@ -1357,7 +1373,7 @@ os.path.join(virtualEnv, "bin", pythonExe)[:-1], ]: if os.path.exists(python): - break + break else: python = "" @@ -2167,13 +2183,13 @@ def __applyAllMigrations(self): """ - Public slot to apply all migrations. + Private slot to apply all migrations. """ self.applyMigrations() def __applySelectedMigrations(self): """ - Public slot to apply selected migrations of a selected app. + Private slot to apply selected migrations of a selected app. """ migrations = self.__getMigrations() if not migrations: @@ -2337,6 +2353,49 @@ if res: dia.exec_() + def __squashMigrations(self): + """ + Private slot to squash migrations. + """ + migrations = self.__getMigrations() + if not migrations: + E5MessageBox.information( + None, + self.tr("Squash Migrations"), + self.tr("""No migrations available.""")) + return + + from .DjangoSquashMigrationSelectionDialog import \ + DjangoSquashMigrationSelectionDialog + dlg = DjangoSquashMigrationSelectionDialog( + migrations, self.getDjangoVersion() >= (1, 9, 0)) + if dlg.exec_() == QDialog.Accepted: + app, start, end, noOptimize = dlg.getData() + + title = self.tr("Squash Migrations") + + try: + path = self.__sitePath() + except DjangoNoSiteSelectedException: + return + + args = [] + args.append(self.__getPythonExecutable()) + args.append("manage.py") + args.append("squashmigrations") + args.append("--noinput") + if noOptimize: + args.append("--no-optimize") + args.append(app) + if start: + args.append(start) + args.append(end) + + dia = DjangoDialog(title) + res = dia.startProcess(args, path) + if res: + dia.exec_() + ################################################################## ## slots below implement some tool functions ################################################################## @@ -2591,7 +2650,7 @@ args.append("--ipv6") addr = self.__plugin.getPreferences("ServerAddress") if addr: - args.append("--addrport=%s" % addr) + args.append("--addrport={0}".format(addr)) args += fixtures try: