ProjectDjango/Project.py

changeset 77
f8e92eaaba6e
parent 75
0165ce437462
child 78
5822c2e2b1c7
--- a/ProjectDjango/Project.py	Tue Dec 20 11:20:24 2016 +0100
+++ b/ProjectDjango/Project.py	Tue Dec 20 12:26:33 2016 +0100
@@ -481,6 +481,40 @@
         self.databaseSqlResetSeqAct.triggered.connect(
             self.__databaseSqlResetSequences)
         self.actions.append(self.databaseSqlResetSeqAct)
+        
+        self.databaseSqlMigrateAct = E5Action(
+            self.tr('Apply Migration'),
+            self.tr('&Apply Migration'),
+            0, 0,
+            self, 'django_database_sql_apply_migration')
+        self.databaseSqlMigrateAct.setStatusTip(self.tr(
+            'Prints the SQL statements to apply a migration of an'
+            ' application'))
+        self.databaseSqlMigrateAct.setWhatsThis(self.tr(
+            """<b>Apply Migration</b>"""
+            """<p>Prints the SQL statements to apply a migration of an"""
+            """ application.</p>"""
+        ))
+        self.databaseSqlMigrateAct.triggered.connect(
+            self.__databaseSqlMigrate)
+        self.actions.append(self.databaseSqlMigrateAct)
+        
+        self.databaseSqlMigrateBackwardsAct = E5Action(
+            self.tr('Unapply Migration'),
+            self.tr('&Unapply Migration'),
+            0, 0,
+            self, 'django_database_sql_unapply_migration')
+        self.databaseSqlMigrateBackwardsAct.setStatusTip(self.tr(
+            'Prints the SQL statements to unapply a migration of an'
+            ' application'))
+        self.databaseSqlMigrateBackwardsAct.setWhatsThis(self.tr(
+            """<b>Unapply Migration</b>"""
+            """<p>Prints the SQL statements to unapply a migration of an"""
+            """ application.</p>"""
+        ))
+        self.databaseSqlMigrateBackwardsAct.triggered.connect(
+            lambda: self.__databaseSqlMigrate(backwards=True))
+        self.actions.append(self.databaseSqlMigrateBackwardsAct)
     
     def __initToolsActions(self):
         """
@@ -746,7 +780,6 @@
         self.makeMigrationsAct.triggered.connect(self.__makeMigrations)
         self.actions.append(self.makeMigrationsAct)
         
-        # TODO: squashmigrations
         self.squashMigrationsAct = E5Action(
             self.tr('Squash Migrations'),
             self.tr('S&quash Migrations'),
@@ -761,8 +794,6 @@
         ))
         self.squashMigrationsAct.triggered.connect(self.__squashMigrations)
         self.actions.append(self.squashMigrationsAct)
-        
-        # TODO: sqlmigrate
     
     def initMenu(self):
         """
@@ -852,6 +883,9 @@
             menu.addSeparator()
         menu.addAction(self.databaseSqlFlushAct)
         menu.addAction(self.databaseSqlResetSeqAct)
+        menu.addSeparator()
+        menu.addAction(self.databaseSqlMigrateAct)
+        menu.addAction(self.databaseSqlMigrateBackwardsAct)
         
         self.__menus["sql"] = menu
         
@@ -2147,6 +2181,54 @@
         """
         self.__sqlCommand(self.tr("Reset Sequences"), "sqlsequencereset")
     
+    def __databaseSqlMigrate(self, backwards=False):
+        """
+        Private slot to print the SQL statements for a migration of an
+        application.
+        
+        @param backwards flag indicating to generate the SQL code to unapply
+            a migration
+        @type bool
+        """
+        try:
+            path = self.__sitePath()
+        except DjangoNoSiteSelectedException:
+            return
+        
+        migrations = self.__getMigrations()
+        if not migrations:
+            E5MessageBox.information(
+                None,
+                self.tr("SQL Migrate"),
+                self.tr("""No migrations available."""))
+            return
+        
+        title = self.tr("SQL Migrate")
+        
+        from .DjangoMigrationSelectionDialog import \
+            DjangoMigrationSelectionDialog
+        dlg = DjangoMigrationSelectionDialog(migrations,
+                                             migrationRequired=True)
+        if dlg.exec_() == QDialog.Accepted:
+            app, migration = dlg.getData()
+            
+            args = []
+            args.append(self.__getPythonExecutable())
+            args.append("manage.py")
+            args.append("sqlmigrate")
+            if backwards:
+                args.append("--backwards")
+            args.append(app)
+            args.append(migration)
+            
+            fileFilter = self.tr("SQL Files (*.sql)")
+            
+            dia = DjangoDialog(title, fixed=True, linewrap=False,
+                               saveFilters=fileFilter)
+            res = dia.startProcess(args, path, False)
+            if res:
+                dia.exec_()
+    
     ##################################################################
     ## slots below implement migration related functions
     ##################################################################

eric ide

mercurial