From f235ee1e27ea04e80f3dad3ff4996da29a75a32f Mon Sep 17 00:00:00 2001 From: nilbacardit26 Date: Wed, 15 Nov 2023 17:25:37 +0100 Subject: [PATCH] adding save payload in the settings of the utility --- CHANGELOG.rst | 6 +++++ guillotina_audit/__init__.py | 2 +- guillotina_audit/subscriber.py | 26 +++++++++++++++++----- guillotina_audit/tests/fixtures.py | 8 ++++++- guillotina_audit/tests/test_audit_basic.py | 6 ++++- guillotina_audit/utility.py | 5 ++++- 6 files changed, 43 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 3938d2a..545226d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,3 +1,9 @@ + +1.0.1 (2023-11-15) +------------------ + +- Adding save_payload parameter in the settings of the utility + 1.0.0 (2023-11-15) ------------------ diff --git a/guillotina_audit/__init__.py b/guillotina_audit/__init__.py index 05ca406..3034f0e 100644 --- a/guillotina_audit/__init__.py +++ b/guillotina_audit/__init__.py @@ -6,7 +6,7 @@ "audit": { "provides": "guillotina_audit.interfaces.IAuditUtility", "factory": "guillotina_audit.utility.AuditUtility", - "settings": {"index_name": "audit"}, + "settings": {"index_name": "audit", "save_payload": False}, } } } diff --git a/guillotina_audit/subscriber.py b/guillotina_audit/subscriber.py index db44b09..61c0ace 100644 --- a/guillotina_audit/subscriber.py +++ b/guillotina_audit/subscriber.py @@ -6,26 +6,40 @@ from guillotina.interfaces import IResource from guillotina_audit.interfaces import IAuditUtility +import logging + + +logger = logging.getLogger("guillotina_audit") + @configure.subscriber( for_=(IResource, IObjectAddedEvent), priority=1001 ) # after indexing async def audit_object_added(obj, event): - audit = query_utility(IAuditUtility) - audit.log_entry(obj, event) + try: + audit = query_utility(IAuditUtility) + audit.log_entry(obj, event) + except Exception: + logger.error("Error adding audit", exc_info=True) @configure.subscriber( for_=(IResource, IObjectModifiedEvent), priority=1001 ) # after indexing async def audit_object_modified(obj, event): - audit = query_utility(IAuditUtility) - audit.log_entry(obj, event) + try: + audit = query_utility(IAuditUtility) + audit.log_entry(obj, event) + except Exception: + logger.error("Error adding audit", exc_info=True) @configure.subscriber( for_=(IResource, IObjectRemovedEvent), priority=1001 ) # after indexing async def audit_object_removed(obj, event): - audit = query_utility(IAuditUtility) - audit.log_entry(obj, event) + try: + audit = query_utility(IAuditUtility) + audit.log_entry(obj, event) + except Exception: + logger.error("Error adding audit", exc_info=True) diff --git a/guillotina_audit/tests/fixtures.py b/guillotina_audit/tests/fixtures.py index 020d43a..ef81ce3 100644 --- a/guillotina_audit/tests/fixtures.py +++ b/guillotina_audit/tests/fixtures.py @@ -16,12 +16,18 @@ def base_settings_configurator(settings): settings["applications"] = [] settings["applications"].append("guillotina") settings["applications"].append("guillotina_audit") - settings["audit"] = { "connection_settings": { "hosts": [f"{annotations['elasticsearch']['host']}"] } # noqa } + settings["load_utilities"] = { + "audit": { + "provides": "guillotina_audit.interfaces.IAuditUtility", + "factory": "guillotina_audit.utility.AuditUtility", + "settings": {"index_name": "audit", "save_payload": True}, + } + } testing.configure_with(base_settings_configurator) diff --git a/guillotina_audit/tests/test_audit_basic.py b/guillotina_audit/tests/test_audit_basic.py index 97f1eed..177bb32 100644 --- a/guillotina_audit/tests/test_audit_basic.py +++ b/guillotina_audit/tests/test_audit_basic.py @@ -24,7 +24,9 @@ async def test_audit_basic(guillotina_es): resp = await audit_utility.async_es.indices.get_mapping(index="audit") assert "path" in resp["audit"]["mappings"]["properties"] response, status = await guillotina_es( - "POST", "/db/guillotina/", data=json.dumps({"@type": "Item", "id": "foo_item"}) + "POST", + "/db/guillotina/", + data=json.dumps({"@type": "Item", "id": "foo_item", "title": "Foo Item"}), ) assert status == 201 await asyncio.sleep(2) @@ -34,10 +36,12 @@ async def test_audit_basic(guillotina_es): assert resp["hits"]["hits"][0]["_source"]["action"] == "added" assert resp["hits"]["hits"][0]["_source"]["type_name"] == "Container" assert resp["hits"]["hits"][0]["_source"]["creator"] == "root" + assert "title" in resp["hits"]["hits"][0]["_source"]["payload"] assert resp["hits"]["hits"][1]["_source"]["action"] == "added" assert resp["hits"]["hits"][1]["_source"]["type_name"] == "Item" assert resp["hits"]["hits"][1]["_source"]["creator"] == "root" + assert "title" in resp["hits"]["hits"][1]["_source"]["payload"] response, status = await guillotina_es("DELETE", "/db/guillotina/foo_item") await asyncio.sleep(2) diff --git a/guillotina_audit/utility.py b/guillotina_audit/utility.py index b20bccb..02e5c11 100644 --- a/guillotina_audit/utility.py +++ b/guillotina_audit/utility.py @@ -71,10 +71,13 @@ def log_entry(self, obj, event): if IObjectModifiedEvent.providedBy(event): document["action"] = "modified" document["creation_date"] = obj.modification_date - document["payload"] = json.dumps(event.payload) + if self._settings.get("save_payload", False) is True: + document["payload"] = json.dumps(event.payload) elif IObjectAddedEvent.providedBy(event): document["action"] = "added" document["creation_date"] = obj.creation_date + if self._settings.get("save_payload", False) is True: + document["payload"] = json.dumps(event.payload) elif IObjectRemovedEvent.providedBy(event): document["action"] = "removed" document["creation_date"] = datetime.datetime.now(timezone.utc)