@classmethod
def all(cls: type[BaseModelInstance],
db_conn: DatabaseConnection) -> list[BaseModelInstance]:
- """Collect all objects of class."""
+ """Collect all objects of class into list.
+
+ Note that this primarily returns the contents of the cache, and only
+ _expands_ that by additional findings in the DB. This assumes the
+ cache is always instantly cleaned of any items that would be removed
+ from the DB.
+ """
items: dict[BaseModelId, BaseModelInstance] = {}
for k, v in cls.get_cache().items():
assert isinstance(v, cls)
self.cache()
def remove(self, db_conn: DatabaseConnection) -> None:
- """Remove from DB."""
- assert isinstance(self.id_, int | str)
+ """Remove from DB and cache."""
+ if self.id_ is None or self.__class__.get_cached(self.id_) is None:
+ raise HandledException('cannot remove unsaved item')
self.uncache()
db_conn.delete_where(self.table_name, 'id', self.id_)