From: Christian Heller 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%7B%20web_path%20%7D%7D/decks/%7B%7B%20deck_id%20%7D%7D/todo?a=commitdiff_plain;h=3a74c67ef298d16e7a7e5dd030e1fd813f42f0b4;p=plomtask 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: