""" Main application module - Creates instance of the flask app named app - registers commands """ import click import logging as logger from flask import Flask from flask.cli import AppGroup, run_command import portal.logging as logging_config from management.data import DataManagement from portal import create_app, db from portal.async import celery logging_config.load_config() log = logger.getLogger(__name__) data_cli = AppGroup('data', help='Sample data initialization') users_cli = AppGroup('users', help='Users management') courses_cli = AppGroup('courses', help='Courses management') devel_cli = AppGroup('devel', help='Development options') app: Flask = create_app() app.cli.add_command(data_cli) app.cli.add_command(users_cli) app.cli.add_command(courses_cli) app.cli.add_command(devel_cli) manager = DataManagement(app, db) @devel_cli.command('run', help='Runs the devel server with initializes db') @click.option('-p', '--port', default=8000) @click.pass_context def cli_run_devel(ctx, port): manager.reset_db() manager.create_admin_user('admin', '789789') manager.init_data() ctx.forward(run_command, port) # # Data related commands # @data_cli.command('init', help='Initializes sample data') @click.argument('env') def cli_init_data(env): log.info("[CMD] Initializing data") manager.init_data(env) # # Users related commands # @users_cli.command('create', help='Create admin user') @click.argument('name') def cli_users_create(name): log.info(f"[CMD] Create User: {name}") password = click.prompt('Password', hide_input=True, confirmation_prompt=True) user = manager.create_admin_user(name, password) log.info(f"[CMD] Created User: {user}") @users_cli.command('set-password', help='Sets password for the user') @click.argument('name') def cli_users_set_password(name): log.info(f"[CMD] Update password for user: {name}") password = click.prompt('Password', hide_input=True, confirmation_prompt=True) user = manager.update_users_password(name, password) log.info(f"[CMD] Updated password for user: {user}") @users_cli.command('delete', help="Deletes user") @click.argument('name') def cli_users_delete_user(name): log.info(f"[CMD] Delete user: {name}") ask: str = click.prompt('Type Y/y for confirmation', hide_input=True) if ask.lower()[0] != 'y': return manager.delete_user(name) log.info(f"[CMD] User deleted: {name}") # # Courses related commands # @courses_cli.command('create', help="Creates course with default roles") @click.argument('name', ) def cli_course_creates(name): log.info(f"[CMD] Create Course: {name}") course = manager.create_course(name) log.info(f"[CMD] Created Course: {course}") @courses_cli.command('create-role', help="Creates role by it's type in the course") @click.argument('course') @click.argument('type') @click.argument('name', required=False) def cli_course_role_creates(course, type, name=None): log.info(f"[CMD] Create Role: \"{type}\" in the \"{course}\"") course = manager.create_role(course, role_type=type, name=name) log.info(f"[CMD] Created Course: {course}") if __name__ == '__main__': cli_run_devel()