Skip to content
Snippets Groups Projects
app.py 5.03 KiB
Newer Older
"""
Main application module
- Creates instance of the flask app named app
- registers commands
"""
import logging as logger
Peter Stanko's avatar
Peter Stanko committed

import click
from flask import Flask
Barbora Kompišová's avatar
Barbora Kompišová committed
from flask.cli import AppGroup, run_command
import portal
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
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')
Peter Stanko's avatar
Peter Stanko committed
devel_cli = AppGroup('devel', help='Development management')
submissions_cli = AppGroup('submissions', help='Submissions management')
projects_cli = AppGroup('projects', help='Projects management')
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)
Peter Stanko's avatar
Peter Stanko committed
app.cli.add_command(submissions_cli)
app.cli.add_command(projects_cli)
manager = DataManagement(app, db)

celery = portal.get_celery(app)


@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')
@click.option('-p', '--password', help='Users password', prompt=True, hide_input=True,
              confirmation_prompt=True)
def cli_users_create(name, password):
    log.info(f"[CMD] Create User: {name}")
    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')
@click.option('-p', '--password', help='Users password', prompt=True, hide_input=True,
              confirmation_prompt=True)
def cli_users_set_password(name, password):
    log.info(f"[CMD] Update password for user: {name}")
    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}")

Peter Stanko's avatar
Peter Stanko committed

@users_cli.command('list', help='List all users')
def cli_users_list():
    log.info(f'[CMD] Listing users')
    manager.list_users()
Peter Stanko's avatar
Peter Stanko committed

#
# 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}")


Peter Stanko's avatar
Peter Stanko committed
@courses_cli.command('list', help="List courses")
def cli_courses_list():
    log.info(f"[CMD] List Courses")
    course = manager.list_courses()


Peter Stanko's avatar
Peter Stanko committed
@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}")
Peter Stanko's avatar
Peter Stanko committed
@projects_cli.command('activate', help="activates project")
@click.option('-p', '--project')
@click.option('-c', '--course')
def cli_projects_activate(project, course):
    log.info(f"[CMD] Activating project: {project} in course {course}")
    project = manager.activate_project(course, project)
    log.info(f"[CMD] Project has been activated: {project}")


@projects_cli.command('list', help="list projects")
@click.option('-c', '--course')
def cli_projects_list(course):
    log.info(f"[CMD] Listing projects in the course {course}")
    manager.list_projects(course)


Peter Stanko's avatar
Peter Stanko committed
@submissions_cli.command('cancel-all', help="Cancel all submissions")
def cli_submissions_cancel_all():
    log.info(f"[CMD] Cancelling all submissions")
    manager.cancel_all_submissions()


@submissions_cli.command('cancel', help="Cancel submission")
@click.argument('sid')
def cli_submissions_cancel(sid):
    log.info(f"[CMD] Cancelling all submissions")
    manager.cancel_submission(sid)


@submissions_cli.command('list', help="List all submissions")
Peter Stanko's avatar
Peter Stanko committed
    log.info(f"[CMD] List all submissions")
    manager.list_all_submissions()


@submissions_cli.command('clean-all', help="Clean all submissions")
def cli_submissions_list_all():
    log.info(f"[CMD] Clean all submissions")
    manager.clean_all_submissions()


Barbora Kompišová's avatar
Barbora Kompišová committed
if __name__ == '__main__':
    cli_run_devel()