mirror of https://github.com/stijndcl/didier
Start working on new roles
parent
225cc8129e
commit
c79c478ab4
|
@ -0,0 +1,32 @@
|
||||||
|
"""Add second role to ufora courses
|
||||||
|
|
||||||
|
Revision ID: 11388e39bb90
|
||||||
|
Revises: a64876b41af2
|
||||||
|
Create Date: 2022-09-25 00:09:06.625622
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "11388e39bb90"
|
||||||
|
down_revision = "a64876b41af2"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table("ufora_courses", schema=None) as batch_op:
|
||||||
|
batch_op.add_column(sa.Column("alternative_overarching_role_id", sa.BigInteger(), nullable=True))
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table("ufora_courses", schema=None) as batch_op:
|
||||||
|
batch_op.drop_column("alternative_overarching_role_id")
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
|
@ -254,6 +254,8 @@ class UforaCourse(Base):
|
||||||
compulsory: bool = Column(Boolean, server_default="1", nullable=False)
|
compulsory: bool = Column(Boolean, server_default="1", nullable=False)
|
||||||
role_id: Optional[int] = Column(BigInteger, nullable=True, unique=False)
|
role_id: Optional[int] = Column(BigInteger, nullable=True, unique=False)
|
||||||
overarching_role_id: Optional[int] = Column(BigInteger, nullable=True, unique=False)
|
overarching_role_id: Optional[int] = Column(BigInteger, nullable=True, unique=False)
|
||||||
|
# This is not the greatest fix, but there can only ever be two, so it will do the job
|
||||||
|
alternative_overarching_role_id: Optional[int] = Column(BigInteger, nullable=True, unique=False)
|
||||||
log_announcements: bool = Column(Boolean, server_default="0", nullable=False)
|
log_announcements: bool = Column(Boolean, server_default="0", nullable=False)
|
||||||
|
|
||||||
announcements: list[UforaAnnouncement] = relationship(
|
announcements: list[UforaAnnouncement] = relationship(
|
||||||
|
|
|
@ -0,0 +1,160 @@
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
|
from database.engine import DBSession
|
||||||
|
from database.schemas import UforaCourse, UforaCourseAlias
|
||||||
|
|
||||||
|
__all__ = ["main"]
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
"""Add the Ufora courses for the 2022-2023 academic year"""
|
||||||
|
session: AsyncSession
|
||||||
|
async with DBSession() as session:
|
||||||
|
"""3rd Bachelor"""
|
||||||
|
artificiele_intelligentie = UforaCourse(
|
||||||
|
code="C003756",
|
||||||
|
name="Artificiële Intelligentie",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=891743671022673920,
|
||||||
|
overarching_role_id=891743208248324196,
|
||||||
|
)
|
||||||
|
|
||||||
|
algoritmen_datastructuren_3 = UforaCourse(
|
||||||
|
code="C003782",
|
||||||
|
name="Algoritmen en Datastructuren 3",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=891743791466307654,
|
||||||
|
overarching_role_id=891743208248324196,
|
||||||
|
)
|
||||||
|
|
||||||
|
automaten_berekenbaarheid_complexiteit = UforaCourse(
|
||||||
|
code="C003785",
|
||||||
|
name="Automaten, Berekenbaarheid en Complexiteit",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=891744082404200539,
|
||||||
|
overarching_role_id=891743208248324196,
|
||||||
|
)
|
||||||
|
|
||||||
|
besturingssystemen = UforaCourse(
|
||||||
|
code="E019010",
|
||||||
|
name="Besturingssystemen",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=891743898291032114,
|
||||||
|
overarching_role_id=891743208248324196,
|
||||||
|
)
|
||||||
|
|
||||||
|
computationele_biologie = UforaCourse(
|
||||||
|
code="C003789",
|
||||||
|
name="Computationele Biologie",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=891744050988847135,
|
||||||
|
overarching_role_id=891743208248324196,
|
||||||
|
)
|
||||||
|
|
||||||
|
logisch_programmeren = UforaCourse(
|
||||||
|
code="C003783",
|
||||||
|
name="Logisch Programmeren",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=891743966482034800,
|
||||||
|
overarching_role_id=891743208248324196,
|
||||||
|
)
|
||||||
|
|
||||||
|
software_engineering_lab_2 = UforaCourse(
|
||||||
|
code="C003784",
|
||||||
|
name="Software Engineering Lab 2",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=891744007300980737,
|
||||||
|
overarching_role_id=891743208248324196,
|
||||||
|
)
|
||||||
|
|
||||||
|
modelleren_en_simuleren = UforaCourse(
|
||||||
|
course_id=636139,
|
||||||
|
code="C003786",
|
||||||
|
name="Modelleren en Simuleren",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
overarching_role_id=891744461405687808,
|
||||||
|
log_announcements=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
informatiebeveiliging = UforaCourse(
|
||||||
|
code="E019400",
|
||||||
|
name="Informatiebeveiliging",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=1023333190678626314,
|
||||||
|
overarching_role_id=891744461405687808,
|
||||||
|
alternative_overarching_role_id=1023278462733127710,
|
||||||
|
)
|
||||||
|
|
||||||
|
parallelle_computersystemen = UforaCourse(
|
||||||
|
code="E034140",
|
||||||
|
name="Parallelle Computersystemen",
|
||||||
|
year=3,
|
||||||
|
compulsory=True,
|
||||||
|
role_id=1023300295918358691,
|
||||||
|
overarching_role_id=891744461405687808,
|
||||||
|
alternative_overarching_role_id=1023278462733127710,
|
||||||
|
)
|
||||||
|
|
||||||
|
session.add_all(
|
||||||
|
[
|
||||||
|
artificiele_intelligentie,
|
||||||
|
algoritmen_datastructuren_3,
|
||||||
|
automaten_berekenbaarheid_complexiteit,
|
||||||
|
besturingssystemen,
|
||||||
|
computationele_biologie,
|
||||||
|
logisch_programmeren,
|
||||||
|
software_engineering_lab_2,
|
||||||
|
modelleren_en_simuleren,
|
||||||
|
informatiebeveiliging,
|
||||||
|
parallelle_computersystemen,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
await session.commit()
|
||||||
|
|
||||||
|
"""Aliases"""
|
||||||
|
ai = UforaCourseAlias(course_id=artificiele_intelligentie.course_id, alias="AI")
|
||||||
|
ad3 = UforaCourseAlias(course_id=algoritmen_datastructuren_3.course_id, alias="AD3")
|
||||||
|
abc = (UforaCourseAlias(course_id=automaten_berekenbaarheid_complexiteit.course_id, alias="ABC"),)
|
||||||
|
bs = UforaCourseAlias(course_id=besturingssystemen.course_id, alias="BS")
|
||||||
|
compbio = UforaCourseAlias(course_id=computationele_biologie.course_id, alias="Compbio")
|
||||||
|
logprog = UforaCourseAlias(course_id=logisch_programmeren.course_id, alias="LogProg")
|
||||||
|
prolog = UforaCourseAlias(course_id=logisch_programmeren.course_id, alias="Prolog")
|
||||||
|
sel2 = UforaCourseAlias(course_id=software_engineering_lab_2.course_id, alias="SEL2")
|
||||||
|
selab2 = UforaCourseAlias(course_id=software_engineering_lab_2.course_id, alias="SELab2")
|
||||||
|
modsim = UforaCourseAlias(course_id=modelleren_en_simuleren.course_id, alias="ModSim")
|
||||||
|
infosec = UforaCourseAlias(course_id=informatiebeveiliging.course_id, alias="InfoSec")
|
||||||
|
information_security = UforaCourseAlias(course_id=informatiebeveiliging.course_id, alias="Information Security")
|
||||||
|
pcs = UforaCourseAlias(course_id=parallelle_computersystemen.course_id, alias="PCS")
|
||||||
|
parallel_computer_systems = UforaCourseAlias(
|
||||||
|
parallelle_computersystemen.course_id, alias="Parallel Computer Systems"
|
||||||
|
)
|
||||||
|
|
||||||
|
session.add_all(
|
||||||
|
[
|
||||||
|
ai,
|
||||||
|
ad3,
|
||||||
|
abc,
|
||||||
|
bs,
|
||||||
|
compbio,
|
||||||
|
logprog,
|
||||||
|
prolog,
|
||||||
|
sel2,
|
||||||
|
selab2,
|
||||||
|
modsim,
|
||||||
|
infosec,
|
||||||
|
information_security,
|
||||||
|
pcs,
|
||||||
|
parallel_computer_systems,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
await session.commit()
|
|
@ -54,8 +54,16 @@ class Schedule(EmbedBaseModel):
|
||||||
|
|
||||||
personal_slots = set()
|
personal_slots = set()
|
||||||
for slot in self.slots:
|
for slot in self.slots:
|
||||||
|
alt_id = slot.alternative_overarching_role_id
|
||||||
|
|
||||||
|
# Check if the user has a course selected in their roles
|
||||||
role_found = slot.role_id is not None and slot.role_id in roles
|
role_found = slot.role_id is not None and slot.role_id in roles
|
||||||
overarching_role_found = slot.overarching_role_id is not None and slot.overarching_role_id in roles
|
|
||||||
|
# Some engineering master courses are present in multiple different places,
|
||||||
|
# so this is necessary
|
||||||
|
overarching_role_found = (slot.overarching_role_id is not None and slot.overarching_role_id in roles) or (
|
||||||
|
alt_id is not None and alt_id in roles
|
||||||
|
)
|
||||||
if role_found or overarching_role_found:
|
if role_found or overarching_role_found:
|
||||||
personal_slots.add(slot)
|
personal_slots.add(slot)
|
||||||
|
|
||||||
|
@ -131,6 +139,11 @@ class ScheduleSlot:
|
||||||
# so this is guaranteed to be unique
|
# so this is guaranteed to be unique
|
||||||
self._hash = hash(f"{self.course.course_id} {str(self.start_time)}")
|
self._hash = hash(f"{self.course.course_id} {str(self.start_time)}")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def alternative_overarching_role_id(self) -> Optional[int]:
|
||||||
|
"""Shortcut to getting the alternative overarching role id for this slot"""
|
||||||
|
return self.course.alternative_overarching_role_id
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def overarching_role_id(self) -> Optional[int]:
|
def overarching_role_id(self) -> Optional[int]:
|
||||||
"""Shortcut to getting the overarching role id for this slot"""
|
"""Shortcut to getting the overarching role id for this slot"""
|
||||||
|
|
Loading…
Reference in New Issue