Ticket #5436: 0001-Add-gmg-raw_alembic-command.patch

File 0001-Add-gmg-raw_alembic-command.patch, 3.7 KB (added by Christopher Allan Webber, 8 years ago)
  • mediagoblin/gmg_commands/__init__.py

    From 7a6b3365adaad60d05b3bd94efc35eb1d36f80a3 Mon Sep 17 00:00:00 2001
    From: Christopher Allan Webber <cwebber@dustycloud.org>
    Date: Wed, 2 Mar 2016 17:03:04 -0800
    Subject: [PATCH] Add "gmg raw_alembic" command.
    
    This allows you to dispatch to the "alembic" command line tool properly,
    but properly respecting MediaGoblin's own configuration.
    ---
     mediagoblin/gmg_commands/__init__.py |  4 +++
     mediagoblin/gmg_commands/alembic.py  | 51 ++++++++++++++++++++++++++++++++++++
     2 files changed, 55 insertions(+)
     create mode 100644 mediagoblin/gmg_commands/alembic.py
    
    diff --git a/mediagoblin/gmg_commands/__init__.py b/mediagoblin/gmg_commands/__init__.py
    index e5f9a39..955ab17 100644
    a b SUBCOMMAND_MAP = {  
    7676        'setup': 'mediagoblin.gmg_commands.batchaddmedia:parser_setup',
    7777        'func': 'mediagoblin.gmg_commands.batchaddmedia:batchaddmedia',
    7878        'help': 'Add many media entries at once'},
     79    'raw_alembic': {
     80        'setup': 'mediagoblin.gmg_commands.alembic:parser_setup',
     81        'func': 'mediagoblin.gmg_commands.alembic:raw_alembic_cli',
     82        'help': 'Run raw alembic commands with our local database'},
    7983    # 'theme': {
    8084    #     'setup': 'mediagoblin.gmg_commands.theme:theme_parser_setup',
    8185    #     'func': 'mediagoblin.gmg_commands.theme:theme',
  • new file mediagoblin/gmg_commands/alembic.py

    diff --git a/mediagoblin/gmg_commands/alembic.py b/mediagoblin/gmg_commands/alembic.py
    new file mode 100644
    index 0000000..237fd1d
    - +  
     1# GNU MediaGoblin -- federated, autonomous media hosting
     2# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
     3#
     4# This program is free software: you can redistribute it and/or modify
     5# it under the terms of the GNU Affero General Public License as published by
     6# the Free Software Foundation, either version 3 of the License, or
     7# (at your option) any later version.
     8#
     9# This program is distributed in the hope that it will be useful,
     10# but WITHOUT ANY WARRANTY; without even the implied warranty of
     11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12# GNU Affero General Public License for more details.
     13#
     14# You should have received a copy of the GNU Affero General Public License
     15# along with this program.  If not, see <http://www.gnu.org/licenses/>.
     16
     17import argparse
     18import os
     19
     20from alembic import config
     21from sqlalchemy.orm import sessionmaker
     22
     23from mediagoblin.db.open import setup_connection_and_db_from_config
     24from mediagoblin.init import setup_global_and_app_config
     25
     26
     27class FudgedCommandLine(config.CommandLine):
     28    def main(self, args, db):
     29        options = self.parser.parse_args(args.args_for_alembic)
     30        if not hasattr(options, "cmd"):
     31            # see http://bugs.python.org/issue9253, argparse
     32            # behavior changed incompatibly in py3.3
     33            self.parser.error("too few arguments")
     34        else:
     35            Session = sessionmaker(bind=db.engine)
     36
     37            root_dir = os.path.abspath(os.path.dirname(os.path.dirname(
     38                os.path.dirname(__file__))))
     39            alembic_cfg_path = os.path.join(root_dir, 'alembic.ini')
     40            cfg = config.Config(alembic_cfg_path,
     41                                cmd_opts=options)
     42            cfg.attributes["session"] = Session()
     43            self.run_cmd(cfg, options)
     44       
     45def parser_setup(subparser):
     46    subparser.add_argument("args_for_alembic", nargs=argparse.REMAINDER)
     47
     48def raw_alembic_cli(args):
     49    global_config, app_config = setup_global_and_app_config(args.conf_file)
     50    db = setup_connection_and_db_from_config(app_config, migrations=False)
     51    FudgedCommandLine().main(args, db)