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, Secret
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.current_time(),
submissions_allowed_to=time.current_time() + timedelta(days=2),
archive_from=time.current_time() + 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
codename='testcourse1', name='Test Course One')
codename='testcourse2', name='test Course Two')
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)
course=test_course1, name="HW02", codename='hw02', config=dict(
file_whitelist="main.cpp\nfunc.hpp\nfunc.cpp",
test_files_source='https://gitlab.fi.muni.cz/grp-kontr2/testing/test-repo',
test_files_subdir='hw02',
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.current_time() - timedelta(days=1),
submissions_allowed_to=time.current_time() + timedelta(days=10),
archive_from=time.current_time() + timedelta(days=30)
course=test_course2, name="HW01", codename='hw01', config=dict(
file_whitelist="main.c",
test_files_source='https://gitlab.fi.muni.cz/grp-kontr2/testing/test-repo',
test_files_subdir='hw01',
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.current_time() - timedelta(days=1),
submissions_allowed_to=time.current_time() - timedelta(minutes=1),
archive_from=time.current_time() + timedelta(days=30)
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)
tc1_worker = factory.scaffold_role(role_type='worker', 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)
tc2_worker = factory.scaffold_role(role_type='worker', 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)
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)
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.state = SubmissionState.CANCELLED
tc1_sub_p1_abort.state = SubmissionState.ABORTED
tc1_sub_p1_finished.state = SubmissionState.FINISHED
tc1_sub_p1_in_progress.state = SubmissionState.IN_PROGRESS
# Projects in groups
tc1_students.projects.append(tc1_hw01)
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,
factory.create_review_item(author=teacher2, review=review, line=5,
factory.create_review_item(author=teacher1, review=review,
line=1, content="oops")
db.session.add_all([review])
# components
executor = factory.create_worker(name='executor', url='http://localhost:8080')
executor.secrets.append(Secret('executor_secret', 'executor_secret'))
executor.roles.append(tc1_worker)
executor.roles.append(tc2_worker)
db.session.add_all([executor])
# Commit to the DB
db.session.commit()