Skip to content
Snippets Groups Projects
commands.py 1.65 KiB
Newer Older
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}")