From 049764c0bbf7f4e242cedd709fae4d9288108ab9 Mon Sep 17 00:00:00 2001 From: nilbacardit26 Date: Tue, 22 Oct 2024 10:57:01 +0200 Subject: [PATCH] passing tests adding update settings --- CHANGELOG.rst | 1 + guillotina_audit/__init__.py | 3 +- guillotina_audit/commands/mappings.py | 2 +- guillotina_audit/commands/settings.py | 24 +++++++++++ guillotina_audit/tests/fixtures.py | 3 +- guillotina_audit/tests/test_audit_basic.py | 32 +------------- guillotina_audit/tests/test_mappings.py | 8 +--- guillotina_audit/utility.py | 49 ++++++++++++++++++++-- 8 files changed, 77 insertions(+), 45 deletions(-) create mode 100644 guillotina_audit/commands/settings.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 18e8fe6..bac4393 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,6 +3,7 @@ - Adding metadata field as an object - Adding command audit-update-mappings to update mappings +- Adding command audit-update-settings to update settings [nilbacardit26] diff --git a/guillotina_audit/__init__.py b/guillotina_audit/__init__.py index d9655a0..9f2a7be 100644 --- a/guillotina_audit/__init__.py +++ b/guillotina_audit/__init__.py @@ -14,7 +14,8 @@ } }, "commands": { - "audit-update-mappings": "guillotina_audit.commands.mappings.UpdateMappingsCommand" + "audit-update-mappings": "guillotina_audit.commands.mappings.UpdateMappingsCommand", + "audit-update-settings": "guillotina_audit.commands.settings.UpdateSettingsCommand", }, } diff --git a/guillotina_audit/commands/mappings.py b/guillotina_audit/commands/mappings.py index 32ca0ee..f991246 100644 --- a/guillotina_audit/commands/mappings.py +++ b/guillotina_audit/commands/mappings.py @@ -6,7 +6,7 @@ import logging -logger = logging.getLogger("guillotina_elasticsearch") +logger = logging.getLogger("guillotina_audit") class UpdateMappingsCommand(Command): diff --git a/guillotina_audit/commands/settings.py b/guillotina_audit/commands/settings.py new file mode 100644 index 0000000..220ad21 --- /dev/null +++ b/guillotina_audit/commands/settings.py @@ -0,0 +1,24 @@ +from guillotina.commands import Command +from guillotina.component import get_utility +from guillotina.interfaces import ICatalogUtility + +import asyncio +import logging + + +logger = logging.getLogger("guillotina_audit") + + +class UpdateSettingsCommand(Command): + description = "Update Settings Command" + migrator = None + reindexer = None + + def get_parser(self): + parser = super(UpdateSettingsCommand, self).get_parser() + return parser + + async def run(self, arguments, settings, app): + search = get_utility(ICatalogUtility) + await asyncio.sleep(1) + await search.update_settings() diff --git a/guillotina_audit/tests/fixtures.py b/guillotina_audit/tests/fixtures.py index e186b7d..5ef0feb 100644 --- a/guillotina_audit/tests/fixtures.py +++ b/guillotina_audit/tests/fixtures.py @@ -49,10 +49,11 @@ def elasticsearch_fixture(es): @pytest.fixture(scope="function") async def guillotina_es(elasticsearch_fixture, guillotina): + audit_utility = query_utility(IAuditUtility) + await audit_utility.create_index() response, status = await guillotina( "POST", "/db/", data=json.dumps({"@type": "Container", "id": "guillotina"}) ) assert status == 200 yield guillotina - audit_utility = query_utility(IAuditUtility) await audit_utility.async_es.indices.delete(index="audit") diff --git a/guillotina_audit/tests/test_audit_basic.py b/guillotina_audit/tests/test_audit_basic.py index 80a4d3d..f55bf90 100644 --- a/guillotina_audit/tests/test_audit_basic.py +++ b/guillotina_audit/tests/test_audit_basic.py @@ -14,13 +14,8 @@ async def test_audit_basic(guillotina_es): - response, status = await guillotina_es( - "POST", "/db/guillotina/@addons", data=json.dumps({"id": "audit"}) - ) - assert status == 200 - await asyncio.sleep(2) - audit_utility = query_utility(IAuditUtility) # Let's check the index has been created + audit_utility = query_utility(IAuditUtility) resp = await audit_utility.async_es.indices.get_alias() assert "audit" in resp resp = await audit_utility.async_es.indices.get_mapping(index="audit") @@ -146,11 +141,6 @@ async def test_audit_basic(guillotina_es): async def test_audit_wildcard(guillotina_es): - response, status = await guillotina_es( - "POST", "/db/guillotina/@addons", data=json.dumps({"id": "audit"}) - ) - assert status == 200 - await asyncio.sleep(2) audit_utility = query_utility(IAuditUtility) payload = AuditDocument(action="added", type_name="Fullscreen") @@ -214,11 +204,6 @@ async def test_audit_wildcard(guillotina_es): async def test_json_dumps(guillotina_es): - response, status = await guillotina_es( - "POST", "/db/guillotina/@addons", data=json.dumps({"id": "audit"}) - ) - assert status == 200 - await asyncio.sleep(2) audit_utility = query_utility(IAuditUtility) json.dumps( {"datetime": datetime.now(), "date": date.today()}, @@ -227,11 +212,6 @@ async def test_json_dumps(guillotina_es): async def test_permissions_modified_without_indexing(guillotina_es): - response, status = await guillotina_es( - "POST", "/db/guillotina/@addons", data=json.dumps({"id": "audit"}) - ) - assert status == 200 - response, status = await guillotina_es( "POST", "/db/guillotina/", @@ -291,11 +271,6 @@ async def test_permissions_modified_without_indexing(guillotina_es): } ) async def test_permissions_modified_with_indexing(guillotina_es): - response, status = await guillotina_es( - "POST", "/db/guillotina/@addons", data=json.dumps({"id": "audit"}) - ) - assert status == 200 - response, status = await guillotina_es( "POST", "/db/guillotina/", @@ -332,11 +307,6 @@ async def test_permissions_modified_with_indexing(guillotina_es): async def test_metadata_field(guillotina_es): - response, status = await guillotina_es( - "POST", "/db/guillotina/@addons", data=json.dumps({"id": "audit"}) - ) - assert status == 200 - await asyncio.sleep(2) audit_utility = query_utility(IAuditUtility) payload = AuditDocument( action="CreatingMetadata", diff --git a/guillotina_audit/tests/test_mappings.py b/guillotina_audit/tests/test_mappings.py index bce45c6..24665b1 100644 --- a/guillotina_audit/tests/test_mappings.py +++ b/guillotina_audit/tests/test_mappings.py @@ -1,8 +1,6 @@ from guillotina.component import query_utility from guillotina_audit.interfaces import IAuditUtility -import asyncio -import json import pytest @@ -10,10 +8,6 @@ async def test_mappings(guillotina_es): - response, status = await guillotina_es( - "POST", "/db/guillotina/@addons", data=json.dumps({"id": "audit"}) - ) - assert status == 200 - await asyncio.sleep(2) audit_utility = query_utility(IAuditUtility) + await audit_utility.update_settings() await audit_utility.update_mappings() diff --git a/guillotina_audit/utility.py b/guillotina_audit/utility.py index 0e17bc0..75d9a21 100644 --- a/guillotina_audit/utility.py +++ b/guillotina_audit/utility.py @@ -41,6 +41,18 @@ def _custom_serializer(self, obj): return obj.strftime("%Y-%m-%d") raise TypeError("Object of type %s is not JSON serializable" % type(obj)) + async def update_settings(self): + await self.async_es.indices.close(index=self.index) + try: + await self.async_es.indices.put_settings( + body=self.default_settings(), index=self.index + ) + logger.info(f"Updating mappings {self.default_settings()}") + except Exception: + logger.error("Error updating settings", exc_info=True) + finally: + await self.async_es.indices.open(index=self.index) + async def update_mappings(self): await self.async_es.indices.put_mapping( body=self.default_mappings(), index=self.index @@ -59,15 +71,44 @@ async def create_index(self): except BadRequestError: logger.error("An exception occurred when creating index", exc_info=True) + def settings(self): + return { + "settings": { + "analysis": { + "analyzer": { + "my_analyzer": { + "type": "custom", + "tokenizer": "standard", + "filter": ["lowercase"], + }, + "my_stop_analyzer": { + "type": "custom", + "tokenizer": "standard", + "filter": ["lowercase", "english_stop"], + }, + }, + "filter": { + "english_stop": {"type": "stop", "stopwords": "_english_"} + }, + } + } + } + def default_settings(self): return { "analysis": { - "analyzer": {"path_analyzer": {"tokenizer": "path_tokenizer"}}, + "analyzer": { + "path_analyzer": { # Custom analyzer definition + "type": "custom", + "tokenizer": "path_tokenizer", + } + }, "tokenizer": { - "path_tokenizer": {"type": "path_hierarchy", "delimiter": "/"} + "path_tokenizer": { # Custom tokenizer definition + "type": "path_hierarchy", + "delimiter": "/", + } }, - "filter": {}, - "char_filter": {}, } }