From 98b4f4d7cebf9510af14688c6ba2dd39e35740d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Ercolanelli?= Date: Tue, 5 Dec 2017 11:30:09 +0100 Subject: [PATCH 1/3] feat: iter_synonyms --- algoliasearch/index.py | 46 ++++++++++++++---------------------------- tests/__init__.py | 5 +++++ tests/conftest.py | 4 ++-- tests/helpers.py | 2 +- tests/test_index.py | 33 ++++++++++++++++++------------ 5 files changed, 43 insertions(+), 47 deletions(-) create mode 100644 tests/__init__.py diff --git a/algoliasearch/index.py b/algoliasearch/index.py index e36d91552..ca17f6714 100644 --- a/algoliasearch/index.py +++ b/algoliasearch/index.py @@ -70,37 +70,6 @@ def _load_next_page(self): self.pos = 0 self.cursor = self.answer.get('cursor', None) -class SynonymIterator: - """Iterator on the synonyms of an index""" - - def __init__(self, index, hits_per_page=1000): - self.index = index - self.hits_per_page = hits_per_page - self.page = 0 - - def __iter__(self): - self._load_next_page() - return self - - def __next__(self): - return self.next() - - def next(self): - if self.pos >= len(self.response['hits']): - self._load_next_page() - if self.pos < len(self.response['hits']): - result = self.response['hits'][self.pos] - self.pos += 1 - # Remove highlighting. - if '_highlightResult' in result: del result['_highlightResult'] - return result - else: - raise StopIteration - - def _load_next_page(self): - self.response = self.index.search_synonyms('', page=self.page, hits_per_page=self.hits_per_page) - self.page += 1 - self.pos = 0 class RuleIterator: """Iterator on the rules of an index""" @@ -714,6 +683,21 @@ def search_synonyms(self, query, types=[], page=0, hits_per_page=100, request_op return self._req(True, '/synonyms/search', 'POST', request_options, data=data) + def iter_synonyms(self, hits_per_page=1000): + page = 0 + response = self.search_synonyms('', page=page, hits_per_page=hits_per_page) + + while response['hits']: + print(response['hits']) + for hit in response['hits']: + if '_highlightResult' in hit: + del hit['_highlightResult'] + + yield hit + + page += 1 + response = self.search_synonyms('', page=page, hits_per_page=hits_per_page) + @deprecated def waitTask(self, task_id, time_before_retry=100): return self.wait_task(task_id, time_before_retry) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..751f5c606 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,5 @@ +import sys + +# Use local algoliasearch package. +sys.path.append('..') + diff --git a/tests/conftest.py b/tests/conftest.py index a5bf983fe..262bfe062 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ import pytest -from helpers import Factory -from helpers import create_client, create_index, IndexWithData +from .helpers import Factory +from .helpers import create_client, create_index, IndexWithData @pytest.fixture diff --git a/tests/helpers.py b/tests/helpers.py index 83e77bf4d..a45e6460d 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -17,7 +17,7 @@ def check_credentials(): for credential in credentials: if credential not in os.environ: - print('environement variable {} not defined') + print('environement variable {} not defined'.format(credential)) assert False diff --git a/tests/test_index.py b/tests/test_index.py index ff362af70..575c4e73e 100644 --- a/tests/test_index.py +++ b/tests/test_index.py @@ -7,7 +7,7 @@ from algoliasearch.client import MAX_API_KEY_LENGTH from algoliasearch.helpers import AlgoliaException -from helpers import Factory, rule_stub +from .helpers import Factory, rule_stub def test_add_object(index): @@ -113,18 +113,25 @@ def test_synonyms(index): assert int(task['nbHits']) == 0 -# def tests_synonym_iterator(index): -# synonyms = [ -# {'objectID': 'city', 'type': 'synonym', -# 'synonyms': ['San Francisco', 'SF']}, -# {'objectID': 'street', 'type': 'altCorrection1', -# 'word': 'Street', 'corrections': ['St']} -# ] -# task = index.batch_synonyms(synonyms) -# index.wait_task(task['taskID']) -# it = SynonymIterator(index) -# for got, expected in zip(it, synonyms): -# self.assertEqual(got, expected) +def test_iter_synonyms(index): + synonyms = [{ + 'objectID': 'city', + 'type': 'synonym', + 'synonyms': ['San Francisco', 'SF'] + }, { + 'objectID': 'street', + 'type': 'altCorrection1', + 'word': 'Street', 'corrections': ['St'] + }] + + task = index.batch_synonyms(synonyms) + index.wait_task(task['taskID']) + + res = list(index.iter_synonyms(hits_per_page=1)) + assert len(res) == 2 + + for synonym in synonyms: + assert synonym in res def test_facet_search(index): From d021c035d72e9e5d77773d37eaf8c7e1ed246400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Ercolanelli?= Date: Tue, 5 Dec 2017 11:33:58 +0100 Subject: [PATCH 2/3] fix: remove debug print --- algoliasearch/index.py | 1 - 1 file changed, 1 deletion(-) diff --git a/algoliasearch/index.py b/algoliasearch/index.py index ca17f6714..80984ee0b 100644 --- a/algoliasearch/index.py +++ b/algoliasearch/index.py @@ -688,7 +688,6 @@ def iter_synonyms(self, hits_per_page=1000): response = self.search_synonyms('', page=page, hits_per_page=hits_per_page) while response['hits']: - print(response['hits']) for hit in response['hits']: if '_highlightResult' in hit: del hit['_highlightResult'] From 5ff29abaf24f59f3daac810ce3fad49ce1747ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Ercolanelli?= Date: Tue, 5 Dec 2017 11:51:51 +0100 Subject: [PATCH 3/3] test: fix relative imports --- tests/test_client.py | 4 ++-- tests/test_compat.py | 2 +- tests/test_keys.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_client.py b/tests/test_client.py index a35a67b88..c24ebff2e 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -3,8 +3,8 @@ from algoliasearch.client import RequestOptions, MAX_API_KEY_LENGTH, Client from algoliasearch.helpers import AlgoliaException -from fake_session import FakeSession -from helpers import Factory, check_credentials +from .fake_session import FakeSession +from .helpers import Factory, check_credentials def test_request_options(client): diff --git a/tests/test_compat.py b/tests/test_compat.py index de4eb85c9..908ce70be 100644 --- a/tests/test_compat.py +++ b/tests/test_compat.py @@ -1,4 +1,4 @@ -from helpers import wait_key, wait_missing_key +from .helpers import wait_key, wait_missing_key def test_addObject(index): task = index.addObject({'name': 'Paris'}, 'a') diff --git a/tests/test_keys.py b/tests/test_keys.py index c368b9b72..3b0f01398 100644 --- a/tests/test_keys.py +++ b/tests/test_keys.py @@ -1,4 +1,4 @@ -from helpers import wait_key, wait_missing_key +from .helpers import wait_key, wait_missing_key def test_list_user_keys(client):