home · contact · privacy
Remove more redundant code.
[plomtask] / plomtask / db.py
index 634862ce6c57b94282e95ce02c7ef1d21d42c99a..2d9ae2714ca9a2e625036ea44f295880db986f16 100644 (file)
@@ -196,3 +196,19 @@ class BaseModel(Generic[BaseModelId]):
     def empty_cache(cls) -> None:
         """Empty class's cache."""
         cls.cache_ = {}
+
+    @classmethod
+    def all(cls: type[BaseModelInstance],
+            db_conn: DatabaseConnection) -> list[BaseModelInstance]:
+        """Collect all objects of class."""
+        items: dict[BaseModelId, BaseModelInstance] = {}
+        for k, v in cls.cache_.items():
+            assert isinstance(v, cls)
+            items[k] = v
+        already_recorded = items.keys()
+        for id_ in db_conn.column_all(cls.table_name, 'id'):
+            if id_ not in already_recorded:
+                # pylint: disable=no-member
+                item = cls.by_id(db_conn, id_)  # type: ignore[attr-defined]
+                items[item.id_] = item
+        return list(items.values())