home · contact · privacy
Re-order BaseModel methods for more meaningful grouping.
authorChristian Heller <c.heller@plomlompom.de>
Thu, 25 Apr 2024 05:12:41 +0000 (07:12 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 25 Apr 2024 05:12:41 +0000 (07:12 +0200)
plomtask/db.py

index 1753da43cee71ca2204bbbdfd27c69aa52bd93fe..fe67e5cc799303efada094f510b537616a30bbd0 100644 (file)
@@ -123,6 +123,45 @@ class BaseModel(Generic[BaseModelId]):
     id_: None | BaseModelId
     cache_: dict[BaseModelId, Self]
 
+    @classmethod
+    def get_cached(cls: type[BaseModelInstance],
+                   id_: BaseModelId) -> BaseModelInstance | None:
+        """Get object of id_ from class's cache, or None if not found."""
+        # pylint: disable=consider-iterating-dictionary
+        cache = cls.get_cache()
+        if id_ in cache.keys():
+            obj = cache[id_]
+            assert isinstance(obj, cls)
+            return obj
+        return None
+
+    @classmethod
+    def empty_cache(cls) -> None:
+        """Empty class's cache."""
+        cls.cache_ = {}
+
+    @classmethod
+    def get_cache(cls: type[BaseModelInstance]) -> dict[Any, BaseModel[Any]]:
+        """Get cache dictionary, create it if not yet existing."""
+        if not hasattr(cls, 'cache_'):
+            d: dict[Any, BaseModel[Any]] = {}
+            cls.cache_ = d
+        return cls.cache_
+
+    def cache(self) -> None:
+        """Update object in class's cache."""
+        if self.id_ is None:
+            raise HandledException('Cannot cache object without ID.')
+        cache = self.__class__.get_cache()
+        cache[self.id_] = self
+
+    def uncache(self) -> None:
+        """Remove self from cache."""
+        if self.id_ is None:
+            raise HandledException('Cannot un-cache object without ID.')
+        cache = self.__class__.get_cache()
+        del cache[self.id_]
+
     @classmethod
     def from_table_row(cls: type[BaseModelInstance],
                        # pylint: disable=unused-argument
@@ -149,6 +188,22 @@ class BaseModel(Generic[BaseModelId]):
                 break
         return obj, from_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.get_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())
+
     def set_int_id(self, id_: int | None) -> None:
         """Set id_ if >= 1 or None, else fail."""
         if (id_ is not None) and id_ < 1:
@@ -168,58 +223,3 @@ class BaseModel(Generic[BaseModelId]):
         if update_with_lastrowid:
             self.id_ = cursor.lastrowid  # type: ignore[assignment]
         self.cache()
-
-    @classmethod
-    def get_cached(cls: type[BaseModelInstance],
-                   id_: BaseModelId) -> BaseModelInstance | None:
-        """Get object of id_ from class's cache, or None if not found."""
-        # pylint: disable=consider-iterating-dictionary
-        cache = cls.get_cache()
-        if id_ in cache.keys():
-            obj = cache[id_]
-            assert isinstance(obj, cls)
-            return obj
-        return None
-
-    def cache(self) -> None:
-        """Update object in class's cache."""
-        if self.id_ is None:
-            raise HandledException('Cannot cache object without ID.')
-        cache = self.__class__.get_cache()
-        cache[self.id_] = self
-
-    def uncache(self) -> None:
-        """Remove self from cache."""
-        if self.id_ is None:
-            raise HandledException('Cannot un-cache object without ID.')
-        cache = self.__class__.get_cache()
-        del cache[self.id_]
-
-    @classmethod
-    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.get_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())
-
-    @classmethod
-    def get_cache(cls: type[BaseModelInstance]) -> dict[Any, BaseModel[Any]]:
-        """Get cache dictionary, create it if not yet existing."""
-        if not hasattr(cls, 'cache_'):
-            d: dict[Any, BaseModel[Any]] = {}
-            cls.cache_ = d
-        return cls.cache_