Skip to content
Snippets Groups Projects
cli_handler.py 1.59 KiB
Newer Older
  • Learn to ignore specific revisions
  • from models import *
    from flask_migrate import Migrate
    
    
    
    
    # ========== ACTION handlers ==========
    CREATE_ALL_ACTION_NAME = "create-all"
    def create_all_action_handler(flask_app, db, bind_name, con_str):
        db.create_all(bind=bind_name)
    # ========== End ACTION handlers. ==========
    
    # CLI Argument Names
    DB_BINGING_CLI_ARG_NAME = "binding"
    ACTION_CLI_ARG_NAME = "action"
    
    def handle_action(action, selected_binding, flask_app, db_to_perform_action_on, db_con_str):
        if action == CREATE_ALL_ACTION_NAME:
            create_all_action_handler(flask_app, db_to_perform_action_on, selected_binding, db_con_str)
        else:
            print("No handler for action:", action)
        print("Completed action:", action)
    
    APP_CONFIG_BINDINGS_DICT_KEY = "SQLALCHEMY_BINDS"
    def handle_cli(flask_app, lookup_db_for_binding, args):
        print("\n\n===== Flask App CLI =====")
        print(args)
        # PRE: args is a list of strings like: [db_name=John, action=migrate]
        selected_binding = None
        selected_action = None
        for arg in args:
            argname_argvalue_pair = arg.split("=")
            arg_name = argname_argvalue_pair[0]
            arg_value = argname_argvalue_pair[1]
            if arg_name == DB_BINGING_CLI_ARG_NAME:
                selected_binding = arg_value
            elif arg_name == ACTION_CLI_ARG_NAME:
                selected_action = arg_value
            else:
                print("Invalid argument supplied:", arg_name)
        bindings_dict = flask_app.config[APP_CONFIG_BINDINGS_DICT_KEY]
        handle_action(selected_action, selected_binding, flask_app, lookup_db_for_binding(selected_binding),
                      bindings_dict[selected_binding])