import click import logging from flask import Flask from flask.cli import AppGroup from portal import db from management import data from management.data import shared from portal.service.general import find_user log = logging.getLogger(__name__) data_cli = AppGroup('data') users_cli = AppGroup('users') flask_app: Flask = None def register_commands(app: Flask): global flask_app app.cli.add_command(data_cli) app.cli.add_command(users_cli) flask_app = app return app @data_cli.command('init') def cli_init_data(): log.info("[CMD] Initializing data") log.debug(f"[CONFIG] DB: {flask_app.config['SQLALCHEMY_DATABASE_URI']}") data.init_data(db=db, app=flask_app) @users_cli.command('create') @click.argument('name') def cli_users_create(name): with flask_app.app_context(): log.info(f"[CMD] Create user: {name}") password = click.prompt('Password', hide_input=True, confirmation_prompt=True) creator = shared.DataCreator(db) user = creator.create_user( username=name, name=name, admin=True, password=password ) db.session.commit() log.info(f"[CMD] Created user: {user}") @users_cli.command('set-password') @click.argument('name') def cli_users_create(name): with flask_app.app_context(): log.info(f"[CMD] Update password for user: {name}") password = click.prompt('Password', hide_input=True, confirmation_prompt=True) user = find_user(name) user.set_password(password=password) db.session.add(user) db.session.commit() log.info(f"[CMD] Updated password for user: {user}")