Allow for passing in --with-plugins to the alembic gmg subcommand.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 12 Mar 2016 19:30:08 +0000 (11:30 -0800)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 26 Mar 2016 18:39:07 +0000 (11:39 -0700)
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

index 58b931dc1f9f9f01e2e52fd2cb5e80352aa0ac54..dc679f229f961bb80c46c6fb218063ab913ca4af 100644 (file)
@@ -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):