diff -r c82b296a21ae -r a91c6a1eb23f ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py --- 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()