ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py

changeset 34
a91c6a1eb23f
parent 33
c82b296a21ae
child 35
65a377b7a52c
--- a/ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py	Wed Nov 25 20:10:41 2020 +0100
+++ b/ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py	Thu Nov 26 20:11:25 2020 +0100
@@ -23,6 +23,7 @@
 
 
 # TODO: add a submenu with action for the commands with command options
+# TODO: add a submenu to show the created SQL commands (--sql option)
 class MigrateProject(QObject):
     """
     Class implementing the flask-migrate project support.
@@ -142,8 +143,37 @@
         #########################################################
         ## action to up- and downgrade a databse
         #########################################################
-        # TODO: add action for flask db upgrade
+        
+        self.upgradeDatabaseAct = E5Action(
+            self.tr('Upgrade Database'),
+            self.tr('&Upgrade Database'),
+            0, 0,
+            self, 'flask_upgrade_database')
+        self.upgradeDatabaseAct.setStatusTip(self.tr(
+            'Upgrade the database to the current migration'))
+        self.upgradeDatabaseAct.setWhatsThis(self.tr(
+            """<b>Upgrade Database</b>"""
+            """<p>Upgrades the database to the current migration.</p>"""
+        ))
+        self.upgradeDatabaseAct.triggered.connect(
+            self.__upgradeDatabase)
+        self.actions.append(self.upgradeDatabaseAct)
+        
         # TODO: add action for flask db downgrade
+        self.downgradeDatabaseAct = E5Action(
+            self.tr('Downgrade Database'),
+            self.tr('&Downgrade Database'),
+            0, 0,
+            self, 'flask_downgrade_database')
+        self.downgradeDatabaseAct.setStatusTip(self.tr(
+            'Downgrade the database to the previous version'))
+        self.downgradeDatabaseAct.setWhatsThis(self.tr(
+            """<b>Downgrade Database</b>"""
+            """<p>Downgrades the database to the previous version.</p>"""
+        ))
+        self.downgradeDatabaseAct.triggered.connect(
+            self.__downgradeDatabase)
+        self.actions.append(self.downgradeDatabaseAct)
     
     def initMenu(self):
         """
@@ -161,6 +191,9 @@
         menu.addSeparator()
         menu.addAction(self.migrateCreateAct)
         menu.addSeparator()
+        menu.addAction(self.upgradeDatabaseAct)
+        menu.addAction(self.downgradeDatabaseAct)
+        menu.addSeparator()
         menu.addAction(self.migrateAvailabilityAct)
         menu.addAction(self.migrateInstallAct)
         
@@ -240,7 +273,6 @@
         """
         Private slot to show a dialog to edit the migrate configuration.
         """
-        # TODO: implement MigrateConfigDialog
         from .MigrateConfigDialog import MigrateConfigDialog
         
         config = self.__project.getData("migrate", "")
@@ -377,13 +409,55 @@
             )
             if dlg.startCommand("db", args):
                 dlg.exec()
-            if dlg.normalExit():
-                versionsPattern = os.path.join(
-                    self.__migrationsDirectory(abspath=True),
-                    "versions", "*.py")
-                for fileName in glob.iglob(versionsPattern):
-                    self.__e5project.appendFile(fileName)
+                if dlg.normalExit():
+                    versionsPattern = os.path.join(
+                        self.__migrationsDirectory(abspath=True),
+                        "versions", "*.py")
+                    for fileName in glob.iglob(versionsPattern):
+                        self.__e5project.appendFile(fileName)
     
     #########################################################
     ## slots to up- and downgrade a databse
     #########################################################
+    
+    @pyqtSlot()
+    def __upgradeDatabase(self):
+        """
+        Private slot to upgrade the database to the current migration.
+        """
+        title = self.tr("Upgrade Database")
+        
+        self.__ensureMigrateConfigured()
+        migrations = self.__migrationsDirectory()
+        
+        args = ["upgrade"]
+        if migrations:
+            args += ["--directory", migrations]
+        
+        dlg = FlaskCommandDialog(
+            self.__project, title=title,
+            msgSuccess=self.tr("\nDatabase upgraded successfully.")
+        )
+        if dlg.startCommand("db", args):
+            dlg.exec()
+    
+    @pyqtSlot()
+    def __downgradeDatabase(self):
+        """
+        Private slot to downgrade the database to the previous version.
+        """
+        title = self.tr("downgrade Database")
+        
+        self.__ensureMigrateConfigured()
+        migrations = self.__migrationsDirectory()
+        
+        args = ["downgrade"]
+        if migrations:
+            args += ["--directory", migrations]
+        
+        dlg = FlaskCommandDialog(
+            self.__project, title=title,
+            msgSuccess=self.tr("\nDatabase downgraded successfully.")
+        )
+        if dlg.startCommand("db", args):
+            dlg.exec()

eric ide

mercurial