Skip to content

Commit e192aec

Browse files
authored
Merge pull request #306 from algolia/deps/upgrade-client
chore(deps): update algoliasearch to latest major
2 parents b5df401 + 4b7913c commit e192aec

File tree

10 files changed

+74
-48
lines changed

10 files changed

+74
-48
lines changed

algoliasearch_django/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
delete_record = algolia_engine.delete_record
3131
update_records = algolia_engine.update_records
3232
raw_search = algolia_engine.raw_search
33-
clear_index = algolia_engine.clear_index
33+
clear_index = algolia_engine.clear_index # TODO: deprecate
34+
clear_objects = algolia_engine.clear_objects
3435
reindex_all = algolia_engine.reindex_all
3536

3637
# Default log handler

algoliasearch_django/management/commands/algolia_clearindex.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.core.management.base import BaseCommand
22

33
from algoliasearch_django import get_registered_model
4-
from algoliasearch_django import clear_index
4+
from algoliasearch_django import clear_objects
55

66

77
class Command(BaseCommand):
@@ -18,5 +18,5 @@ def handle(self, *args, **options):
1818
options['model']):
1919
continue
2020

21-
clear_index(model)
21+
clear_objects(model)
2222
self.stdout.write('\t* {}'.format(model.__name__))

algoliasearch_django/models.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import logging
77

88
import sys
9-
from algoliasearch.helpers import AlgoliaException
9+
from algoliasearch.exceptions import AlgoliaException
1010
from django.db.models.query_utils import DeferredAttribute
1111

1212
from .settings import DEBUG
@@ -179,8 +179,10 @@ def __init_index(self, client, model, settings):
179179
index_suffix=settings['INDEX_SUFFIX']
180180
)
181181

182+
self.tmp_index_name = tmp_index_name
183+
182184
self.__index = client.init_index(self.index_name)
183-
self.__tmp_index = client.init_index(tmp_index_name)
185+
self.__tmp_index = client.init_index(self.tmp_index_name)
184186

185187
@staticmethod
186188
def _validate_geolocation(geolocation):
@@ -400,17 +402,21 @@ def set_settings(self):
400402
logger.warning('SETTINGS NOT APPLIED ON %s: %s',
401403
self.model, e)
402404

403-
def clear_index(self):
404-
"""Clears the index."""
405+
def clear_objects(self):
406+
"""Clears all objects of an index."""
405407
try:
406-
self.__index.clear_index()
408+
self.__index.clear_objects()
407409
logger.info('CLEAR INDEX %s', self.index_name)
408410
except AlgoliaException as e:
409411
if DEBUG:
410412
raise e
411413
else:
412414
logger.warning('%s NOT CLEARED: %s', self.model, e)
413415

416+
def clear_index(self):
417+
# TODO: add deprecated warning
418+
self.clear_objects()
419+
414420
def wait_task(self, task_id):
415421
try:
416422
self.__index.wait_task(task_id)
@@ -421,6 +427,11 @@ def wait_task(self, task_id):
421427
else:
422428
logger.warning('%s NOT WAIT: %s', self.model, e)
423429

