43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
import datetime
|
|
from typing import TypedDict
|
|
|
|
from folkugat_web.model import sessions as model
|
|
|
|
SessionRowTuple = tuple[int, str, str, str, str | None, str | None, bool]
|
|
|
|
|
|
class SessionRowDict(TypedDict):
|
|
id: int | None
|
|
date: str
|
|
start_time: str
|
|
end_time: str
|
|
venue_name: str | None
|
|
venue_url: str | None
|
|
is_live: bool
|
|
|
|
|
|
def session_to_row(sessio: model.Session) -> SessionRowDict:
|
|
return {
|
|
'id': sessio.id,
|
|
'date': sessio.date.isoformat(),
|
|
'start_time': sessio.start_time.isoformat(),
|
|
'end_time': sessio.end_time.isoformat(),
|
|
'venue_name': sessio.venue.name,
|
|
'venue_url': sessio.venue.url,
|
|
'is_live': sessio.is_live,
|
|
}
|
|
|
|
|
|
def row_to_session(row: SessionRowTuple) -> model.Session:
|
|
return model.Session(
|
|
id=row[0],
|
|
date=datetime.date.fromisoformat(row[1]),
|
|
start_time=datetime.time.fromisoformat(row[2]),
|
|
end_time=datetime.time.fromisoformat(row[3]),
|
|
venue=model.SessionVenue(
|
|
name=row[4],
|
|
url=row[5],
|
|
),
|
|
is_live=row[6],
|
|
)
|