Skip to content
Snippets Groups Projects
app.py 3.13 KiB
Newer Older
"""
Main application module
- Creates instance of the flask app named app
- registers commands
"""
Barbora Kompišová's avatar
Barbora Kompišová committed
import click
import logging as logger
from flask import Flask
Barbora Kompišová's avatar
Barbora Kompišová committed
from flask.cli import AppGroup, run_command
import portal.logging as logging_config
from management.data import DataManagement
Barbora Kompišová's avatar
Barbora Kompišová committed
from portal import create_app, db
Peter Stanko's avatar
Peter Stanko committed
from portal.async import celery
logging_config.load_config()

log = logger.getLogger(__name__)
Barbora Kompišová's avatar
Barbora Kompišová committed
data_cli = AppGroup('data', help='Sample data initialization')
users_cli = AppGroup('users', help='Users management')
courses_cli = AppGroup('courses', help='Courses management')
Barbora Kompišová's avatar
Barbora Kompišová committed
devel_cli = AppGroup('devel', help='Development options')
Barbora Kompišová's avatar
Barbora Kompišová committed
app: Flask = create_app()
Peter Stanko's avatar
Peter Stanko committed

Barbora Kompišová's avatar
Barbora Kompišová committed
app.cli.add_command(data_cli)
app.cli.add_command(users_cli)
app.cli.add_command(courses_cli)
Barbora Kompišová's avatar
Barbora Kompišová committed
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)
Peter Stanko's avatar
Peter Stanko committed

#
# 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")
Peter Stanko's avatar
Peter Stanko committed
@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}")
Barbora Kompišová's avatar
Barbora Kompišová committed


if __name__ == '__main__':
    cli_run_devel()