430+
def delete(self):
431+
self.__index.delete()
432+
if self.__tmp_index:
433+
self.__tmp_index.delete()
434+
424435
def reindex_all(self, batch_size=1000):
425436
"""
426437
Reindex all the records.
@@ -457,13 +468,13 @@ def reindex_all(self, batch_size=1000):
457468
self.settings['slaves'] = []
458469
logger.debug("REMOVE SLAVES FROM SETTINGS")
459470

460-
self.__tmp_index.wait_task(self.__tmp_index.set_settings(self.settings)['taskID'])
471+
self.__tmp_index.set_settings(self.settings).wait()
461472
logger.debug('APPLY SETTINGS ON %s_tmp', self.index_name)
462473
rules = []
463474
synonyms = []
464-
for r in self.__index.iter_rules():
475+
for r in self.__index.browse_rules():
465476
rules.append(r)
466-
for s in self.__index.iter_synonyms():
477+
for s in self.__index.browse_synonyms():
467478
synonyms.append(s)
468479
if len(rules):
469480
logger.debug('Got rules for index %s: %s', self.index_name, rules)
@@ -472,7 +483,7 @@ def reindex_all(self, batch_size=1000):
472483
logger.debug('Got synonyms for index %s: %s', self.index_name, rules)
473484
should_keep_synonyms = True
474485

475-
self.__tmp_index.clear_index()
486+
self.__tmp_index.clear_objects()
476487
logger.debug('CLEAR INDEX %s_tmp', self.index_name)
477488

478489
counts = 0
@@ -499,8 +510,8 @@ def reindex_all(self, batch_size=1000):
499510
logger.info('SAVE %d OBJECTS TO %s_tmp', len(batch),
500511
self.index_name)
501512

502-
self.__client.move_index(self.__tmp_index.index_name,
503-
self.__index.index_name)
513+
self.__client.move_index(self.tmp_index_name,
514+
self.index_name)
504515
logger.info('MOVE INDEX %s_tmp TO %s', self.index_name,
505516
self.index_name)
506517

@@ -514,12 +525,12 @@ def reindex_all(self, batch_size=1000):
514525
if should_keep_replicas or should_keep_slaves:
515526
self.__index.set_settings(self.settings)
516527
if should_keep_rules:
517-
response = self.__index.batch_rules(rules, forward_to_replicas=True)
518-
self.__index.wait_task(response['taskID'])
528+
response = self.__index.save_rules(rules, {'forwardToReplicas': True})
529+
response.wait()
519530
logger.info("Saved rules for index %s with response: {}".format(response), self.index_name)
520531
if should_keep_synonyms:
521-
response = self.__index.batch_synonyms(synonyms, forward_to_replicas=True)
522-
self.__index.wait_task(response['taskID'])
532+
response = self.__index.save_synonyms(synonyms, {'forwardToReplicas': True})
533+
response.wait()
523534
logger.info("Saved synonyms for index %s with response: {}".format(response), self.index_name)
524535
return counts
525536
except AlgoliaException as e:

algoliasearch_django/registration.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,19 @@
33

44
from django.db.models.signals import post_save
55
from django.db.models.signals import pre_delete
6-
from algoliasearch import algoliasearch
6+
from algoliasearch.search_client import SearchClient
7+
from algoliasearch.user_agent import UserAgent
78

89
from .models import AlgoliaIndex
910
from .settings import SETTINGS
1011
from .version import VERSION
11-
from algoliasearch.version import VERSION as CLIENT_VERSION
12-
from platform import python_version
1312
from django import get_version as django_version
1413

1514
logger = logging.getLogger(__name__)
1615

16+
UserAgent.add("Algolia for Django", VERSION)
17+
UserAgent.add("Django", django_version())
18+
1719

1820
class AlgoliaEngineError(Exception):
1921
"""Something went wrong with Algolia Engine."""
@@ -38,13 +40,7 @@ def __init__(self, settings=SETTINGS):
3840
self.__settings = settings
3941

4042
self.__registered_models = {}
41-
self.client = algoliasearch.Client(app_id, api_key)
42-
self.client.set_extra_headers(
43-
**{
44-
"User-Agent": "Algolia for Python (%s); Python (%s); Algolia for Django (%s); Django (%s)"
45-
% (CLIENT_VERSION, python_version(), VERSION, django_version)
46-
}
47-
)
43+
self.client = SearchClient.create(app_id, api_key)
4844

4945
def is_registered(self, model):
5046
"""Checks whether the given models is registered with Algolia engine"""
@@ -157,10 +153,14 @@ def raw_search(self, model, query='', params=None):
157153
adapter = self.get_adapter(model)
158154
return adapter.raw_search(query, params)
159155

160-
def clear_index(self, model):
156+
def clear_objects(self, model):
161157
"""Clears the index."""
162158
adapter = self.get_adapter(model)
163-
adapter.clear_index()
159+
adapter.clear_objects()
160+
161+
def clear_index(self, model):
162+
# TODO: add deprecatd warning
163+
self.clear_objects(model)
164164

165165
def reindex_all(self, model, batch_size=1000):
166166
"""

algoliasearch_django/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION = '1.7.3'
1+
VERSION = '2.0.0'

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
version=VERSION,
3232
license='MIT License',
3333
packages=find_packages(exclude=['tests']),
34-
install_requires=['django>=1.7', 'algoliasearch>=1.0,<2.0'],
34+
install_requires=['django>=1.7', 'algoliasearch>=2.0,<3.0'],
3535
description='Algolia Search integration for Django',
3636
long_description=README,
3737
long_description_content_type='text/markdown',

tests/test_commands.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@
1313
class CommandsTestCase(TestCase):
1414
@classmethod
1515
def tearDownClass(cls):
16-
algolia_engine.client.delete_index(get_adapter(User).index_name)
17-
algolia_engine.client.delete_index(get_adapter(Website).index_name)
16+
user_index_name = get_adapter(User).index_name
17+
website_index_name = get_adapter(Website).index_name
18+
19+
algolia_engine.client.init_index(user_index_name).delete()
20+
algolia_engine.client.init_index(website_index_name).delete()
1821

1922
def setUp(self):
2023
# Create some records

tests/test_engine.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import six
2+
import re
23

34
from django.conf import settings
45
from django.test import TestCase
56

7+
from algoliasearch.user_agent import UserAgent
8+
from django import get_version as django_version
9+
from algoliasearch_django.version import VERSION
610
from algoliasearch_django import algolia_engine
711
from algoliasearch_django import AlgoliaIndex
812
from algoliasearch_django import AlgoliaEngine
@@ -29,6 +33,14 @@ def test_init_exception(self):
2933
with self.assertRaises(AlgoliaEngineError):
3034
AlgoliaEngine(settings=settings.ALGOLIA)
3135

36+
def test_user_agent(self):
37+
user_agent = UserAgent.get()
38+
39+
parts = re.split('\s*;\s*', user_agent)
40+
41+
self.assertIn('Django (%s)' % django_version(), parts)
42+
self.assertIn('Algolia for Django (%s)' % VERSION, parts)
43+
3244
def test_auto_discover_indexes(self):
3345
"""Test that the `index` module was auto-discovered and the models registered"""
3446

