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.
Files changed (108) hide show
  1. recombee_api_client-6.0.0/LICENSE +21 -0
  2. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/PKG-INFO +18 -5
  3. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_client.py +60 -43
  4. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/__init__.py +71 -23
  5. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_bookmark.py +32 -18
  6. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_cart_addition.py +38 -22
  7. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_detail_view.py +41 -20
  8. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_item.py +11 -5
  9. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_item_property.py +34 -25
  10. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_manual_reql_segment.py +28 -16
  11. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_purchase.py +41 -24
  12. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_rating.py +35 -20
  13. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_search_synonym.py +23 -17
  14. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_series.py +16 -7
  15. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_user.py +10 -4
  16. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/add_user_property.py +29 -20
  17. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/batch.py +15 -11
  18. recombee_api_client-6.0.0/recombee_api_client/api_requests/composite_recommendation.py +155 -0
  19. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/create_auto_reql_segmentation.py +37 -21
  20. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/create_manual_reql_segmentation.py +33 -18
  21. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/create_property_based_segmentation.py +36 -20
  22. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_all_search_synonyms.py +8 -2
  23. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_bookmark.py +20 -12
  24. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_cart_addition.py +20 -12
  25. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_detail_view.py +20 -12
  26. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_item.py +16 -7
  27. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_item_property.py +13 -4
  28. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_manual_reql_segment.py +15 -5
  29. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_more_items.py +13 -7
  30. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_purchase.py +20 -12
  31. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_rating.py +20 -12
  32. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_search_synonym.py +14 -5
  33. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_segmentation.py +13 -4
  34. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_series.py +18 -9
  35. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_user.py +14 -5
  36. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_user_property.py +13 -4
  37. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/delete_view_portion.py +17 -11
  38. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_item_property_info.py +13 -4
  39. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_item_values.py +11 -5
  40. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_segmentation.py +13 -4
  41. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_user_property_info.py +13 -4
  42. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/get_user_values.py +11 -5
  43. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/insert_to_series.py +31 -15
  44. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_bookmarks.py +13 -4
  45. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_cart_additions.py +13 -4
  46. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_detail_views.py +13 -4
  47. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_properties.py +11 -2
  48. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_purchases.py +13 -4
  49. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_ratings.py +13 -4
  50. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_item_view_portions.py +14 -5
  51. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_items.py +63 -50
  52. recombee_api_client-6.0.0/recombee_api_client/api_requests/list_scenarios.py +35 -0
  53. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_search_synonyms.py +13 -7
  54. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_segmentations.py +11 -5
  55. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_series.py +8 -2
  56. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_series_items.py +12 -3
  57. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_bookmarks.py +12 -3
  58. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_cart_additions.py +12 -3
  59. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_detail_views.py +12 -3
  60. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_properties.py +11 -2
  61. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_purchases.py +12 -3
  62. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_ratings.py +12 -3
  63. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_user_view_portions.py +13 -4
  64. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/list_users.py +57 -44
  65. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/merge_users.py +26 -12
  66. {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
  67. {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
  68. {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
  69. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_items_to_item.py +254 -146
  70. {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
  71. recombee_api_client-6.0.0/recombee_api_client/api_requests/recommend_items_to_user.py +347 -0
  72. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_next_items.py +25 -16
  73. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/recommend_users_to_item.py +204 -101
  74. recombee_api_client-6.0.0/recombee_api_client/api_requests/recommend_users_to_user.py +326 -0
  75. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/remove_from_series.py +16 -7
  76. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/request.py +1 -0
  77. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/reset_database.py +6 -2
  78. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/search_item_segments.py +74 -53
  79. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/search_items.py +209 -112
  80. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/set_item_values.py +17 -15
  81. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/set_user_values.py +12 -10
  82. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/set_values.py +19 -13
  83. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/set_view_portion.py +51 -23
  84. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_auto_reql_segmentation.py +31 -16
  85. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_manual_reql_segment.py +26 -14
  86. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_manual_reql_segmentation.py +24 -13
  87. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_more_items.py +16 -10
  88. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/api_requests/update_property_based_segmentation.py +31 -16
  89. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/exceptions.py +10 -3
  90. recombee_api_client-6.0.0/recombee_api_client/inputs/__init__.py +5 -0
  91. recombee_api_client-6.0.0/recombee_api_client/inputs/composite_recommendation_stage_parameters.py +374 -0
  92. recombee_api_client-6.0.0/recombee_api_client/inputs/input.py +7 -0
  93. recombee_api_client-6.0.0/recombee_api_client/inputs/logic.py +37 -0
  94. recombee_api_client-6.0.0/recombee_api_client/utils/__init__.py +1 -0
  95. recombee_api_client-6.0.0/recombee_api_client/utils/serialize_to_json.py +9 -0
  96. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/PKG-INFO +18 -5
  97. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/SOURCES.txt +11 -1
  98. recombee_api_client-6.0.0/setup.py +43 -0
  99. recombee_api_client-6.0.0/tests/test.py +475 -0
  100. recombee-api-client-5.0.2/recombee_api_client/api_requests/recommend_items_to_user.py +0 -247
  101. recombee-api-client-5.0.2/recombee_api_client/api_requests/recommend_users_to_user.py +0 -226
  102. recombee-api-client-5.0.2/setup.py +0 -59
  103. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/README.rst +0 -0
  104. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client/__init__.py +0 -0
  105. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/dependency_links.txt +0 -0
  106. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/requires.txt +0 -0
  107. {recombee-api-client-5.0.2 → recombee_api_client-6.0.0}/recombee_api_client.egg-info/top_level.txt +0 -0
  108. {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
1
+ Metadata-Version: 2.4
2
2
  Name: recombee-api-client
3
- Version: 5.0.2
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__(self, database_id: str, token: str, protocol: str = 'https', options: dict = None, region: Region = None):
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 = 'https' if request.ensure_https else self.protocol
59
- uri = protocol + '://' + self.base_uri + uri
67
+ protocol = "https" if request.ensure_https else self.protocol
68
+ uri = protocol + "://" + self.base_uri + uri
60
69
  try:
61
- if request.method == 'put':
70
+ if request.method == "put":
62
71
  return self.__put(request, uri, timeout)
63
- elif request.method == 'get':
72
+ elif request.method == "get":
64
73
  return self.__get(request, uri, timeout)
65
- elif request.method == 'post':
74
+ elif request.method == "post":
66
75
  return self.__post(request, uri, timeout)
67
- elif request.method == 'delete':
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: 'rapi-ap-se.recombee.com',
76
- Region.CA_EAST: 'rapi-ca-east.recombee.com',
77
- Region.EU_WEST: 'rapi-eu-west.recombee.com',
78
- Region.US_WEST: 'rapi-us-west.recombee.com'
79
- }.get(region)
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('Unknown region given')
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('RAPI_URI') or options.get('base_uri')
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('base_uri and region cannot be specified at the same time')
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 'rapi.recombee.com'
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 = {'User-Agent': 'recombee-python-api-client/5.0.2'}
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(uri,
104
- data=json.dumps(request.get_body_parameters()),
105
- headers=self.__get_http_headers({'Content-Type': 'application/json'}),
106
- timeout=timeout)
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(uri,
119
- data=json.dumps(request.get_body_parameters()),
120
- headers=self.__get_http_headers({'Content-Type': 'application/json'}),
121
- timeout=timeout)
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(uri,
127
- data=json.dumps(request.get_body_parameters()),
128
- headers=self.__get_http_headers({'Content-Type': 'application/json'}),
129
- timeout=timeout)
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 = [rqs for rqs in self.__get_list_chunks(batch.requests, self.BATCH_MAX_SIZE)]
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 += '&' if ps.find('?') != -1 else '?'
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 ','.join([quote(str(v)) for v in value])
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 = '/' + self.database_id + req_part
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 + '&hmac_sign=' + sign
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 = '&' if uri.find('?') != -1 else '?'
198
+ res = "&" if uri.find("?") != -1 else "?"
182
199
  res += "hmac_timestamp=%s" % int(time.time())
183
200
  return res
184
201
 
@@ -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 ListItemCartAdditions
43
- from recombee_api_client.api_requests.list_user_cart_additions import ListUserCartAdditions
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 ListItemViewPortions
51
- from recombee_api_client.api_requests.list_user_view_portions import ListUserViewPortions
52
- from recombee_api_client.api_requests.recommend_items_to_user import RecommendItemsToUser
53
- from recombee_api_client.api_requests.recommend_items_to_item import RecommendItemsToItem
54
- from recombee_api_client.api_requests.recommend_items_to_item_segment import RecommendItemsToItemSegment
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 RecommendUsersToUser
57
- from recombee_api_client.api_requests.recommend_users_to_item import RecommendUsersToItem
58
- from recombee_api_client.api_requests.recommend_item_segments_to_user import RecommendItemSegmentsToUser
59
- from recombee_api_client.api_requests.recommend_item_segments_to_item import RecommendItemSegmentsToItem
60
- from recombee_api_client.api_requests.recommend_item_segments_to_item_segment import RecommendItemSegmentsToItemSegment
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 DeleteAllSearchSynonyms
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 CreatePropertyBasedSegmentation
68
- from recombee_api_client.api_requests.update_property_based_segmentation import UpdatePropertyBasedSegmentation
69
- from recombee_api_client.api_requests.create_auto_reql_segmentation import CreateAutoReqlSegmentation
70
- from recombee_api_client.api_requests.update_auto_reql_segmentation import UpdateAutoReqlSegmentation
71
- from recombee_api_client.api_requests.create_manual_reql_segmentation import CreateManualReqlSegmentation
72
- from recombee_api_client.api_requests.update_manual_reql_segmentation import UpdateManualReqlSegmentation
73
- from recombee_api_client.api_requests.add_manual_reql_segment import AddManualReqlSegment
74
- from recombee_api_client.api_requests.update_manual_reql_segment import UpdateManualReqlSegment
75
- from recombee_api_client.api_requests.delete_manual_reql_segment import DeleteManualReqlSegment
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__(self, user_id: str, item_id: str, timestamp: Union[str, int] = DEFAULT, cascade_create: bool = DEFAULT, recomm_id: str = DEFAULT, additional_data: dict = DEFAULT):
32
- super().__init__(path="/bookmarks/", method='post', timeout=3000, ensure_https=False)
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['userId'] = self.user_id
46
- p['itemId'] = self.item_id
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['timestamp'] = self.timestamp
60
+ p["timestamp"] = serialize_to_json(self.timestamp)
49
61
  if self.cascade_create is not DEFAULT:
50
- p['cascadeCreate'] = self.cascade_create
62
+ p["cascadeCreate"] = serialize_to_json(self.cascade_create)
51
63
  if self.recomm_id is not DEFAULT:
52
- p['recommId'] = self.recomm_id
64
+ p["recommId"] = serialize_to_json(self.recomm_id)
53
65
  if self.additional_data is not DEFAULT:
54
- p['additionalData'] = self.additional_data
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__(self, user_id: str, item_id: str, timestamp: Union[str, int] = DEFAULT, cascade_create: bool = DEFAULT, amount: float = DEFAULT, price: float = DEFAULT, recomm_id: str = DEFAULT, additional_data: dict = DEFAULT):
36
- super().__init__(path="/cartadditions/", method='post', timeout=3000, ensure_https=False)
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['userId'] = self.user_id
52
- p['itemId'] = self.item_id
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['timestamp'] = self.timestamp
68
+ p["timestamp"] = serialize_to_json(self.timestamp)
55
69
  if self.cascade_create is not DEFAULT:
56
- p['cascadeCreate'] = self.cascade_create
70
+ p["cascadeCreate"] = serialize_to_json(self.cascade_create)
57
71
  if self.amount is not DEFAULT:
58
- p['amount'] = self.amount
72
+ p["amount"] = serialize_to_json(self.amount)
59
73
  if self.price is not DEFAULT:
60
- p['price'] = self.price
74
+ p["price"] = serialize_to_json(self.price)
61
75
  if self.recomm_id is not DEFAULT:
62
- p['recommId'] = self.recomm_id
76
+ p["recommId"] = serialize_to_json(self.recomm_id)
63
77
  if self.additional_data is not DEFAULT:
64
- p['additionalData'] = self.additional_data
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