Skip to content
Snippets Groups Projects
data_dev.py 6.6 KiB
Newer Older
from datetime import timedelta
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

from management.data.shared import DataFactory
from portal.database.models import Course, Review, Submission, SubmissionState
from portal.tools import time


def get_project(factory: DataFactory, course: Course, num: int):
    project_config = dict(
        file_whitelist="main.cpp",
        pre_submit_script="python for kontr pre",
        post_submit_script="python for kontr post",
        submission_scheduler_config="python for sub Q",
        submission_parameters="{\"type\":\"text\"}",
        submissions_allowed_from=time.NOW(),
        submissions_allowed_to=time.NOW() + timedelta(days=2),
        archive_from=time.NOW() + timedelta(days=30)
        )
    return factory.create_project(course=course, name=f"HW0{num}", config=project_config)


def init_dev_data(app: Flask, db: SQLAlchemy):
    with app.app_context():
        factory = DataFactory(db)
        # users
        student1 = factory.create_user(username='student1', uco=111)
        student2 = factory.create_user(username='student2', uco=222)
        teacher1 = factory.create_user(username='teacher1', password='123123',
                                       name='Teacher And Student', uco=1001)
        teacher2 = factory.create_user(username='teacher2', password='123123',
                                       name='Teacher Only', uco=1002)
        lecturer1 = factory.create_user(
            username='lecturer1',
            name='Courses Owner',
            password='654321',
            uco=1010
            )

        db.session.commit()

        # courses
        test_course1 = factory.create_course(codename='TestCourse1', name='Test Course One')
        test_course2 = factory.create_course(codename='TestCourse2', name='test Course Two')

        # groups
        tc1_students = factory.create_group(course=test_course1, name="seminar01")
        tc1_teachers = factory.create_group(course=test_course1, name="teachers")

        tc2_students = factory.create_group(course=test_course2, name="seminar01")
        tc2_teachers = factory.create_group(course=test_course2, name="teachers")

        tc1_hw01 = get_project(factory=factory, course=test_course1, num=1)
        tc1_hw03 = get_project(factory=factory, course=test_course1, num=3)
        tc1_hw02 = factory.create_project(
            course=test_course1, name="HW02", config=dict(
                file_whitelist="main.cpp\nfunc.hpp\nfunc.cpp",
                pre_submit_script="python for kontr pre",
                post_submit_script="python for kontr post",
                submission_scheduler_config="python for sub Q",
                submission_parameters="{\"type\":\"text\"}",
                submissions_allowed_from=time.NOW() - timedelta(days=1),
                submissions_allowed_to=time.NOW() + timedelta(days=10),
                archive_from=time.NOW() + timedelta(days=30)
                )
            )

        tc2_hw01 = factory.create_project(
            course=test_course2, name="HW01", config=dict(
                file_whitelist="main.c", pre_submit_script="python for kontr pre",
                post_submit_script="python for kontr post",
                submission_scheduler_config="python for sub Q",
                submission_parameters="{\"type\":\"text\"}",
                submissions_allowed_from=time.NOW() - timedelta(days=1),
                submissions_allowed_to=time.NOW() - timedelta(minutes=1),
                archive_from=time.NOW() + timedelta(days=30)
                )
            )

        # roles
        tc1_student = factory.scaffold_role(role_type='student', course=test_course1)
        tc1_teacher = factory.scaffold_role(role_type='teacher', course=test_course1)
        tc1_owner = factory.scaffold_role(role_type='owner', course=test_course1)

        tc2_student = factory.scaffold_role(role_type='student', course=test_course2)
        tc2_teacher = factory.scaffold_role(role_type='teacher', course=test_course2)
        tc2_owner = factory.scaffold_role(role_type='owner', course=test_course2)

        #   roles
        lecturer1.roles.append(tc1_owner)
        lecturer1.roles.append(tc2_owner)
        teacher1.roles.append(tc1_teacher)
        teacher1.roles.append(tc2_student)
        teacher2.roles.append(tc1_teacher)
        teacher2.roles.append(tc2_teacher)
        student1.roles.append(tc1_student)
        student2.roles.append(tc1_student)
        student2.roles.append(tc2_student)
        #   groups
        teacher1.groups.append(tc1_teachers)
        teacher1.groups.append(tc2_students)
        teacher2.groups.append(tc1_teachers)
        teacher2.groups.append(tc2_teachers)
        student1.groups.append(tc1_students)
        student2.groups.append(tc1_students)
        student2.groups.append(tc2_students)

        # submissions
        tc2_sub1 = Submission(user=teacher1, project=tc2_hw01, parameters="")
        tc2_sub1.state = SubmissionState.FINISHED
        tc2_sub2 = Submission(user=student2, project=tc2_hw01, parameters="")
        tc2_sub2.state = SubmissionState.ABORTED

        tc1_sub_p1_cancel = Submission(user=student2, project=tc1_hw01, parameters="")
        tc1_sub_p1_cancel.state = SubmissionState.CANCELLED
        tc1_sub_p1_abort = Submission(user=student1, project=tc1_hw01, parameters="")
        tc1_sub_p1_abort.state = SubmissionState.ABORTED
        tc1_sub_p1_finished = Submission(user=student2, project=tc1_hw01, parameters="")
        tc1_sub_p1_finished.state = SubmissionState.FINISHED
        tc1_sub_p1_in_progress = Submission(user=student1, project=tc1_hw01, parameters="")
        tc1_sub_p1_in_progress.state = SubmissionState.IN_PROGRESS

        # Projects in groups
        tc1_students.projects.append(tc1_hw01)
        tc1_students.projects.append(tc1_hw03)
        tc2_students.projects.append(tc2_hw01)

        db.session.add_all(
            [tc2_sub1, tc2_sub2, tc1_sub_p1_cancel, tc1_sub_p1_abort, tc1_sub_p1_finished,
             tc1_sub_p1_in_progress])

        # reviews
        review = Review(tc2_sub1)
        factory.create_review_item(author=teacher2, review=review, line=1,
                                   content="problem here")
        factory.create_review_item(author=teacher2, review=review, line=5,
                                   content="good stuff")
        factory.create_review_item(author=teacher1, review=review,
                                   line=1, content="oops")

        db.session.add_all([review])

        # components
        factory.create_component(name='executor')
        factory.create_component(name='processing', component_type='processing')

        # Commit to the DB
        db.session.commit()