From 8650a41f9523fd51f93679244955fed4f40f91f8 Mon Sep 17 00:00:00 2001
From: Manon Blanco <blanco@teklia.com>
Date: Wed, 7 Feb 2024 08:58:27 +0000
Subject: [PATCH] Explicitely log a warning when the helper doesn't support
 cache

---
 arkindex_worker/cache.py           | 14 ++++++++++++++
 arkindex_worker/worker/dataset.py  |  2 ++
 arkindex_worker/worker/element.py  |  5 ++++-
 arkindex_worker/worker/entity.py   |  8 +++++++-
 arkindex_worker/worker/metadata.py |  4 +++-
 tests/test_dataset_worker.py       | 23 +++++++++++++++++++----
 6 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/arkindex_worker/cache.py b/arkindex_worker/cache.py
index c757a5ef..76e80f1f 100644
--- a/arkindex_worker/cache.py
+++ b/arkindex_worker/cache.py
@@ -374,3 +374,17 @@ def merge_parents_cache(paths: list, current_database: Path):
         for statement in statements:
             cursor.execute(statement)
         connection.commit()
+
+
+def unsupported_cache(func):
+    def wrapper(self, *args, **kwargs):
+        results = func(self, *args, **kwargs)
+
+        if not (self.is_read_only or self.use_cache):
+            logger.warning(
+                f"This API helper `{func.__name__}` did not update the cache database"
+            )
+
+        return results
+
+    return wrapper
diff --git a/arkindex_worker/worker/dataset.py b/arkindex_worker/worker/dataset.py
index be088ef4..86c36708 100644
--- a/arkindex_worker/worker/dataset.py
+++ b/arkindex_worker/worker/dataset.py
@@ -6,6 +6,7 @@ from collections.abc import Iterator
 from enum import Enum
 
 from arkindex_worker import logger
+from arkindex_worker.cache import unsupported_cache
 from arkindex_worker.models import Dataset, Element
 
 
@@ -68,6 +69,7 @@ class DatasetMixin:
 
         return map(format_result, list(results))
 
+    @unsupported_cache
     def update_dataset_state(self, dataset: Dataset, state: DatasetState) -> Dataset:
         """
         Partially updates a dataset state through the API.
diff --git a/arkindex_worker/worker/element.py b/arkindex_worker/worker/element.py
index 0ab37242..22b8b9c6 100644
--- a/arkindex_worker/worker/element.py
+++ b/arkindex_worker/worker/element.py
@@ -9,7 +9,7 @@ from warnings import warn
 from peewee import IntegrityError
 
 from arkindex_worker import logger
-from arkindex_worker.cache import CachedElement, CachedImage
+from arkindex_worker.cache import CachedElement, CachedImage, unsupported_cache
 from arkindex_worker.models import Element
 
 
@@ -30,6 +30,7 @@ class MissingTypeError(Exception):
 
 
 class ElementMixin:
+    @unsupported_cache
     def create_required_types(self, element_types: list[ElementType]):
         """Creates given element types in the corpus.
 
@@ -82,6 +83,7 @@ class ElementMixin:
 
         return True
 
+    @unsupported_cache
     def create_sub_element(
         self,
         element: Element,
@@ -284,6 +286,7 @@ class ElementMixin:
 
         return created_ids
 
+    @unsupported_cache
     def create_element_parent(
         self,
         parent: Element,
diff --git a/arkindex_worker/worker/entity.py b/arkindex_worker/worker/entity.py
index 07fd8a6d..ce7e004b 100644
--- a/arkindex_worker/worker/entity.py
+++ b/arkindex_worker/worker/entity.py
@@ -9,7 +9,11 @@ from warnings import warn
 from peewee import IntegrityError
 
 from arkindex_worker import logger
-from arkindex_worker.cache import CachedEntity, CachedTranscriptionEntity
+from arkindex_worker.cache import (
+    CachedEntity,
+    CachedTranscriptionEntity,
+    unsupported_cache,
+)
 from arkindex_worker.models import Element, Transcription
 
 
@@ -29,6 +33,7 @@ class MissingEntityType(Exception):
 
 
 class EntityMixin:
+    @unsupported_cache
     def check_required_entity_types(
         self, entity_types: list[str], create_missing: bool = True
     ):
@@ -206,6 +211,7 @@ class EntityMixin:
                 )
         return transcription_ent
 
+    @unsupported_cache
     def create_transcription_entities(
         self,
         transcription: Transcription,
diff --git a/arkindex_worker/worker/metadata.py b/arkindex_worker/worker/metadata.py
index 75e4d6b7..2a822bbf 100644
--- a/arkindex_worker/worker/metadata.py
+++ b/arkindex_worker/worker/metadata.py
@@ -5,7 +5,7 @@ ElementsWorker methods for metadata.
 from enum import Enum
 
 from arkindex_worker import logger
-from arkindex_worker.cache import CachedElement
+from arkindex_worker.cache import CachedElement, unsupported_cache
 from arkindex_worker.models import Element
 
 
@@ -56,6 +56,7 @@ class MetaType(Enum):
 
 
 class MetaDataMixin:
+    @unsupported_cache
     def create_metadata(
         self,
         element: Element | CachedElement,
@@ -106,6 +107,7 @@ class MetaDataMixin:
 
         return metadata["id"]
 
+    @unsupported_cache
     def create_metadatas(
         self,
         element: Element | CachedElement,
diff --git a/tests/test_dataset_worker.py b/tests/test_dataset_worker.py
index ac303e89..c8bb9ebe 100644
--- a/tests/test_dataset_worker.py
+++ b/tests/test_dataset_worker.py
@@ -470,10 +470,17 @@ def test_run_initial_dataset_state_error(
             logging.WARNING,
             f"Failed running worker on dataset dataset_id: AssertionError('{error}')",
         ),
-        (
-            logging.ERROR,
-            "Ran on 1 datasets: 0 completed, 1 failed",
-        ),
+    ] + (
+        [
+            (
+                logging.WARNING,
+                "This API helper `update_dataset_state` did not update the cache database",
+            )
+        ]
+        if generator
+        else []
+    ) + [
+        (logging.ERROR, "Ran on 1 datasets: 0 completed, 1 failed"),
     ]
 
 
@@ -697,7 +704,15 @@ def test_run(
         ] * 2
         extra_logs += [
             (logging.INFO, "Building Dataset (dataset_id) (1/1)"),
+            (
+                logging.WARNING,
+                "This API helper `update_dataset_state` did not update the cache database",
+            ),
             (logging.INFO, "Completed Dataset (dataset_id) (1/1)"),
+            (
+                logging.WARNING,
+                "This API helper `update_dataset_state` did not update the cache database",
+            ),
         ]
     else:
         archive_path = (
-- 
GitLab