Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wip #114

Merged
merged 3 commits into from
Oct 7, 2023
Merged

wip #114

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
55 changes: 55 additions & 0 deletions server/crud/crud_run.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
from sqlalchemy.orm import Session
from sqlalchemy import and_

from server.models.run import Run
from server.schemas.run_schema import RunBase, RunSchema


def create(db: Session, run: RunBase) -> Run:
db_run: Run = Run(**run.model_dump(exclude={'run_id'}))
db.add(db_run)
db.commit()
db.refresh(db_run)
return db_run


def read(db: Session, id: int) -> Run | None:
return (db.query(Run)
.filter(Run.run_id == id)
.first())


def read_all(db: Session) -> [Run]:
return db.query(Run).all()


def read_all_W_filter(db: Session, **kwargs) -> [Run]:
return (db.query(Run)
.filter_by(**kwargs)
.all())


def update(db: Session, id: int, run: RunBase) -> Run | None:
db_run: Run | None = (db.query(Run)
.filter(Run.run_id == id)
.one_or_none())
if db_run is None:
return

for key, value in run.model_dump().items():
setattr(db_run, key, value) if value is not None else None

db.commit()
db.refresh(db_run)
return db_run


def delete(db: Session, id: int, run: RunBase) -> None:
db_run: Run | None = (db.query(Run)
.filter(Run.run_id == id)
.one_or_none())
if db_run is None:
return

db.delete(db_run)
db.commit()
3 changes: 3 additions & 0 deletions server/models/group_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ class GroupRun(Base):
runs_per_client: Mapped[int] = mapped_column(Integer(), nullable=False)
is_finished: Mapped[bool] = mapped_column(Boolean(), default=False, nullable=False)
runs: Mapped[list['Run']] = relationship(back_populates='group_run')

# results
run: Mapped['Run'] = relationship(back_populates='group_run')
10 changes: 7 additions & 3 deletions server/models/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,14 @@ class Run(Base):
group_run_id: Mapped[int] = mapped_column(Integer(), ForeignKey("group_run.group_run_id"))
run_time: Mapped[str] = mapped_column(DateTime(), nullable=False)
winner: Mapped[bool] = mapped_column(Boolean(), nullable=False)
player_1: Mapped[int] = mapped_column(Integer(), nullable=False)
player_2: Mapped[int] = mapped_column(Integer(), nullable=False)
player_1: Mapped[int] = mapped_column(Integer(), ForeignKey("submission.submission_id"))
player_2: Mapped[int] = mapped_column(Integer(), ForeignKey("submission.submission_id"))
seed: Mapped[int] = mapped_column(Integer(), nullable=False)

# results is a JSON file that's read in, so it needs to be a LargeBinary object.
results: Mapped[str] = mapped_column(LargeBinary(), nullable=False)
error: Mapped['Errors'] = relationship(back_populates='run')
error: Mapped['Errors'] = relationship(back_populates='run')
group_run: Mapped['GroupRun'] = relationship(back_populates='run')
turn_table: Mapped['TurnTable'] = relationship(back_populates='run')
player_1_link: Mapped['Submission'] = relationship()
player_2_link: Mapped['Submission'] = relationship()
9 changes: 4 additions & 5 deletions server/schemas/errors_schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations
from pydantic import BaseModel
import run_schema, submission_schema


class ErrorsBase(BaseModel):
Expand All @@ -14,13 +13,13 @@ class Config:


class ErrorsWRun(ErrorsBase):
run: run_schema.RunBase
run: 'RunBase'


class ErrorsWSubmission(ErrorsBase):
submission: submission_schema.SubmissionBase
submission: 'SubmissionBase'


class ErrorsSchema(ErrorsBase):
run: run_schema.RunBase
submission: submission_schema.SubmissionBase
run: 'RunBase'
submission: 'SubmissionBase'
3 changes: 1 addition & 2 deletions server/schemas/group_run_schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations
from pydantic import BaseModel
import run_schema


class GroupRunBase(BaseModel):
Expand All @@ -15,4 +14,4 @@ class Config:


class GroupRunSchema(GroupRunBase):
runs: list[run_schema.RunBase] = []
runs: list['RunBase'] = []
9 changes: 5 additions & 4 deletions server/schemas/run_schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations
from pydantic import BaseModel
import group_run_schema, errors_schema, turn_table_schema


class RunBase(BaseModel):
Expand All @@ -17,6 +16,8 @@ class Config:


class RunSchema(RunBase):
group_run: group_run_schema.GroupRunBase
errors: errors_schema.ErrorsWSubmission
turn_tables: list[turn_table_schema.TurnTableBase] = []
group_run: 'GroupRunBase'
errors: 'ErrorsWSubmission'
turn_tables: list['TurnTableBase'] = []
player_1: 'SubmissionBase'
player_2: 'SubmissionBase'
4 changes: 0 additions & 4 deletions server/schemas/submission.py

This file was deleted.

7 changes: 4 additions & 3 deletions server/schemas/submission_schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations
from pydantic import BaseModel
import team_schema, errors_schema


class SubmissionBase(BaseModel):
Expand All @@ -17,5 +16,7 @@ class SubmissionWTeam(SubmissionBase):


class SubmissionSchema(SubmissionWTeam):
team: team_schema.TeamBase
errors: list[errors_schema.ErrorsWRun]

team: 'TeamBase'
error: 'ErrorsWRun'

7 changes: 3 additions & 4 deletions server/schemas/team_schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations
from pydantic import BaseModel
import university_schema, team_type_schema, submission_schema


class TeamBase(BaseModel):
Expand All @@ -18,6 +17,6 @@ class TeamIdSchema(TeamBase):

# University <-> Team: Many to One
class TeamSchema(TeamBase):
uni_id: int = university_schema.UniversityBase
team_type_id: int = team_type_schema.TeamTypeBase
submissions: list[submission_schema.SubmissionBase] = []
uni_id: 'UniversityBase'
team_type_id: 'TeamTypeBase'
submissions: list['SubmissionBase'] = []
3 changes: 1 addition & 2 deletions server/schemas/team_type_schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations
from pydantic import BaseModel
import team_schema


class TeamTypeBase(BaseModel):
Expand All @@ -12,4 +11,4 @@ class Config:


class TeamTypeSchema(TeamTypeBase):
teams: list[team_schema.TeamBase] = []
teams: list['TeamBase'] = []
3 changes: 1 addition & 2 deletions server/schemas/turn_table_schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations
from pydantic import BaseModel
import run_schema


class TurnTableBase(BaseModel):
Expand All @@ -14,4 +13,4 @@ class Config:


class TurnTableSchema(TurnTableBase):
run: run_schema.RunBase
run: 'RunBase'
3 changes: 1 addition & 2 deletions server/schemas/university_schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations
from pydantic import BaseModel
import team_schema


class UniversityBase(BaseModel):
Expand All @@ -13,4 +12,4 @@ class Config:

# University <-> Team: Many to One
class UniversitySchema(UniversityBase):
teams: list[team_schema.TeamBase] = []
teams: list['TeamBase'] = []