diff --git a/bin/poetry-install b/bin/poetry-install old mode 100644 new mode 100755 diff --git a/sqrl/graphql/schema.py b/sqrl/graphql/schema.py index 67b832e..fcdab80 100644 --- a/sqrl/graphql/schema.py +++ b/sqrl/graphql/schema.py @@ -214,17 +214,21 @@ class CreateTimetableMutation(graphene.Mutation): class Arguments: name = graphene.String(required=False, default_value=None) + session = graphene.String(required=False, default_value=None) timetable = graphene.Field(_TimetableObject) key = graphene.String() def mutate( - self, info: graphene.ResolveInfo, name: Optional[str] = None + self, info: graphene.ResolveInfo, name: Optional[str], + session: Optional[str] = None ) -> 'CreateTimetableMutation': """Create a timetable.""" timetable = Timetable() if name is not None: timetable.name = name + if session is not None: + timetable.session = session timetable.save() return CreateTimetableMutation(timetable=timetable, key=timetable.key) diff --git a/sqrl/models/migrations/migrate.py b/sqrl/models/migrations/migrate.py new file mode 100644 index 0000000..de86509 --- /dev/null +++ b/sqrl/models/migrations/migrate.py @@ -0,0 +1,9 @@ +from sessions_and_deleted import migrate as migrate_sessions_and_deleted + +migrations = [migrate_sessions_and_deleted] + +for i, migration in enumerate(migrations): + try: + migration() + except: + print(f"Migration {i} failed or already done.") \ No newline at end of file diff --git a/sqrl/models/migrations/sessions_and_deleted.py b/sqrl/models/migrations/sessions_and_deleted.py new file mode 100644 index 0000000..611ec99 --- /dev/null +++ b/sqrl/models/migrations/sessions_and_deleted.py @@ -0,0 +1,18 @@ +def migrate(): + from sqrl.models.timetable import Timetable + from sqrl.app import create_app + import time + + app = create_app() + with app.app_context(): + assert Timetable.objects(deleted__exists=True).count() == 0 + assert Timetable.objects(session__exists=True).count() == 0 + + print('Migrating timetables...') + start_time = time.time() + Timetable.objects().update(deleted=False, session="202209", schema_version=2) + end_time = time.time() + timetables = list(Timetable.objects.all()) + print( + f'Migrated {len(timetables)} timetables in {end_time - start_time} seconds.') + return timetables diff --git a/sqrl/models/timetable.py b/sqrl/models/timetable.py index cc76a62..0e2c619 100644 --- a/sqrl/models/timetable.py +++ b/sqrl/models/timetable.py @@ -246,3 +246,9 @@ class Timetable(db.Document): sections: dict[str, list[str]] = db.MapField( db.ListField(db.StringField()), default=dict) deleted: bool = db.BooleanField(default=False) + # Sessions have two possibilities: + # - they are the normal fall–winter session + # - they are the summer session + # Sessions are represented as a 6 character string, where the first 4 characters are the year and the last two characters are the month in which the session starts. + session: str = db.StringField(required=True, default='202209') + schema_version: int = db.IntField(required=True, default=2)