recombee-api-client 5.0.2__tar.gz → 6.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- recombee_api_client-6.0.0/LICENSE +21 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/PKG-INFO +18 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_client.py +60 -43
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/__init__.py +71 -23
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_bookmark.py +32 -18
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_cart_addition.py +38 -22
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_detail_view.py +41 -20
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_item.py +11 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_item_property.py +34 -25
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_manual_reql_segment.py +28 -16
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_purchase.py +41 -24
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_rating.py +35 -20
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_search_synonym.py +23 -17
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_series.py +16 -7
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_user.py +10 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_user_property.py +29 -20
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/batch.py +15 -11
- recombee_api_client-6.0.0/recombee_api_client/api_requests/composite_recommendation.py +155 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/create_auto_reql_segmentation.py +37 -21
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/create_manual_reql_segmentation.py +33 -18
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/create_property_based_segmentation.py +36 -20
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_all_search_synonyms.py +8 -2
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_bookmark.py +20 -12
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_cart_addition.py +20 -12
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_detail_view.py +20 -12
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_item.py +16 -7
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_item_property.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_manual_reql_segment.py +15 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_more_items.py +13 -7
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_purchase.py +20 -12
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_rating.py +20 -12
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_search_synonym.py +14 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_segmentation.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_series.py +18 -9
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_user.py +14 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_user_property.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_view_portion.py +17 -11
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_item_property_info.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_item_values.py +11 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_segmentation.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_user_property_info.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_user_values.py +11 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/insert_to_series.py +31 -15
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_bookmarks.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_cart_additions.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_detail_views.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_properties.py +11 -2
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_purchases.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_ratings.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_view_portions.py +14 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_items.py +63 -50
- recombee_api_client-6.0.0/recombee_api_client/api_requests/list_scenarios.py +35 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_search_synonyms.py +13 -7
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_segmentations.py +11 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_series.py +8 -2
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_series_items.py +12 -3
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_bookmarks.py +12 -3
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_cart_additions.py +12 -3
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_detail_views.py +12 -3
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_properties.py +11 -2
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_purchases.py +12 -3
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_ratings.py +12 -3
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_view_portions.py +13 -4
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_users.py +57 -44
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/merge_users.py +26 -12
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_item_segments_to_item.py +92 -70
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_item_segments_to_item_segment.py +93 -71
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_item_segments_to_user.py +72 -51
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_items_to_item.py +254 -146
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_items_to_item_segment.py +240 -140
- recombee_api_client-6.0.0/recombee_api_client/api_requests/recommend_items_to_user.py +347 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_next_items.py +25 -16
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_users_to_item.py +204 -101
- recombee_api_client-6.0.0/recombee_api_client/api_requests/recommend_users_to_user.py +326 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/remove_from_series.py +16 -7
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/request.py +1 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/reset_database.py +6 -2
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/search_item_segments.py +74 -53
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/search_items.py +209 -112
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/set_item_values.py +17 -15
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/set_user_values.py +12 -10
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/set_values.py +19 -13
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/set_view_portion.py +51 -23
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_auto_reql_segmentation.py +31 -16
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_manual_reql_segment.py +26 -14
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_manual_reql_segmentation.py +24 -13
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_more_items.py +16 -10
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_property_based_segmentation.py +31 -16
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/exceptions.py +10 -3
- recombee_api_client-6.0.0/recombee_api_client/inputs/__init__.py +5 -0
- recombee_api_client-6.0.0/recombee_api_client/inputs/composite_recommendation_stage_parameters.py +374 -0
- recombee_api_client-6.0.0/recombee_api_client/inputs/input.py +7 -0
- recombee_api_client-6.0.0/recombee_api_client/inputs/logic.py +37 -0
- recombee_api_client-6.0.0/recombee_api_client/utils/__init__.py +1 -0
- recombee_api_client-6.0.0/recombee_api_client/utils/serialize_to_json.py +9 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/PKG-INFO +18 -5
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/SOURCES.txt +11 -1
- recombee_api_client-6.0.0/setup.py +43 -0
- recombee_api_client-6.0.0/tests/test.py +475 -0
- recombee-api-client-5.0.2/recombee_api_client/api_requests/recommend_items_to_user.py +0 -247
- recombee-api-client-5.0.2/recombee_api_client/api_requests/recommend_users_to_user.py +0 -226
- recombee-api-client-5.0.2/setup.py +0 -59
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/README.rst +0 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/__init__.py +0 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/dependency_links.txt +0 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/requires.txt +0 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/top_level.txt +0 -0
- {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/setup.cfg +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2016 Recombee
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: recombee-api-client
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.0.0
|
|
4
4
|
Summary: Client for Recombee recommendation API
|
|
5
5
|
Home-page: https://github.com/Recombee/python-api-client
|
|
6
6
|
Author: Recombee
|
|
@@ -13,13 +13,26 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
13
13
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
14
14
|
Classifier: License :: OSI Approved :: MIT License
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.6
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
19
16
|
Classifier: Programming Language :: Python :: 3.9
|
|
20
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
22
|
Requires-Python: >=3.6
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: requests>=2.20.0
|
|
25
|
+
Dynamic: author
|
|
26
|
+
Dynamic: author-email
|
|
27
|
+
Dynamic: classifier
|
|
28
|
+
Dynamic: description
|
|
29
|
+
Dynamic: home-page
|
|
30
|
+
Dynamic: keywords
|
|
31
|
+
Dynamic: license
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
Dynamic: requires-dist
|
|
34
|
+
Dynamic: requires-python
|
|
35
|
+
Dynamic: summary
|
|
23
36
|
|
|
24
37
|
*****************
|
|
25
38
|
RecombeeApiClient
|
|
@@ -17,6 +17,7 @@ class Region(Enum):
|
|
|
17
17
|
"""
|
|
18
18
|
Region of the Recombee cluster
|
|
19
19
|
"""
|
|
20
|
+
|
|
20
21
|
AP_SE = 1
|
|
21
22
|
CA_EAST = 2
|
|
22
23
|
EU_WEST = 3
|
|
@@ -28,16 +29,24 @@ class RecombeeClient:
|
|
|
28
29
|
Client for sending requests to Recombee recommender system
|
|
29
30
|
|
|
30
31
|
:param database_id: Name of your database_id at Recombee
|
|
31
|
-
|
|
32
|
+
|
|
32
33
|
:param token: Secret token obtained from Recombee for signing requests
|
|
33
|
-
|
|
34
|
+
|
|
34
35
|
:param protocol: Default protocol for sending requests. Possible values: 'http', 'https'.
|
|
35
36
|
|
|
36
37
|
:param region: region of the Recombee cluster where the database is located
|
|
37
38
|
"""
|
|
39
|
+
|
|
38
40
|
BATCH_MAX_SIZE = 10000
|
|
39
41
|
|
|
40
|
-
def __init__(
|
|
42
|
+
def __init__(
|
|
43
|
+
self,
|
|
44
|
+
database_id: str,
|
|
45
|
+
token: str,
|
|
46
|
+
protocol: str = "https",
|
|
47
|
+
options: dict = None,
|
|
48
|
+
region: Region = None,
|
|
49
|
+
):
|
|
41
50
|
self.database_id = database_id
|
|
42
51
|
self.token = token
|
|
43
52
|
self.protocol = protocol
|
|
@@ -48,23 +57,23 @@ class RecombeeClient:
|
|
|
48
57
|
"""
|
|
49
58
|
:param request: Request to be sent to Recombee recommender
|
|
50
59
|
"""
|
|
51
|
-
|
|
60
|
+
|
|
52
61
|
if isinstance(request, Batch) and len(request.requests) > self.BATCH_MAX_SIZE:
|
|
53
62
|
return self.__send_multipart_batch(request)
|
|
54
63
|
|
|
55
64
|
timeout = request.timeout / 1000
|
|
56
65
|
uri = self.__process_request_uri(request)
|
|
57
66
|
uri = self.__sign_url(uri)
|
|
58
|
-
protocol =
|
|
59
|
-
uri = protocol +
|
|
67
|
+
protocol = "https" if request.ensure_https else self.protocol
|
|
68
|
+
uri = protocol + "://" + self.base_uri + uri
|
|
60
69
|
try:
|
|
61
|
-
if request.method ==
|
|
70
|
+
if request.method == "put":
|
|
62
71
|
return self.__put(request, uri, timeout)
|
|
63
|
-
elif request.method ==
|
|
72
|
+
elif request.method == "get":
|
|
64
73
|
return self.__get(request, uri, timeout)
|
|
65
|
-
elif request.method ==
|
|
74
|
+
elif request.method == "post":
|
|
66
75
|
return self.__post(request, uri, timeout)
|
|
67
|
-
elif request.method ==
|
|
76
|
+
elif request.method == "delete":
|
|
68
77
|
return self.__delete(request, uri, timeout)
|
|
69
78
|
except requests.exceptions.Timeout:
|
|
70
79
|
raise ApiTimeoutException(request)
|
|
@@ -72,61 +81,67 @@ class RecombeeClient:
|
|
|
72
81
|
@staticmethod
|
|
73
82
|
def __get_regional_base_uri(region: Region) -> str:
|
|
74
83
|
uri = {
|
|
75
|
-
Region.AP_SE:
|
|
76
|
-
Region.CA_EAST:
|
|
77
|
-
Region.EU_WEST:
|
|
78
|
-
Region.US_WEST:
|
|
79
|
-
|
|
84
|
+
Region.AP_SE: "rapi-ap-se.recombee.com",
|
|
85
|
+
Region.CA_EAST: "rapi-ca-east.recombee.com",
|
|
86
|
+
Region.EU_WEST: "rapi-eu-west.recombee.com",
|
|
87
|
+
Region.US_WEST: "rapi-us-west.recombee.com",
|
|
88
|
+
}.get(region)
|
|
80
89
|
|
|
81
90
|
if uri is None:
|
|
82
|
-
raise ValueError(
|
|
91
|
+
raise ValueError("Unknown region given")
|
|
83
92
|
return uri
|
|
84
93
|
|
|
85
94
|
@staticmethod
|
|
86
95
|
def __get_base_uri(options: dict, region: str) -> str:
|
|
87
|
-
base_uri = os.environ.get(
|
|
96
|
+
base_uri = os.environ.get("RAPI_URI") or options.get("base_uri")
|
|
88
97
|
if region is not None:
|
|
89
98
|
if base_uri:
|
|
90
|
-
raise ValueError(
|
|
99
|
+
raise ValueError(
|
|
100
|
+
"base_uri and region cannot be specified at the same time"
|
|
101
|
+
)
|
|
91
102
|
base_uri = RecombeeClient.__get_regional_base_uri(region)
|
|
92
103
|
|
|
93
|
-
return base_uri or
|
|
104
|
+
return base_uri or "rapi.recombee.com"
|
|
94
105
|
|
|
95
106
|
@staticmethod
|
|
96
107
|
def __get_http_headers(additional_headers: dict = None) -> dict:
|
|
97
|
-
headers = {
|
|
108
|
+
headers = {"User-Agent": "recombee-python-api-client/6.0.0"}
|
|
98
109
|
if additional_headers:
|
|
99
110
|
headers.update(additional_headers)
|
|
100
111
|
return headers
|
|
101
112
|
|
|
102
113
|
def __put(self, request: Request, uri: str, timeout: int):
|
|
103
|
-
response = requests.put(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
114
|
+
response = requests.put(
|
|
115
|
+
uri,
|
|
116
|
+
data=json.dumps(request.get_body_parameters()),
|
|
117
|
+
headers=self.__get_http_headers({"Content-Type": "application/json"}),
|
|
118
|
+
timeout=timeout,
|
|
119
|
+
)
|
|
107
120
|
self.__check_errors(response, request)
|
|
108
121
|
return response.json()
|
|
109
122
|
|
|
110
123
|
def __get(self, request: Request, uri: str, timeout: int):
|
|
111
|
-
response = requests.get(uri,
|
|
112
|
-
headers=self.__get_http_headers(),
|
|
113
|
-
timeout=timeout)
|
|
124
|
+
response = requests.get(uri, headers=self.__get_http_headers(), timeout=timeout)
|
|
114
125
|
self.__check_errors(response, request)
|
|
115
126
|
return response.json()
|
|
116
127
|
|
|
117
128
|
def __post(self, request: Request, uri: str, timeout: int):
|
|
118
|
-
response = requests.post(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
129
|
+
response = requests.post(
|
|
130
|
+
uri,
|
|
131
|
+
data=json.dumps(request.get_body_parameters()),
|
|
132
|
+
headers=self.__get_http_headers({"Content-Type": "application/json"}),
|
|
133
|
+
timeout=timeout,
|
|
134
|
+
)
|
|
122
135
|
self.__check_errors(response, request)
|
|
123
136
|
return response.json()
|
|
124
137
|
|
|
125
138
|
def __delete(self, request: Request, uri: str, timeout: int):
|
|
126
|
-
response = requests.delete(
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
response = requests.delete(
|
|
140
|
+
uri,
|
|
141
|
+
data=json.dumps(request.get_body_parameters()),
|
|
142
|
+
headers=self.__get_http_headers({"Content-Type": "application/json"}),
|
|
143
|
+
timeout=timeout,
|
|
144
|
+
)
|
|
130
145
|
self.__check_errors(response, request)
|
|
131
146
|
return response.json()
|
|
132
147
|
|
|
@@ -141,10 +156,12 @@ class RecombeeClient:
|
|
|
141
156
|
"""Yield successive n-sized chunks from l."""
|
|
142
157
|
|
|
143
158
|
for i in range(0, len(l), n):
|
|
144
|
-
yield l[i:i + n]
|
|
159
|
+
yield l[i : i + n]
|
|
145
160
|
|
|
146
161
|
def __send_multipart_batch(self, batch: Batch) -> list:
|
|
147
|
-
requests_parts = [
|
|
162
|
+
requests_parts = [
|
|
163
|
+
rqs for rqs in self.__get_list_chunks(batch.requests, self.BATCH_MAX_SIZE)
|
|
164
|
+
]
|
|
148
165
|
responses = [self.send(Batch(rqs)) for rqs in requests_parts]
|
|
149
166
|
return sum(responses, [])
|
|
150
167
|
|
|
@@ -154,31 +171,31 @@ class RecombeeClient:
|
|
|
154
171
|
return uri
|
|
155
172
|
|
|
156
173
|
def __query_parameters_to_url(self, request: Request) -> str:
|
|
157
|
-
ps =
|
|
174
|
+
ps = ""
|
|
158
175
|
query_params = request.get_query_parameters()
|
|
159
176
|
for name in query_params:
|
|
160
177
|
val = query_params[name]
|
|
161
|
-
ps +=
|
|
178
|
+
ps += "&" if ps.find("?") != -1 else "?"
|
|
162
179
|
ps += "%s=%s" % (name, self.__format_query_parameter_value(val))
|
|
163
180
|
return ps
|
|
164
181
|
|
|
165
182
|
@staticmethod
|
|
166
183
|
def __format_query_parameter_value(value) -> str:
|
|
167
184
|
if isinstance(value, list):
|
|
168
|
-
return
|
|
185
|
+
return ",".join([quote(str(v)) for v in value])
|
|
169
186
|
return quote(str(value))
|
|
170
187
|
|
|
171
188
|
# Sign request with HMAC, request URI must be exactly the same
|
|
172
189
|
# We have 30s to complete request with this token
|
|
173
190
|
def __sign_url(self, req_part: str) -> str:
|
|
174
|
-
uri =
|
|
191
|
+
uri = "/" + self.database_id + req_part
|
|
175
192
|
time_part = self.__hmac_time(uri)
|
|
176
193
|
sign = self.__hmac_sign(uri, time_part)
|
|
177
|
-
res = uri + time_part +
|
|
194
|
+
res = uri + time_part + "&hmac_sign=" + sign
|
|
178
195
|
return res
|
|
179
196
|
|
|
180
197
|
def __hmac_time(self, uri: str) -> str:
|
|
181
|
-
res =
|
|
198
|
+
res = "&" if uri.find("?") != -1 else "?"
|
|
182
199
|
res += "hmac_timestamp=%s" % int(time.time())
|
|
183
200
|
return res
|
|
184
201
|
|
{recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/__init__.py
RENAMED
|
@@ -39,43 +39,91 @@ from recombee_api_client.api_requests.list_item_ratings import ListItemRatings
|
|
|
39
39
|
from recombee_api_client.api_requests.list_user_ratings import ListUserRatings
|
|
40
40
|
from recombee_api_client.api_requests.add_cart_addition import AddCartAddition
|
|
41
41
|
from recombee_api_client.api_requests.delete_cart_addition import DeleteCartAddition
|
|
42
|
-
from recombee_api_client.api_requests.list_item_cart_additions import
|
|
43
|
-
|
|
42
|
+
from recombee_api_client.api_requests.list_item_cart_additions import (
|
|
43
|
+
ListItemCartAdditions,
|
|
44
|
+
)
|
|
45
|
+
from recombee_api_client.api_requests.list_user_cart_additions import (
|
|
46
|
+
ListUserCartAdditions,
|
|
47
|
+
)
|
|
44
48
|
from recombee_api_client.api_requests.add_bookmark import AddBookmark
|
|
45
49
|
from recombee_api_client.api_requests.delete_bookmark import DeleteBookmark
|
|
46
50
|
from recombee_api_client.api_requests.list_item_bookmarks import ListItemBookmarks
|
|
47
51
|
from recombee_api_client.api_requests.list_user_bookmarks import ListUserBookmarks
|
|
48
52
|
from recombee_api_client.api_requests.set_view_portion import SetViewPortion
|
|
49
53
|
from recombee_api_client.api_requests.delete_view_portion import DeleteViewPortion
|
|
50
|
-
from recombee_api_client.api_requests.list_item_view_portions import
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
from recombee_api_client.api_requests.
|
|
54
|
-
|
|
54
|
+
from recombee_api_client.api_requests.list_item_view_portions import (
|
|
55
|
+
ListItemViewPortions,
|
|
56
|
+
)
|
|
57
|
+
from recombee_api_client.api_requests.list_user_view_portions import (
|
|
58
|
+
ListUserViewPortions,
|
|
59
|
+
)
|
|
60
|
+
from recombee_api_client.api_requests.recommend_items_to_user import (
|
|
61
|
+
RecommendItemsToUser,
|
|
62
|
+
)
|
|
63
|
+
from recombee_api_client.api_requests.recommend_items_to_item import (
|
|
64
|
+
RecommendItemsToItem,
|
|
65
|
+
)
|
|
66
|
+
from recombee_api_client.api_requests.recommend_items_to_item_segment import (
|
|
67
|
+
RecommendItemsToItemSegment,
|
|
68
|
+
)
|
|
55
69
|
from recombee_api_client.api_requests.recommend_next_items import RecommendNextItems
|
|
56
|
-
from recombee_api_client.api_requests.recommend_users_to_user import
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
from recombee_api_client.api_requests.
|
|
60
|
-
|
|
70
|
+
from recombee_api_client.api_requests.recommend_users_to_user import (
|
|
71
|
+
RecommendUsersToUser,
|
|
72
|
+
)
|
|
73
|
+
from recombee_api_client.api_requests.recommend_users_to_item import (
|
|
74
|
+
RecommendUsersToItem,
|
|
75
|
+
)
|
|
76
|
+
from recombee_api_client.api_requests.recommend_item_segments_to_user import (
|
|
77
|
+
RecommendItemSegmentsToUser,
|
|
78
|
+
)
|
|
79
|
+
from recombee_api_client.api_requests.recommend_item_segments_to_item import (
|
|
80
|
+
RecommendItemSegmentsToItem,
|
|
81
|
+
)
|
|
82
|
+
from recombee_api_client.api_requests.recommend_item_segments_to_item_segment import (
|
|
83
|
+
RecommendItemSegmentsToItemSegment,
|
|
84
|
+
)
|
|
85
|
+
from recombee_api_client.api_requests.composite_recommendation import (
|
|
86
|
+
CompositeRecommendation,
|
|
87
|
+
)
|
|
61
88
|
from recombee_api_client.api_requests.search_items import SearchItems
|
|
62
89
|
from recombee_api_client.api_requests.search_item_segments import SearchItemSegments
|
|
63
90
|
from recombee_api_client.api_requests.add_search_synonym import AddSearchSynonym
|
|
64
91
|
from recombee_api_client.api_requests.list_search_synonyms import ListSearchSynonyms
|
|
65
|
-
from recombee_api_client.api_requests.delete_all_search_synonyms import
|
|
92
|
+
from recombee_api_client.api_requests.delete_all_search_synonyms import (
|
|
93
|
+
DeleteAllSearchSynonyms,
|
|
94
|
+
)
|
|
66
95
|
from recombee_api_client.api_requests.delete_search_synonym import DeleteSearchSynonym
|
|
67
|
-
from recombee_api_client.api_requests.create_property_based_segmentation import
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
from recombee_api_client.api_requests.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
from recombee_api_client.api_requests.
|
|
74
|
-
|
|
75
|
-
|
|
96
|
+
from recombee_api_client.api_requests.create_property_based_segmentation import (
|
|
97
|
+
CreatePropertyBasedSegmentation,
|
|
98
|
+
)
|
|
99
|
+
from recombee_api_client.api_requests.update_property_based_segmentation import (
|
|
100
|
+
UpdatePropertyBasedSegmentation,
|
|
101
|
+
)
|
|
102
|
+
from recombee_api_client.api_requests.create_auto_reql_segmentation import (
|
|
103
|
+
CreateAutoReqlSegmentation,
|
|
104
|
+
)
|
|
105
|
+
from recombee_api_client.api_requests.update_auto_reql_segmentation import (
|
|
106
|
+
UpdateAutoReqlSegmentation,
|
|
107
|
+
)
|
|
108
|
+
from recombee_api_client.api_requests.create_manual_reql_segmentation import (
|
|
109
|
+
CreateManualReqlSegmentation,
|
|
110
|
+
)
|
|
111
|
+
from recombee_api_client.api_requests.update_manual_reql_segmentation import (
|
|
112
|
+
UpdateManualReqlSegmentation,
|
|
113
|
+
)
|
|
114
|
+
from recombee_api_client.api_requests.add_manual_reql_segment import (
|
|
115
|
+
AddManualReqlSegment,
|
|
116
|
+
)
|
|
117
|
+
from recombee_api_client.api_requests.update_manual_reql_segment import (
|
|
118
|
+
UpdateManualReqlSegment,
|
|
119
|
+
)
|
|
120
|
+
from recombee_api_client.api_requests.delete_manual_reql_segment import (
|
|
121
|
+
DeleteManualReqlSegment,
|
|
122
|
+
)
|
|
76
123
|
from recombee_api_client.api_requests.list_segmentations import ListSegmentations
|
|
77
124
|
from recombee_api_client.api_requests.get_segmentation import GetSegmentation
|
|
78
125
|
from recombee_api_client.api_requests.delete_segmentation import DeleteSegmentation
|
|
79
|
-
from recombee_api_client.api_requests.reset_database import ResetDatabase
|
|
80
126
|
from recombee_api_client.api_requests.batch import Batch
|
|
127
|
+
from recombee_api_client.api_requests.list_scenarios import ListScenarios
|
|
128
|
+
from recombee_api_client.api_requests.reset_database import ResetDatabase
|
|
81
129
|
from recombee_api_client.api_requests.request import Request
|
|
@@ -1,35 +1,47 @@
|
|
|
1
1
|
from recombee_api_client.api_requests.request import Request
|
|
2
|
+
from recombee_api_client.utils.serialize_to_json import serialize_to_json
|
|
2
3
|
from typing import Union, List
|
|
4
|
+
from datetime import datetime
|
|
3
5
|
import uuid
|
|
4
6
|
|
|
5
7
|
DEFAULT = uuid.uuid4()
|
|
6
8
|
|
|
9
|
+
|
|
7
10
|
class AddBookmark(Request):
|
|
8
11
|
"""
|
|
9
12
|
Adds a bookmark of the given item made by the given user.
|
|
10
|
-
|
|
13
|
+
|
|
11
14
|
Required parameters:
|
|
12
|
-
|
|
15
|
+
|
|
13
16
|
:param user_id: User who bookmarked the item
|
|
14
|
-
|
|
17
|
+
|
|
15
18
|
:param item_id: Bookmarked item
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
|
|
20
|
+
|
|
18
21
|
Optional parameters:
|
|
19
|
-
|
|
22
|
+
|
|
20
23
|
:param timestamp: UTC timestamp of the bookmark as ISO8601-1 pattern or UTC epoch time. The default value is the current time.
|
|
21
|
-
|
|
24
|
+
|
|
22
25
|
:param cascade_create: Sets whether the given user/item should be created if not present in the database.
|
|
23
|
-
|
|
26
|
+
|
|
24
27
|
:param recomm_id: If this bookmark is based on a recommendation request, `recommId` is the id of the clicked recommendation.
|
|
25
|
-
|
|
28
|
+
|
|
26
29
|
:param additional_data: A dictionary of additional data for the interaction.
|
|
27
|
-
|
|
28
30
|
|
|
29
31
|
"""
|
|
30
32
|
|
|
31
|
-
def __init__(
|
|
32
|
-
|
|
33
|
+
def __init__(
|
|
34
|
+
self,
|
|
35
|
+
user_id: str,
|
|
36
|
+
item_id: str,
|
|
37
|
+
timestamp: Union[str, int, datetime] = DEFAULT,
|
|
38
|
+
cascade_create: bool = DEFAULT,
|
|
39
|
+
recomm_id: str = DEFAULT,
|
|
40
|
+
additional_data: dict = DEFAULT,
|
|
41
|
+
):
|
|
42
|
+
super().__init__(
|
|
43
|
+
path="/bookmarks/", method="post", timeout=3000, ensure_https=False
|
|
44
|
+
)
|
|
33
45
|
self.user_id = user_id
|
|
34
46
|
self.item_id = item_id
|
|
35
47
|
self.timestamp = timestamp
|
|
@@ -42,16 +54,17 @@ class AddBookmark(Request):
|
|
|
42
54
|
Values of body parameters as a dictionary (name of parameter: value of the parameter).
|
|
43
55
|
"""
|
|
44
56
|
p = dict()
|
|
45
|
-
p[
|
|
46
|
-
p[
|
|
57
|
+
p["userId"] = serialize_to_json(self.user_id)
|
|
58
|
+
p["itemId"] = serialize_to_json(self.item_id)
|
|
47
59
|
if self.timestamp is not DEFAULT:
|
|
48
|
-
p[
|
|
60
|
+
p["timestamp"] = serialize_to_json(self.timestamp)
|
|
49
61
|
if self.cascade_create is not DEFAULT:
|
|
50
|
-
p[
|
|
62
|
+
p["cascadeCreate"] = serialize_to_json(self.cascade_create)
|
|
51
63
|
if self.recomm_id is not DEFAULT:
|
|
52
|
-
p[
|
|
64
|
+
p["recommId"] = serialize_to_json(self.recomm_id)
|
|
53
65
|
if self.additional_data is not DEFAULT:
|
|
54
|
-
p[
|
|
66
|
+
p["additionalData"] = serialize_to_json(self.additional_data)
|
|
67
|
+
|
|
55
68
|
return p
|
|
56
69
|
|
|
57
70
|
def get_query_parameters(self) -> dict:
|
|
@@ -59,4 +72,5 @@ class AddBookmark(Request):
|
|
|
59
72
|
Values of query parameters as a dictionary (name of parameter: value of the parameter).
|
|
60
73
|
"""
|
|
61
74
|
params = dict()
|
|
75
|
+
|
|
62
76
|
return params
|
|
@@ -1,39 +1,53 @@
|
|
|
1
1
|
from recombee_api_client.api_requests.request import Request
|
|
2
|
+
from recombee_api_client.utils.serialize_to_json import serialize_to_json
|
|
2
3
|
from typing import Union, List
|
|
4
|
+
from datetime import datetime
|
|
3
5
|
import uuid
|
|
4
6
|
|
|
5
7
|
DEFAULT = uuid.uuid4()
|
|
6
8
|
|
|
9
|
+
|
|
7
10
|
class AddCartAddition(Request):
|
|
8
11
|
"""
|
|
9
12
|
Adds a cart addition of the given item made by the given user.
|
|
10
|
-
|
|
13
|
+
|
|
11
14
|
Required parameters:
|
|
12
|
-
|
|
15
|
+
|
|
13
16
|
:param user_id: User who added the item to the cart
|
|
14
|
-
|
|
17
|
+
|
|
15
18
|
:param item_id: Item added to the cart
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
|
|
20
|
+
|
|
18
21
|
Optional parameters:
|
|
19
|
-
|
|
22
|
+
|
|
20
23
|
:param timestamp: UTC timestamp of the cart addition as ISO8601-1 pattern or UTC epoch time. The default value is the current time.
|
|
21
|
-
|
|
24
|
+
|
|
22
25
|
:param cascade_create: Sets whether the given user/item should be created if not present in the database.
|
|
23
|
-
|
|
26
|
+
|
|
24
27
|
:param amount: Amount (number) added to cart. The default is 1. For example, if `user-x` adds two `item-y` during a single order (session...), the `amount` should equal 2.
|
|
25
|
-
|
|
28
|
+
|
|
26
29
|
:param price: Price of the added item. If `amount` is greater than 1, the sum of prices of all the items should be given.
|
|
27
|
-
|
|
30
|
+
|
|
28
31
|
:param recomm_id: If this cart addition is based on a recommendation request, `recommId` is the id of the clicked recommendation.
|
|
29
|
-
|
|
32
|
+
|
|
30
33
|
:param additional_data: A dictionary of additional data for the interaction.
|
|
31
|
-
|
|
32
34
|
|
|
33
35
|
"""
|
|
34
36
|
|
|
35
|
-
def __init__(
|
|
36
|
-
|
|
37
|
+
def __init__(
|
|
38
|
+
self,
|
|
39
|
+
user_id: str,
|
|
40
|
+
item_id: str,
|
|
41
|
+
timestamp: Union[str, int, datetime] = DEFAULT,
|
|
42
|
+
cascade_create: bool = DEFAULT,
|
|
43
|
+
amount: float = DEFAULT,
|
|
44
|
+
price: float = DEFAULT,
|
|
45
|
+
recomm_id: str = DEFAULT,
|
|
46
|
+
additional_data: dict = DEFAULT,
|
|
47
|
+
):
|
|
48
|
+
super().__init__(
|
|
49
|
+
path="/cartadditions/", method="post", timeout=3000, ensure_https=False
|
|
50
|
+
)
|
|
37
51
|
self.user_id = user_id
|
|
38
52
|
self.item_id = item_id
|
|
39
53
|
self.timestamp = timestamp
|
|
@@ -48,20 +62,21 @@ class AddCartAddition(Request):
|
|
|
48
62
|
Values of body parameters as a dictionary (name of parameter: value of the parameter).
|
|
49
63
|
"""
|
|
50
64
|
p = dict()
|
|
51
|
-
p[
|
|
52
|
-
p[
|
|
65
|
+
p["userId"] = serialize_to_json(self.user_id)
|
|
66
|
+
p["itemId"] = serialize_to_json(self.item_id)
|
|
53
67
|
if self.timestamp is not DEFAULT:
|
|
54
|
-
p[
|
|
68
|
+
p["timestamp"] = serialize_to_json(self.timestamp)
|
|
55
69
|
if self.cascade_create is not DEFAULT:
|
|
56
|
-
p[
|
|
70
|
+
p["cascadeCreate"] = serialize_to_json(self.cascade_create)
|
|
57
71
|
if self.amount is not DEFAULT:
|
|
58
|
-
p[
|
|
72
|
+
p["amount"] = serialize_to_json(self.amount)
|
|
59
73
|
if self.price is not DEFAULT:
|
|
60
|
-
p[
|
|
74
|
+
p["price"] = serialize_to_json(self.price)
|
|
61
75
|
if self.recomm_id is not DEFAULT:
|
|
62
|
-
p[
|
|
76
|
+
p["recommId"] = serialize_to_json(self.recomm_id)
|
|
63
77
|
if self.additional_data is not DEFAULT:
|
|
64
|
-
p[
|
|
78
|
+
p["additionalData"] = serialize_to_json(self.additional_data)
|
|
79
|
+
|
|
65
80
|
return p
|
|
66
81
|
|
|
67
82
|
def get_query_parameters(self) -> dict:
|
|
@@ -69,4 +84,5 @@ class AddCartAddition(Request):
|
|
|
69
84
|
Values of query parameters as a dictionary (name of parameter: value of the parameter).
|
|
70
85
|
"""
|
|
71
86
|
params = dict()
|
|
87
|
+
|
|
72
88
|
return params
|