39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
# SPDX-FileCopyrightText: 2026 Filmhuis Den Haag
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
from datetime import datetime
|
|
|
|
import sqlalchemy as sa
|
|
from pydantic import field_serializer, field_validator
|
|
from sqlmodel import Field, SQLModel
|
|
|
|
from fhdhview.models.enums import KijkWijzer, Screen
|
|
|
|
|
|
class Screening(SQLModel, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
session: int
|
|
screen: Screen = Field(default=Screen.ONE, sa_column=sa.Column(sa.Enum(Screen)))
|
|
complex_ident: str
|
|
start: datetime
|
|
end: datetime
|
|
duration: int
|
|
title: str
|
|
rating: int
|
|
seats_total: int
|
|
seats_sold: int
|
|
en_subs: bool = False
|
|
intro: bool = False
|
|
outro: bool = False
|
|
kijkwijzer: list[KijkWijzer] = Field(default_factory=list, sa_type=sa.JSON)
|
|
tags: list[str] = Field(default_factory=list, sa_type=sa.JSON)
|
|
|
|
@field_validator("kijkwijzer", mode="before")
|
|
@classmethod
|
|
def _coerce(cls, v):
|
|
return [r.value if isinstance(r, KijkWijzer) else r for r in v]
|
|
|
|
@field_serializer("kijkwijzer")
|
|
def _serialize(self, v: list[KijkWijzer]) -> list[str]:
|
|
return [r.value if isinstance(r, KijkWijzer) else r for r in v]
|