From 76ab577c745fa742de7ebb36838e74e8248f61b1 Mon Sep 17 00:00:00 2001 From: shortcuts Date: Tue, 24 Dec 2024 14:50:18 +0100 Subject: [PATCH 1/4] fix: remove highlightResult from response --- algoliasearch_django/models.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/algoliasearch_django/models.py b/algoliasearch_django/models.py index 5e55822..4fb30cd 100644 --- a/algoliasearch_django/models.py +++ b/algoliasearch_django/models.py @@ -36,6 +36,13 @@ def get_model_attr(name): return partial(_getattr, name=name) +def aggregator(aggregated, resp): + for hit in resp.hits: + if "_highlightResult" in hit: + hit.pop("_highlightResult") + aggregated.append(hit) + + class AlgoliaIndexError(Exception): """Something went wrong with an Algolia Index.""" @@ -492,17 +499,13 @@ def reindex_all(self, batch_size=1000): logger.debug("APPLY SETTINGS ON %s_tmp", self.index_name) rules = [] - self.__client.browse_rules( - self.index_name, lambda _resp: rules.extend(_resp.hits) - ) + self.__client.browse_rules(self.index_name, lambda _resp: aggregator(rules, _resp)) if len(rules): logger.debug("Got rules for index %s: %s", self.index_name, rules) should_keep_rules = True synonyms = [] - self.__client.browse_synonyms( - self.index_name, lambda _resp: synonyms.extend(_resp.hits) - ) + self.__client.browse_synonyms(self.index_name, lambda _resp: aggregator(synonyms, _resp)) if len(synonyms): logger.debug("Got synonyms for index %s: %s", self.index_name, rules) should_keep_synonyms = True From 1424a2a73984995dad3b6054cd15d90d421b2dd2 Mon Sep 17 00:00:00 2001 From: shortcuts Date: Tue, 24 Dec 2024 15:03:44 +0100 Subject: [PATCH 2/4] fix: sanitize hit level --- algoliasearch_django/models.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/algoliasearch_django/models.py b/algoliasearch_django/models.py index 4fb30cd..97819cc 100644 --- a/algoliasearch_django/models.py +++ b/algoliasearch_django/models.py @@ -36,11 +36,10 @@ def get_model_attr(name): return partial(_getattr, name=name) -def aggregator(aggregated, resp): - for hit in resp.hits: - if "_highlightResult" in hit: - hit.pop("_highlightResult") - aggregated.append(hit) +def sanitize(hit): + if "_highlightResult" in hit: + hit.pop("_highlightResult") + return hit class AlgoliaIndexError(Exception): @@ -499,13 +498,19 @@ def reindex_all(self, batch_size=1000): logger.debug("APPLY SETTINGS ON %s_tmp", self.index_name) rules = [] - self.__client.browse_rules(self.index_name, lambda _resp: aggregator(rules, _resp)) + self.__client.browse_rules( + self.index_name, + lambda _resp: rules.extend([sanitize(_hit.to_dict()) for _hit in _resp.hits]), + ) if len(rules): logger.debug("Got rules for index %s: %s", self.index_name, rules) should_keep_rules = True synonyms = [] - self.__client.browse_synonyms(self.index_name, lambda _resp: aggregator(synonyms, _resp)) + self.__client.browse_synonyms( + self.index_name, + lambda _resp: synonyms.extend([sanitize(_hit.to_dict()) for _hit in _resp.hits]), + ) if len(synonyms): logger.debug("Got synonyms for index %s: %s", self.index_name, rules) should_keep_synonyms = True From a439f486cd8e4f7786c8d886a5806219df846a75 Mon Sep 17 00:00:00 2001 From: shortcuts Date: Tue, 24 Dec 2024 15:12:13 +0100 Subject: [PATCH 3/4] fix: assert sanitized --- runtests.py | 12 ++++++------ tests/test_index.py | 8 +++++++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/runtests.py b/runtests.py index 8d97daa..628dfad 100755 --- a/runtests.py +++ b/runtests.py @@ -14,12 +14,12 @@ def main(): TestRunner = get_runner(settings) test_runner = TestRunner(failfast=True) # kept here to run a single test - # failures = test_runner.run_tests( - # [ - # "tests.test_index.IndexTestCase.test_reindex_with_rules" - # ] - # ) - failures = test_runner.run_tests(["tests"]) + failures = test_runner.run_tests( + [ + "tests.test_index.IndexTestCase" + ] + ) + # failures = test_runner.run_tests(["tests"]) sys.exit(bool(failures)) diff --git a/tests/test_index.py b/tests/test_index.py index 33fbad3..62ecdd8 100644 --- a/tests/test_index.py +++ b/tests/test_index.py @@ -10,6 +10,12 @@ from .models import User, Website, Example +def sanitize(hit): + if "_highlightResult" in hit: + hit.pop("_highlightResult") + return hit + + class IndexTestCase(TestCase): def setUp(self): self.client = algolia_engine.client @@ -320,7 +326,7 @@ class WebsiteIndex(AlgoliaIndex): synonyms = [] self.client.browse_synonyms( self.index.index_name, - lambda _resp: synonyms.extend([_hit.to_dict() for _hit in _resp.hits]), + lambda _resp: synonyms.extend([sanitize(_hit.to_dict()) for _hit in _resp.hits]), ) self.assertEqual(len(synonyms), 1, "There should only be one synonym") self.assertIn( From 92662983c441bf2d3c59f90aed1cf68b2fabf657 Mon Sep 17 00:00:00 2001 From: shortcuts Date: Tue, 24 Dec 2024 15:13:55 +0100 Subject: [PATCH 4/4] fix: test runner --- runtests.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/runtests.py b/runtests.py index 628dfad..ff520a7 100755 --- a/runtests.py +++ b/runtests.py @@ -14,12 +14,12 @@ def main(): TestRunner = get_runner(settings) test_runner = TestRunner(failfast=True) # kept here to run a single test - failures = test_runner.run_tests( - [ - "tests.test_index.IndexTestCase" - ] - ) - # failures = test_runner.run_tests(["tests"]) + # failures = test_runner.run_tests( + # [ + # "tests.test_index.IndexTestCase" + # ] + # ) + failures = test_runner.run_tests(["tests"]) sys.exit(bool(failures))