From 406058b3405cbf626a27458d2a97887bc48cb603 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sat, 12 Mar 2016 11:30:08 -0800 Subject: [PATCH] Allow for passing in --with-plugins to the alembic gmg subcommand. This allows plugin writers to easily take advantage off alembic's migration autogeneration support. * mediagoblin/gmg_commands/alembic_commands.py: Adjusted imports. (FudgedCommandLine.main, parser_setup): Add support for importing plugins when --with-plugins is passed in. --- mediagoblin/gmg_commands/alembic_commands.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/mediagoblin/gmg_commands/alembic_commands.py b/mediagoblin/gmg_commands/alembic_commands.py index 58b931dc..dc679f22 100644 --- a/mediagoblin/gmg_commands/alembic_commands.py +++ b/mediagoblin/gmg_commands/alembic_commands.py @@ -22,17 +22,33 @@ from sqlalchemy.orm import sessionmaker from mediagoblin.db.open import setup_connection_and_db_from_config from mediagoblin.init import setup_global_and_app_config from mediagoblin.db.migration_tools import build_alembic_config +from mediagoblin.tools.common import import_component class FudgedCommandLine(config.CommandLine): def main(self, args, db, global_config): options = self.parser.parse_args(args.args_for_alembic) + + # This is useful for people running commands involving plugins, such + # as building autogenerated revisions. + if args.with_plugins: + plugins = global_config.get('plugins', {}).keys() + for plugin in plugins: + print(plugin) + try: + import_component('{0}.models:MODELS'.format(plugin)) + except ImportError: + # It doesn't really matter if there's no models to import + # here. + pass + # This code is inspired by a hack in Alembic, but isn't the same really. # Regardless, Alembic is Expat licensed. if not hasattr(options, "cmd"): print( "* Only use this command if you know what you are doing! *\n" "If not, use the 'gmg dbupdate' command instead.\n\n" + "(You can also pass --with-plugins here.)" "Alembic help:\n") self.parser.print_help() return @@ -45,6 +61,9 @@ class FudgedCommandLine(config.CommandLine): self.run_cmd(cfg, options) def parser_setup(subparser): + subparser.add_argument( + "--with-plugins", action="store_true", + help="Import all plugins' models before running alembic commands.") subparser.add_argument("args_for_alembic", nargs=argparse.REMAINDER) def raw_alembic_cli(args): -- 2.25.1