ProjectDjango/Project.py

changeset 75
0165ce437462
parent 73
8a4ccc4f1359
child 77
f8e92eaaba6e
--- 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:

eric ide

mercurial