From 04774262b7d36ddac25462c168d654bd74898228 Mon Sep 17 00:00:00 2001 From: Dragon Dave McKee Date: Tue, 13 Feb 2024 13:42:50 +0000 Subject: [PATCH] Only enrich if not recently called --- src/caselawclient/models/documents.py | 26 ++++++++++++++++++++++++-- tests/models/test_documents.py | 22 ++++++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/caselawclient/models/documents.py b/src/caselawclient/models/documents.py index 8a42da36..b0df033d 100644 --- a/src/caselawclient/models/documents.py +++ b/src/caselawclient/models/documents.py @@ -31,6 +31,8 @@ uri_for_s3, ) +MINIMUM_ENRICHMENT_TIME = datetime.timedelta(minutes=20) + class UnparsableDate(Warning): pass @@ -480,9 +482,9 @@ def status(self) -> str: return DOCUMENT_STATUS_NEW - def enrich(self) -> None: + def force_enrich(self) -> None: """ - Request enrichment of the document + Request enrichment of the document, but do no checks """ now = datetime.datetime.now(datetime.timezone.utc) self.api_client.set_property( @@ -495,6 +497,26 @@ def enrich(self) -> None: enrich=True, ) + def enrich(self) -> bool: + """ + Request enrichment of a document, if it's sensible to do so. + """ + if self.can_enrich: + self.force_enrich() + return True + return False + + @cached_property + def can_enrich(self) -> bool: + """ + Is it sensible to enrich this document? + """ + last_enrichment = self.enrichment_datetime + now = datetime.datetime.now(tz=datetime.timezone.utc) + if last_enrichment and now - last_enrichment > MINIMUM_ENRICHMENT_TIME: + return True + return False + def publish(self) -> None: """ :raises CannotPublishUnpublishableDocument: This document has not passed the checks in `is_publishable`, and as diff --git a/tests/models/test_documents.py b/tests/models/test_documents.py index 3009b094..cce3ee51 100644 --- a/tests/models/test_documents.py +++ b/tests/models/test_documents.py @@ -421,9 +421,9 @@ def test_unpublish( class TestDocumentEnrich: @time_machine.travel(datetime.datetime(1955, 11, 5, 6)) @patch("caselawclient.models.documents.announce_document_event") - def test_enrich(self, mock_announce_document_event, mock_api_client): + def test_force_enrich(self, mock_announce_document_event, mock_api_client): document = Document("test/1234", mock_api_client) - document.enrich() + document.force_enrich() mock_api_client.set_property.assert_called_once_with( "test/1234", "last_sent_to_enrichment", "1955-11-05T06:00:00+00:00" @@ -433,6 +433,24 @@ def test_enrich(self, mock_announce_document_event, mock_api_client): uri="test/1234", status="enrich", enrich=True ) + @patch("caselawclient.models.documents.Document.force_enrich") + def test_no_enrich_within_cooldown(self, force_enrich, mock_api_client): + document = Document("test/1234", mock_api_client) + document.enrichment_datetime = datetime.datetime.now( + tz=datetime.timezone.utc + ) - datetime.timedelta(seconds=30) + document.enrich() + force_enrich.assert_not_called() + + @patch("caselawclient.models.documents.Document.force_enrich") + def test_enrich_outside_cooldown(self, force_enrich, mock_api_client): + document = Document("test/1234", mock_api_client) + document.enrichment_datetime = datetime.datetime.now( + tz=datetime.timezone.utc + ) - datetime.timedelta(days=2) + document.enrich() + force_enrich.assert_called() + class TestDocumentHold: def test_hold(self, mock_api_client):