Upgrade guides for the API client
Upgrading from 1.20.0 to 2.0.0
We attempt to document every possible breaking change. Since some of these breaking changes are in obscure parts of the API Client, only a portion of these changes may actually affect your application.
Upgrade your algoliasearch
dependency to >=2.0,<3.0
using pip:
$
pip install --upgrade 'algoliasearch>=2.0,<3.0'
Then, update your requirements in your setup.py
or requirements.txt
to: algoliasearch>=2.0,<3.0
.
Search Client
Previously, to get started:
1
2
3
from algoliasearch.client import Client
client = Client('app_id', 'api_key')
Now, in the 2.0.0
you should update your code to:
1
2
3
from algoliasearch.search_client import SearchClient
client = SearchClient.create('app_id', 'api_key')
List of Method Signature Changes
1.20.0 | Breaking Change | 2.0.0 |
---|---|---|
addUserKey(obj, validity=0, max_queries_per_ip_per_hour=0, max_hits_per_query=0, indexes=None) |
Removed, use add_api_key instead |
add_api_key(acl, request_options=None) |
add_api_key(obj, validity=0, max_queries_per_ip_per_hour=0, max_hits_per_query=0, indexes=None, request_options=None) |
Changed | add_api_key(acl, request_options=None) |
add_user_key(obj, validity=0, max_queries_per_ip_per_hour=0, max_hits_per_query=0, indexes=None) |
Removed, use add_api_key instead |
add_api_key(acl, request_options=None) |
batch(requests, request_options=None) |
Removed, use multiple_batch instead |
multiple_batch(operations, request_options=None) |
copyIndex(src_index_name, dst_index_name) |
Removed, use copy_index instead |
copy_index(src_index_name, dst_index_name, request_options=None) |
copy_index(src_index_name, dst_index_name, request_options=None, scope=None) |
Changed | copy_index(src_index_name, dst_index_name, request_options=None) |
deleteIndex(index_name) |
Removed, use init_index('name').delete() instead |
delete(request_options=None) |
deleteUserKey(api_key) |
Removed, use delete_api_key instead |
delete_api_key(key, request_options=None) |
delete_api_key(api_key, request_options=None) |
Changed | delete_api_key(key, request_options=None) |
delete_index(index_name, request_options=None) |
Removed, use init_index('name').delete() instead |
delete(request_options=None) |
delete_user_key(api_key) |
Removed, use delete_api_key instead |
delete_api_key(key, request_options=None) |
disableRateLimitForward() |
Removed, use RequestOptions param instead |
|
disable_rate_limit_forward() |
Removed, use RequestOptions param instead |
|
enableRateLimitForward(admin_api_key, end_user_ip, rate_limit_api_key) |
Removed, use RequestOptions param instead |
|
enable_rate_limit_forward(end_user_ip, rate_limit_api_key) |
Removed, use RequestOptions param instead |
|
generateSecuredApiKey(private_api_key, tag_filters, user_token='') |
Removed, use generate_secured_api_key instead |
generate_secured_api_key(parent_api_key, restrictions) |
generate_secured_api_key(private_api_key, queryParameters, user_token='') |
Changed | generate_secured_api_key(parent_api_key, restrictions) |
getLogs(offset=0, length=10, type='all') |
Removed, use get_logs instead |
get_logs(request_options=None) |
getUserKeyACL(api_key) |
Removed, use get_api_key instead |
get_api_key(key, request_options=None) |
get_api_key(api_key, request_options=None) |
Changed | get_api_key(key, request_options=None) |
get_api_key_acl(api_key, request_options=None) |
Removed, use get_api_key instead |
get_api_key(key, request_options=None) |
get_logs(offset=0, length=10, type='all', request_options=None) |
Changed | get_logs(request_options=None) |
get_task(index_name, task_id, request_options=None) |
Removed, use init_index('name').get_task instead |
get_task(task_id, request_options=None) |
get_top_user_id(request_options=None) |
Removed, use get_top_user_ids instead |
get_top_user_ids(request_options=None) |
get_user_key_acl(api_key) |
Removed, use get_api_key instead |
get_api_key(key, request_options=None) |
initIndex(index_name) |
Removed, use init_index instead |
init_index(name) |
init_analytics() |
Removed, use AnalyticsClient.create instead |
create(app_id=None, api_key=None, region=None) |
init_index(index_name) |
Changed | init_index(name) |
init_insights_client(region='us') |
Removed, use InsightsClient.create instead |
create(app_id=None, api_key=None, region=None) |
is_alive(request_options=None) |
Removed | |
is_task_published(index_name, task_id, request_options=None) |
Removed | |
listIndexes() |
Removed, use list_indices instead |
list_indices(request_options=None) |
listUserKeys() |
Removed, use list_api_keys instead |
list_api_keys(request_options=None) |
list_indexes(request_options=None) |
Removed, use list_indices instead |
list_indices(request_options=None) |
list_user_ids(page=0, hits_per_page=20, request_options=None) |
Changed | list_user_ids(request_options=None) |
list_user_keys() |
Removed, use list_api_keys instead |
list_api_keys(request_options=None) |
moveIndex(src_index_name, dst_index_name) |
Removed, use move_index instead |
move_index(src_index_name, dst_index_name, request_options=None) |
multipleQueries(queries, index_name_key='indexName') |
Removed, use multiple_queries instead |
multiple_queries(queries, request_options=None) |
multiple_queries(queries, index_name_key='indexName', strategy='none', request_options=None) |
Changed | multiple_queries(queries, request_options=None) |
restore_api_key(api_key, request_options=None) |
Changed | restore_api_key(key, request_options=None) |
search_user_ids(query, cluster=None, page=None, hits_per_page=None, request_options=None) |
Changed | search_user_ids(query, request_options=None) |
set_end_user_ip(end_user_ip) |
Removed, use RequestOptions param instead |
|
set_extra_header(key, value) |
Removed, use RequestOptions param instead |
|
set_extra_headers(**kwargs) |
Removed, use RequestOptions param instead |
|
set_timeout(connect_timeout, read_timeout, search_timeout=5) |
Removed, use RequestOptions param instead |
|
update_api_key(api_key, obj, validity=None, max_queries_per_ip_per_hour=None, max_hits_per_query=None, indexes=None, request_options=None) |
Changed | update_api_key(key, request_options=None) |
update_user_key(api_key, obj, validity=None, max_queries_per_ip_per_hour=None, max_hits_per_query=None, indexes=None) |
Removed, use update_api_key instead |
update_api_key(key, request_options=None) |
wait_task(index_name, task_id, time_before_retry=100, request_options=None) |
Removed, use init_index('name').wait_task instead |
wait_task(task_id, request_options=None) |
Search Index
Previously, to get started:
1
2
3
from algoliasearch.client import Client
index = Client('app_id', 'api_key').init_index('name')
Now, in the 2.0.0
you should update your code to:
1
2
3
from algoliasearch.search_client import SearchClient
index = SearchClient.create('app_id', 'api_key').init_index('name')
List of Method Signature Changes
1.20.0 | Breaking Change | 2.0.0 |
---|---|---|
addObject(content, object_id=None) |
Removed, use save_object instead |
save_object(obj, request_options=None) |
addObjects(objects) |
Removed, use save_objects instead |
save_objects(objects, request_options=None) |
addUserKey(obj, validity=0, max_queries_per_ip_per_hour=0, max_hits_per_query=0) |
Removed, use SearchClient.add_api_key instead |
add_api_key(acl, request_options=None) |
add_api_key(obj, validity=0, max_queries_per_ip_per_hour=0, max_hits_per_query=0, request_options=None) |
Removed, use SearchClient.add_api_key instead |
add_api_key(acl, request_options=None) |
add_object(content, object_id=None, request_options=None) |
Removed, use save_object instead |
save_object(obj, request_options=None) |
add_objects(objects, request_options=None) |
Removed, use save_objects instead |
save_objects(objects, request_options=None) |
add_user_key(obj, validity=0, max_queries_per_ip_per_hour=0, max_hits_per_query=0) |
Removed, use SearchClient.add_api_key instead |
add_api_key(acl, request_options=None) |
batch(requests, no_create=False, request_options=None) |
Changed | batch(requests, request_options=None) |
batch_rules(rules, forward_to_replicas=False, clear_existing_rules=False, request_options=None) |
Removed, use save_rules instead |
save_rules(rules, request_options=None) |
batch_synonyms(synonyms, forward_to_slaves=False, replace_existing_synonyms=False, forward_to_replicas=False, request_options=None) |
Removed, use save_synonyms instead |
save_synonyms(synonyms, request_options=None) |
browse(page=0, hits_per_page=1000) |
Removed, use browse_objects instead |
browse_objects(request_options=None) |
browse_all(params=None, request_options=None) |
Removed, use browse_objects instead |
browse_objects(request_options=None) |
browse_from(params=None, cursor=None, request_options=None) |
Removed, use browse_objects instead |
browse_objects(request_options=None) |
clearIndex() |
Removed, use clear_objects instead |
clear_objects(request_options=None) |
clear_index(request_options=None) |
Removed, use clear_objects instead |
clear_objects(request_options=None) |
clear_rules(forward_to_replicas=False, request_options=None) |
Changed | clear_rules(request_options=None) |
clear_synonyms(forward_to_slaves=False, forward_to_replicas=False, request_options=None) |
Changed | clear_synonyms(request_options=None) |
deleteByQuery(query, params=None) |
Removed, use delete_by instead |
delete_by(filters, request_options=None) |
deleteObject(object_id) |
Removed, use delete_object instead |
delete_object(object_id, request_options=None) |
deleteObjects(objects) |
Removed, use delete_objects instead |
delete_objects(object_ids, request_options=None) |
deleteUserKey(key) |
Removed, use SearchClient.delete_api_key instead |
delete_api_key(key, request_options=None) |
delete_api_key(key, request_options=None) |
Removed, use SearchClient.delete_api_key instead |
delete_api_key(key, request_options=None) |
delete_by(params, request_options=None) |
Changed | delete_by(filters, request_options=None) |
delete_by_query(query, params=None, request_options=None) |
Removed, use delete_by instead |
delete_by(filters, request_options=None) |
delete_objects(objects, request_options=None) |
Changed | delete_objects(object_ids, request_options=None) |
delete_rule(objectID, forward_to_replicas=False, request_options=None) |
Changed | delete_rule(object_id, request_options=None) |
delete_synonym(object_id, forward_to_slaves=False, forward_to_replicas=False, request_options=None) |
Changed | delete_synonym(object_id, request_options=None) |
delete_user_key(key) |
Removed, use SearchClient.delete_api_key instead |
delete_api_key(key, request_options=None) |
getObject(object_id, attributes_to_retrieve=None) |
Removed, use get_object instead |
get_object(object_id, request_options=None) |
getObjects(object_ids) |
Removed, use get_objects instead |
get_objects(object_ids, request_options=None) |
getSettings() |
Removed, use get_settings instead |
get_settings(request_options=None) |
getUserKeyACL(key) |
Removed, use SearchClient.get_api_key instead |
get_api_key(key, request_options=None) |
get_api_key_acl(key, request_options=None) |
Removed, use SearchClient.get_api_key instead |
get_api_key(key, request_options=None) |
get_object(object_id, attributes_to_retrieve=None, request_options=None) |
Changed | get_object(object_id, request_options=None) |
get_objects(object_ids, attributes_to_retrieve=None, request_options=None) |
Changed | get_objects(object_ids, request_options=None) |
get_user_key_acl(key) |
Removed, use SearchClient.get_api_key instead |
get_api_key(key, request_options=None) |
is_task_published(task_id, request_options=None) |
Removed | |
iter_rules(hits_per_page=1000, request_options=None) |
Removed, use browse_rules instead |
browse_rules(request_options=None) |
iter_synonyms(hits_per_page=1000, request_options=None) |
Removed, use browse_synonyms instead |
browse_synonyms(request_options=None) |
listUserKeys() |
Removed, use SearchClient.list_api_keys instead |
list_api_keys(self, request_options=None) |
list_api_keys(request_options=None) |
Removed, use SearchClient.list_api_keys instead |
list_api_keys(self, request_options=None) |
list_user_keys() |
Removed, use SearchClient.list_api_keys instead |
list_api_keys(self, request_options=None) |
partialUpdateObject(partial_object) |
Removed, use partial_update_object instead |
partial_update_object(obj, request_options=None) |
partialUpdateObjects(objects) |
Removed, use partial_update_objects instead |
partial_update_objects(objects, request_options=None) |
partial_update_object(partial_object, no_create=False, request_options=None) |
Changed | partial_update_object(obj, request_options=None) |
partial_update_objects(objects, no_create=False, request_options=None) |
Changed | partial_update_objects(objects, request_options=None) |
read_rule(objectID, request_options=None) |
Removed, use get_rule instead |
get_rule(object_id, request_options=None) |
saveObject(obj) |
Removed, use save_object instead |
save_object(obj, request_options=None) |
saveObjects(objects) |
Removed, use save_objects instead |
save_objects(objects, request_options=None) |
save_rule(rule, forward_to_replicas=False, request_options=None) |
Changed | save_rule(rule, request_options=None) |
save_synonym(content, object_id, forward_to_slaves=False, forward_to_replicas=False, request_options=None) |
Changed | save_synonym(synonym, request_options=None) |
search(query, args=None, request_options=None) |
Changed | search(query, request_options=None) |
searchDisjunctiveFaceting(query, disjunctive_facets, params=None, refinements=None) |
Removed | |
search_disjunctive_faceting(query, disjunctive_facets, params=None, refinements=None, request_options=None) |
Removed | |
search_facet(facet_name, facet_query, query=None, request_options=None) |
Removed, use search_for_facet_values instead |
search_for_facet_values(facet_name, facet_query, request_options=None) |
search_for_facet_values(facet_name, facet_query, query=None, request_options=None) |
Removed, use search_for_facet_values instead |
search_for_facet_values(facet_name, facet_query, request_options=None) |
search_rules(query=None, anchoring=None, context=None, page=None, hitsPerPage=None, request_options=None) |
Changed | search_rules(query, request_options=None) |
search_synonyms(query, types=[], page=0, hits_per_page=100, request_options=None) |
Changed | search_synonyms(query, request_options=None) |
setSettings(settings) |
Removed, use set_settings instead |
set_settings(settings, request_options=None) |
set_settings(settings, forward_to_slaves=True, forward_to_replicas=True, request_options=None) |
Changed | set_settings(settings, request_options=None) |
update_api_key(key, obj, validity=None, max_queries_per_ip_per_hour=None, max_hits_per_query=None, request_options=None) |
Removed, use SearchClient.update_api_key instead |
update_api_key(key, request_options=None) |
update_user_key(key, obj, validity=None, max_queries_per_ip_per_hour=None, max_hits_per_query=None) |
Removed, use SearchClient.update_api_key instead |
update_api_key(key, request_options=None) |
waitTask(task_id, time_before_retry=100) |
Removed, use wait_task instead |
wait_task(task_id, request_options=None) |
wait_task(task_id, time_before_retry=100, request_options=None) |
Changed | wait_task(task_id, request_options=None) |
Analytics Client
Previously, to get started:
1
2
3
from algoliasearch.client import Client
analytics = Client('app_id', 'api_key').init_analytics()
Now, in the 2.0.0
you should update your code to:
1
2
3
from algoliasearch.analytics_client import AnalyticsClient
analytics = AnalyticsClient.create('app_id', 'api_key')
List of Method Signature Changes
1.20.0 | Breaking Change | 2.0.0 |
---|---|---|
add_ab_test(ab_test) |
Changed | add_ab_test(ab_test, request_options=None) |
delete_ab_test(ab_test_id) |
Changed | delete_ab_test(ab_test_id, request_options=None) |
get_ab_test(ab_test_id) |
Changed | get_ab_test(ab_test_id, request_options=None) |
get_ab_tests(args=None) |
Changed | get_ab_tests(request_options=None) |
stop_ab_test(ab_test_id) |
Changed | stop_ab_test(ab_test_id, request_options=None) |
wait_task(index_name, task_id, time_before_retry=100, request_options=None) |
Removed |
Insights Client
Previously, to get started:
1
2
3
from algoliasearch.client import Client
insights = Client('app_id', 'api_key').init_insights()
Now, in the 2.0.0
you should update your code to:
1
2
3
from algoliasearch.insights_client import InsightsClient
insights = InsightsClient.create('app_id', 'api_key')
List of Method Signature Changes
1.20.0 | Breaking Change | 2.0.0 |
---|---|---|
post(data, request_options=None) |
Removed |
Using configuration
All clients can be instantiated via configuration objects. This is useful to affect the way a client behaves. All setters have been removed. If, for instance, you relied on set_extra_headers
or set_timeout
, you need to change your code to use a configuration object:
1
2
3
4
5
6
7
8
9
10
11
12
# v1
client.timeout = (1, 30)
# v2
from algoliasearch.configs import SearchConfig
config = SearchConfig()
config.read_timeout = 1
config.write_timeout = 30
client = SearchClient.create_with_config(config)
Optional Methods Parameters & Request Options
To have the most consistent, predictable, and future-proof method signature, we followed three rules:
- All required parameters have a single argument each
- All optional arguments are passed in a dict, as the last argument, and is called
request_options
- The client never sets any default values
Here are a few examples:
1
2
3
4
5
# v1
client.get_logs(0, 100, 'all')
# v2
client.get_logs({'offset': 0, 'length': 100, 'type': 'all'})
1
2
3
4
5
6
7
8
9
10
11
12
forward_to_replicas = True
synonym = {
'objectID': 'a-unique-identifier',
'type': 'altCorrection1',
# ...
}
# v1
index.save_synonym(synonym, 'a-unique-identifier', forward_to_replicas)
# v2
index.save_synonym(synonym, {'forwardToReplicas': forward_to_replicas})
1
2
3
4
5
6
7
object = {'foo': 'bar'}
# v1
index.add_object(object)
# v2
index.save_object(object, {'autoGenerateObjectIDIfNotExist': True})
1
2
3
4
5
6
7
settings = {"searchableAttributes": ["name", "address"]}
# v1
index.set_settings(settings, True)
# v2
index.set_settings(settings, {'forwardToReplicas': True})
Exceptions
The import of the base AlgoliaException
exception has changed:
1
2
3
4
5
# v1
from algoliasearch.helpers import AlgoliaException
# v2
from algoliasearch.exceptions import AlgoliaException
Miscellaneous
We also encourage you to view the changes in the github.com/algolia/algoliasearch-client-python GitHub repository.