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 #########################################################