ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py

changeset 31
e614add95516
parent 30
76c86fe13f36
child 32
80fc8deac8fe
diff -r 76c86fe13f36 -r e614add95516 ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py
--- a/ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py	Tue Nov 24 19:37:56 2020 +0100
+++ b/ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py	Tue Nov 24 20:17:20 2020 +0100
@@ -99,6 +99,22 @@
         #########################################################
         ## action to initialize the database migration system
         #########################################################
+        
+        self.migrateInitAct = E5Action(
+            self.tr('Initialize Migrations'),
+            self.tr('&Initialize Migrations'),
+            0, 0,
+            self, 'flask_init_migrations')
+        self.migrateInitAct.setStatusTip(self.tr(
+            'Initialize support for database migrations'))
+        self.migrateInitAct.setWhatsThis(self.tr(
+            """<b>Initialize Migrations</b>"""
+            """<p>Initializes the support for database migrations to be"""
+            """ stored in the configured migrations directory.</p>"""
+        ))
+        self.migrateInitAct.triggered.connect(
+            self.__initMigrations)
+        self.actions.append(self.migrateInitAct)
         # TODO: add action for flask db init
         
         #########################################################
@@ -124,6 +140,8 @@
         
         menu.addAction(self.migrateConfigAct)
         menu.addSeparator()
+        menu.addAction(self.migrateInitAct)
+        menu.addSeparator()
         menu.addAction(self.migrateAvailabilityAct)
         menu.addAction(self.migrateInstallAct)
         
@@ -138,6 +156,8 @@
         
         self.migrateConfigAct.setEnabled(available)
         self.migrateInstallAct.setEnabled(not available)
+        
+        self.migrateInitAct.setEnabled(available)
     
     def __flaskMigrateAvailable(self):
         """
@@ -159,6 +179,29 @@
         
         return False
     
+    def __migrationsDirectory(self):
+        """
+        Private method to calculate the path of the configured migrations
+        directory.
+        
+        @return path of the migrations directory
+        @rtype str
+        """
+        migrations = ""
+        
+        self.__ensureMigrateConfigured()
+        
+        migrations = self.__project.getData("migrate",
+                                            "migrationsDirectory")
+        if migrations:
+            workdir = self.__project.getApplication()[0]
+            migrations = os.path.relpath(
+                self.__e5project.getAbsoluteUniversalPath(migrations),
+                workdir
+            )
+        
+        return migrations
+    
     ########################################################
     ## Menu related slots below
     ########################################################
@@ -187,9 +230,6 @@
         config = self.__project.getData("migrate", "")
         if not config:
             self.__configureMigrate()
-            return True
-        
-        return False
     
     @pyqtSlot()
     def __installFlaskMigrate(self):
@@ -235,6 +275,31 @@
     ## slot to initialize the database migration system
     #########################################################
     
+    @pyqtSlot()
+    def __initMigrations(self):
+        """
+        Private slot to initialize the database migration system.
+        """
+        self.__ensureMigrateConfigured()
+        migrations = self.__migrationsDirectory()
+        
+        args = ["init"]
+        if migrations:
+            args += ["--directory", migrations]
+        
+        multidb = E5MessageBox.yesNo(
+            None,
+            self.tr("Multiple Databases"),
+            self.tr("""Shall the support for multiple databases be"""
+                    """ activated?"""))
+        if multidb:
+            args.append("--multidb")
+        
+        dlg = FlaskCommandDialog(
+            self.__project, title=self.tr("Initialize Migrations"))
+        if dlg.startCommand("db", args):
+            dlg.exec()
+    
     #########################################################
     ## slot to create a new database migration
     #########################################################

eric ide

mercurial