From: Christian Heller <c.heller@plomlompom.de>
Date: Wed, 1 May 2024 15:42:51 +0000 (+0200)
Subject: Refactor BaseModel.by_id (integrating ._by_id).
X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/static/%7B%7B%20web_path%20%7D%7D/processes?a=commitdiff_plain;h=3a74c67ef298d16e7a7e5dd030e1fd813f42f0b4;p=taskplom

Refactor BaseModel.by_id (integrating ._by_id).
---

diff --git a/plomtask/db.py b/plomtask/db.py
index 34b5887..8e55290 100644
--- a/plomtask/db.py
+++ b/plomtask/db.py
@@ -179,27 +179,26 @@ class BaseModel(Generic[BaseModelId]):
         obj.cache()
         return obj
 
-    @classmethod
-    def _by_id(cls, db_conn: DatabaseConnection,
-               id_: BaseModelId) -> Self | None:
-        """Return instance found by ID, or None, and if from cache or not."""
-        obj = cls.get_cached(id_)
-        if not obj:
-            for row in db_conn.row_where(cls.table_name, 'id', id_):
-                obj = cls.from_table_row(db_conn, row)
-                obj.cache()
-                break
-        return obj
-
     @classmethod
     def by_id(cls, db_conn: DatabaseConnection,
               id_: BaseModelId | None,
               # pylint: disable=unused-argument
               create: bool = False) -> Self:
-        """Retrieve by id_, on failure throw NotFoundException."""
+        """Retrieve by id_, on failure throw NotFoundException.
+
+        First try to get from cls.cache_, only then check DB; if found,
+        put into cache.
+
+        If create=True, make anew (but do not cache yet).
+        """
         obj = None
         if id_ is not None:
-            obj = cls._by_id(db_conn, id_)
+            obj = cls.get_cached(id_)
+            if not obj:
+                for row in db_conn.row_where(cls.table_name, 'id', id_):
+                    obj = cls.from_table_row(db_conn, row)
+                    obj.cache()
+                    break
         if obj:
             return obj
         if create: