import datetime from factory import Sequence, alchemy from factory.faker import Faker from factory.fuzzy import FuzzyDateTime, FuzzyInteger from app.base.mode import ModeGroups from app.dependencies import db from app.examination_schedule.models import ( ExaminationSchedule, TemporaryAvailability, TermOfDefence, ) from app.project_supervisor.models import ProjectSupervisor from app.students.models import Group, Student, YearGroup class YearGroupFactory(alchemy.SQLAlchemyModelFactory): class Meta: model = YearGroup sqlalchemy_session = db.session name = "2022/2023" mode = ModeGroups.STATIONARY.value class ProjectSupervisorFactory(alchemy.SQLAlchemyModelFactory): class Meta: model = ProjectSupervisor sqlalchemy_session = db.session first_name = Faker("first_name") last_name = Faker("last_name") email = Faker("email") limit_group = 4 class GroupFactory(alchemy.SQLAlchemyModelFactory): class Meta: model = Group sqlalchemy_session = db.session name = Sequence(lambda n: f"Group-{n}") points_for_first_term = FuzzyInteger(1, 100) points_for_second_term = FuzzyInteger(1, 100) grade_for_first_term = FuzzyInteger(2, 5) grade_for_second_term = FuzzyInteger(2, 5) class StudentFactory(alchemy.SQLAlchemyModelFactory): class Meta: model = Student sqlalchemy_session = db.session first_name = Faker("first_name") last_name = Faker("last_name") email = Faker("email") index = Sequence(lambda n: 400_000 + n) class ExaminationScheduleFactory(alchemy.SQLAlchemyModelFactory): class Meta: model = ExaminationSchedule sqlalchemy_session = db.session title = Sequence(lambda n: f"Examination schedule {n}") duration_time = 30 start_date = FuzzyDateTime( datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc), datetime.datetime(2020, 1, 5, tzinfo=datetime.timezone.utc), ) end_date = FuzzyDateTime( datetime.datetime(2020, 1, 10, tzinfo=datetime.timezone.utc), datetime.datetime(2020, 1, 20, tzinfo=datetime.timezone.utc), ) class TermOfDefenceFactory(alchemy.SQLAlchemyModelFactory): class Meta: model = TermOfDefence sqlalchemy_session = db.session start_date = Sequence( lambda n: datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc) + datetime.timedelta(n * 30) ) end_date = Sequence( lambda n: datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc) + datetime.timedelta(n * 30 + 30) ) class TemporaryAvailabilityFactory(alchemy.SQLAlchemyModelFactory): class Meta: model = TemporaryAvailability sqlalchemy_session = db.session start_date = Sequence( lambda n: datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc) + datetime.timedelta(n * 30) ) end_date = Sequence( lambda n: datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc) + datetime.timedelta(n * 30 + 30) )