Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
populate.py 3.19 KiB
import random

import app.database.controller as dbc
from app import create_app, db
from app.database.models import City, QuestionType, Role


def _add_items():
    media_types = ["Image", "Video"]
    question_types = ["Boolean", "Multiple", "Text"]
    component_types = ["Text", "Image"]
    view_types = ["Team", "Judge", "Audience", "Operator"]

    roles = ["Admin", "Editor"]
    cities = ["Linköping", "Stockholm", "Norrköping", "Örkelljunga"]
    teams = ["Gymnasieskola A", "Gymnasieskola B", "Gymnasieskola C"]

    for name in media_types:
        dbc.add.mediaType(name)

    for name in question_types:
        dbc.add.questionType(name)

    for name in component_types:
        dbc.add.componentType(name)

    for name in view_types:
        dbc.add.viewType(name)

    for name in roles:
        dbc.add.role(name)

    for name in cities:
        dbc.add.city(name)

    admin_id = Role.query.filter(Role.name == "Admin").one().id
    editor_id = Role.query.filter(Role.name == "Editor").one().id

    city_id = City.query.filter(City.name == "Linköping").one().id

    # Add users
    dbc.add.user("admin@test.se", "password", admin_id, city_id)
    dbc.add.user("test@test.se", "password", editor_id, city_id)

    question_types_items = dbc.get.all(QuestionType)

    # Add competitions
    for i in range(len(question_types_items)):
        item_comp = dbc.add.competition(f"Tävling {i}", 2000 + i, city_id)
        dbc.edit.slide(item_comp.slides[0], timer=5, title="test-slide-title")

        # Add two more slides to competition
        dbc.add.slide(item_comp)
        dbc.add.slide(item_comp)

        # Add slides
        for j, item_slide in enumerate(item_comp.slides):
            # Populate slide with data
            item_slide.title = f"Slide {j}"
            item_slide.body = f"Body {j}"
            item_slide.timer = 100 + j
            # item_slide.settings = "{}"
            dbc.utils.commit_and_refresh(item_slide)

            # Add question to competition
            dbc.add.question(
                name=f"Question {j}: {question_types_items[j].name}",
                total_score=j,
                type_id=question_types_items[j].id,
                item_slide=item_slide,
            )

            # Add text components
            # TODO: Add images as components
            for k in range(3):
                x = random.randrange(1, 500)
                y = random.randrange(1, 500)
                w = random.randrange(150, 400)
                h = random.randrange(150, 400)
                dbc.add.component(1, item_slide, {"text": f"hej{k}"}, x, y, w, h)

        # TODO: Remove comments when slide without questions is fixed
        # item_slide = dbc.add.slide(item_comp)
        # item_slide.title = f"Slide {len(item_comp.slides)}"
        # item_slide.body = f"Body {len(item_comp.slides)}"
        # item_slide.timer = 100 + j
        # # item_slide.settings = "{}"
        # dbc.utils.commit_and_refresh(item_slide)

        # Add teams
        for name in teams:
            dbc.add.team(f"{name}{i}", item_comp)


if __name__ == "__main__":
    app, _ = create_app("configmodule.DevelopmentConfig")

    with app.app_context():
        db.drop_all()
        db.create_all()
        _add_items()