- def by_date(cls, db_conn: DatabaseConnection, date: str):
- """Retrieve Day by date if in DB, else return None."""
- for row in db_conn.exec('SELECT * FROM days WHERE date = ?', (date,)):
- return cls.from_table_row(row)
- return None
+ def by_id(cls, db_conn: DatabaseConnection,
+ date: str, create: bool = False) -> Day:
+ """Retrieve Day by date if in DB (prefer cache), else return None."""
+ day, _ = super()._by_id(db_conn, date)
+ if day:
+ return day
+ if not create:
+ raise NotFoundException(f'Day not found for date: {date}')
+ day = cls(date)
+ day.cache()
+ return day
+
+ @property
+ def date(self) -> str:
+ """Return self.id_ under the assumption it's a date string."""
+ return self.id_