Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions carpi_data_model/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ class SemesterEnum(str, PyEnum):
SUMMER = "SUMMER"


class PrerequisiteNestingTypeEnum(str, PyEnum):
AND = "AND"
OR = "OR"


RELATIONSHIP_TYPE_ENUM = SQLEnum(
RelationshipTypeEnum, name="relationship_type", native_enum=True
)
Expand All @@ -47,6 +52,11 @@ class SemesterEnum(str, PyEnum):
RestrictionTypeEnum, name="restriction_type", native_enum=True
)
SEMESTER_ENUM = SQLEnum(SemesterEnum, name="semester", native_enum=True)
PREREQUISITE_NESTING_TYPE_ENUM = SQLEnum(
PrerequisiteNestingTypeEnum,
name="prerequisite_nesting_type",
native_enum=True,
)


class Subject(Base):
Expand Down Expand Up @@ -194,3 +204,55 @@ class Course_Faculty(Base):
],
),
)


class Prerequisite_Nesting(Base):
__tablename__ = "prerequisite_nesting"

og_subj_code: Mapped[str] = mapped_column(VARCHAR(4), primary_key=True)
og_code_num: Mapped[str] = mapped_column(VARCHAR(4), primary_key=True)
id: Mapped[int] = mapped_column(SMALLINT, primary_key=True)
relationship: Mapped[PrerequisiteNestingTypeEnum | None] = mapped_column(
PREREQUISITE_NESTING_TYPE_ENUM,
nullable=True,
)
parent_id: Mapped[int | None] = mapped_column(SMALLINT, nullable=True)

__table_args__ = (
ForeignKeyConstraint(
["og_subj_code", "og_code_num"],
["course.subj_code", "course.code_num"],
),
ForeignKeyConstraint(
["og_subj_code", "og_code_num", "parent_id"],
[
"prerequisite_nesting.og_subj_code",
"prerequisite_nesting.og_code_num",
"prerequisite_nesting.id",
],
),
)


class Prerequisite_Course(Base):
__tablename__ = "prerequisite_course"

og_subj_code: Mapped[str] = mapped_column(VARCHAR(4), primary_key=True)
og_code_num: Mapped[str] = mapped_column(VARCHAR(4), primary_key=True)
parent_id: Mapped[int] = mapped_column(SMALLINT, primary_key=True)
new_subj_code: Mapped[str] = mapped_column(VARCHAR(4), primary_key=True)
new_code_num: Mapped[str] = mapped_column(VARCHAR(4), primary_key=True)

Comment thread
ramonechen marked this conversation as resolved.
__table_args__ = (
ForeignKeyConstraint(
["og_subj_code", "og_code_num", "parent_id"],
[
"prerequisite_nesting.og_subj_code",
"prerequisite_nesting.og_code_num",
"prerequisite_nesting.id",
],
),
ForeignKeyConstraint(
["new_subj_code", "new_code_num"], ["course.subj_code", "course.code_num"]
),
)
7 changes: 5 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@ name = "carpi-data-model"
version = "1.0"
dependencies = ["SQLAlchemy>=2.0.0"]
requires-python = ">=3.10"
authors = [{ name = "Raymond Chen" }, { name = "Jack Zgombic" }]
authors = [
{ name = "Raymond Chen" },
{ name = "Jack Zgombic" },
{ name = "Nick Wang" },
]
maintainers = [{ name = "Raymond Chen" }]
description = "The MySQL database schema used in Project CARPI."
readme = "README.md"
license = "MIT"
license-files = ["LICENSE"]
keywords = ["egg", "bacon", "sausage", "tomatoes", "Lobster Thermidor"]
classifiers = [
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
Expand Down
6 changes: 5 additions & 1 deletion tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
Course_Relationship,
Course_Restriction,
Faculty,
Prerequisite_Course,
Prerequisite_Nesting,
Restriction,
Subject,
)
Expand Down Expand Up @@ -50,7 +52,7 @@ def test_create_tables(engine):
errors. Ensures the tables actually exist in the database catalog.
"""
inspector = inspect(engine)
existing_tables = inspector.get_table_names()
existing_tables = set(inspector.get_table_names())

assert Subject.__tablename__ in existing_tables
assert Attribute.__tablename__ in existing_tables
Expand All @@ -62,6 +64,8 @@ def test_create_tables(engine):
assert Course_Restriction.__tablename__ in existing_tables
assert Course_Offering.__tablename__ in existing_tables
assert Course_Faculty.__tablename__ in existing_tables
assert Prerequisite_Nesting.__tablename__ in existing_tables
assert Prerequisite_Course.__tablename__ in existing_tables


def test_insert_and_query(engine):
Expand Down
Loading