tests/test_index.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ def setUp(self):
4242
]
4343

4444
def tearDown(self):
45-
if hasattr(self, 'index') and hasattr(self.index, 'index_name'):
46-
self.client.delete_index(self.index.index_name)
45+
if hasattr(self, 'index'):
46+
self.index.delete()
4747

4848
def test_default_index_name(self):
4949
self.index = AlgoliaIndex(Website, self.client, settings.ALGOLIA)
@@ -94,7 +94,7 @@ def test_tmp_index_name(self):
9494
with self.settings(ALGOLIA=algolia_settings):
9595
self.index = AlgoliaIndex(Website, self.client, settings.ALGOLIA)
9696
self.assertEqual(
97-
self.index._AlgoliaIndex__tmp_index.index_name,
97+
self.index.tmp_index_name,
9898
'Website_tmp'
9999
)
100100

@@ -104,7 +104,7 @@ def test_tmp_index_name(self):
104104
with self.settings(ALGOLIA=algolia_settings):
105105
self.index = AlgoliaIndex(Website, self.client, settings.ALGOLIA)
106106
self.assertEqual(
107-
self.index._AlgoliaIndex__tmp_index.index_name,
107+
self.index.tmp_index_name,
108108
'prefix_Website_tmp'
109109
)
110110

@@ -115,7 +115,7 @@ def test_tmp_index_name(self):
115115
with self.settings(ALGOLIA=algolia_settings):
116116
self.index = AlgoliaIndex(Website, self.client, settings.ALGOLIA)
117117
self.assertEqual(
118-
self.index._AlgoliaIndex__tmp_index.index_name,
118+
self.index.tmp_index_name,
119119
'Website_tmp_suffix'
120120
)
121121

@@ -126,7 +126,7 @@ def test_tmp_index_name(self):
126126
with self.settings(ALGOLIA=algolia_settings):
127127
self.index = AlgoliaIndex(Website, self.client, settings.ALGOLIA)
128128
self.assertEqual(
129-
self.index._AlgoliaIndex__tmp_index.index_name,
129+
self.index.tmp_index_name,
130130
'prefix_Website_tmp_suffix'
131131
)
132132

@@ -253,8 +253,8 @@ class WebsiteIndex(AlgoliaIndex):
253253
}
254254
}
255255
}
256-
res = underlying_index.save_rule(rule)
257-
self.index.wait_task(res['taskID'])
256+
257+
underlying_index.save_rule(rule).wait()
258258

259259
# When reindexing with no settings on the instance
260260
self.index = WebsiteIndex(Website, self.client, settings.ALGOLIA)
@@ -267,7 +267,7 @@ def remove_metadata(rule):
267267
del copy["_metadata"]
268268
return copy
269269

270-
rules = [r for r in underlying_index.iter_rules()]
270+
rules = [r for r in underlying_index.browse_rules()]
271271
rules = list(map(remove_metadata, rules))
272272
self.assertEqual(len(rules), 1, "There should only be one rule")
273273
self.assertIn(rule, rules, "The existing rule should be kept over reindex")
@@ -282,16 +282,15 @@ class WebsiteIndex(AlgoliaIndex):
282282

283283
# Given some existing synonyms on the index
284284
synonym = {'objectID': 'street', 'type': 'altCorrection1', 'word': 'Street', 'corrections': ['St']}
285-
task = underlying_index.batch_synonyms([synonym])
286-
underlying_index.wait_task(task['taskID'])
285+
underlying_index.save_synonyms([synonym]).wait()
287286

288287
# When reindexing with no settings on the instance
289288
self.index = WebsiteIndex(Website, self.client, settings.ALGOLIA)
290289
self.index.reindex_all()
291290
time.sleep(10) # FIXME: Refactor reindex_all to return taskID
292291

293292
# Expect the synonyms to be kept across reindex
294-
synonyms = [s for s in underlying_index.iter_synonyms()]
293+
synonyms = [s for s in underlying_index.browse_synonyms()]
295294
self.assertEqual(len(synonyms), 1, "There should only be one synonym")
296295
self.assertIn(synonym, synonyms, "The existing synonym should be kept over reindex")
297296

@@ -661,7 +660,7 @@ class CyrillicIndex(AlgoliaIndex):
661660
self.user.bio = "крупнейших"
662661
self.user.save()
663662
self.index = CyrillicIndex(User, self.client, settings.ALGOLIA)
664-
self.index.wait_task(self.index.save_record(self.user)["taskID"])
663+
self.index.save_record(self.user).wait()
665664
result = self.index.raw_search("крупнейших")
666665
self.assertEqual(result['nbHits'], 1, "Search should return one result")
667666
self.assertEqual(result['hits'][0]['name'], 'Algolia', "The result should be self.user")

tests/test_signal.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class SignalTestCase(TestCase):
1717

1818
@classmethod
1919
def tearDownClass(cls):
20-
algolia_engine.client.delete_index(get_adapter(Website).index_name)
20+
get_adapter(Website).delete()
2121

2222
def tearDown(self):
2323
clear_index(Website)

0 commit comments

Comments
 (0)