From eb71470edcda56b8fa76519bd39f02814edaeda0 Mon Sep 17 00:00:00 2001 From: stijndcl Date: Fri, 17 Jun 2022 01:36:47 +0200 Subject: [PATCH] Create ufora-related revision --- ...6_initial_migration_ufora_announcements.py | 52 +++++++++++++++++++ database/models.py | 44 +++++++++++++++- tests/conftest.py | 2 - 3 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 alembic/versions/9e8ce58c0a26_initial_migration_ufora_announcements.py diff --git a/alembic/versions/9e8ce58c0a26_initial_migration_ufora_announcements.py b/alembic/versions/9e8ce58c0a26_initial_migration_ufora_announcements.py new file mode 100644 index 0000000..7b7d3f8 --- /dev/null +++ b/alembic/versions/9e8ce58c0a26_initial_migration_ufora_announcements.py @@ -0,0 +1,52 @@ +"""Initial migration: Ufora announcements + +Revision ID: 9e8ce58c0a26 +Revises: +Create Date: 2022-06-17 01:36:02.767151 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '9e8ce58c0a26' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('ufora_courses', + sa.Column('course_id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=False), + sa.Column('code', sa.Text(), nullable=False), + sa.Column('year', sa.Integer(), nullable=False), + sa.PrimaryKeyConstraint('course_id'), + sa.UniqueConstraint('code'), + sa.UniqueConstraint('name') + ) + op.create_table('ufora_announcements', + sa.Column('announcement_id', sa.Integer(), nullable=False), + sa.Column('course_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['course_id'], ['ufora_courses.course_id'], ), + sa.PrimaryKeyConstraint('announcement_id') + ) + op.create_table('ufora_course_aliases', + sa.Column('alias_id', sa.Integer(), nullable=False), + sa.Column('alias', sa.Text(), nullable=False), + sa.Column('course_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['course_id'], ['ufora_courses.course_id'], ), + sa.PrimaryKeyConstraint('alias_id'), + sa.UniqueConstraint('alias') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('ufora_course_aliases') + op.drop_table('ufora_announcements') + op.drop_table('ufora_courses') + # ### end Alembic commands ### diff --git a/database/models.py b/database/models.py index 8dc24d0..b6347a4 100644 --- a/database/models.py +++ b/database/models.py @@ -1,5 +1,47 @@ from __future__ import annotations -from sqlalchemy.orm import declarative_base +from sqlalchemy import Column, Integer, Text, ForeignKey +from sqlalchemy.orm import declarative_base, relationship Base = declarative_base() + + +class UforaCourse(Base): + """A course on Ufora""" + + __tablename__ = "ufora_courses" + + course_id: int = Column(Integer, primary_key=True) + name: str = Column(Text, nullable=False, unique=True) + code: str = Column(Text, nullable=False, unique=True) + year: int = Column(Integer, nullable=False) + + announcements: list[UforaAnnouncement] = relationship( + "UforaAnnouncement", back_populates="course", cascade="all, delete-orphan" + ) + aliases: list[UforaCourseAlias] = relationship( + "UforaCourseAlias", back_populates="course", cascade="all, delete-orphan" + ) + + +class UforaCourseAlias(Base): + """An alias for a course on Ufora that we use to refer to them""" + + __tablename__ = "ufora_course_aliases" + + alias_id: int = Column(Integer, primary_key=True) + alias: str = Column(Text, nullable=False, unique=True) + course_id: int = Column(Integer, ForeignKey("ufora_courses.course_id")) + + course: UforaCourse = relationship("UforaCourse", back_populates="aliases", uselist=False) + + +class UforaAnnouncement(Base): + """An announcement sent on Ufora""" + + __tablename__ = "ufora_announcements" + + announcement_id = Column(Integer, primary_key=True) + course_id = Column(Integer, ForeignKey("ufora_courses.course_id")) + + course = relationship("UforaCourse", back_populates="announcements", uselist=False) diff --git a/tests/conftest.py b/tests/conftest.py index 1d237cd..1ae9878 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -15,8 +15,6 @@ def tables(): Starts from an empty database and runs through all the migrations to check those as well while we're at it """ - print("CWD: ", os.getcwd()) - print("Contents: ", list(os.listdir(os.getcwd()))) alembic_config = config.Config("alembic.ini") command.upgrade(alembic_config, "head") yield