Skip to content

Commit e7c599b

Browse files
committed
Added support for view portions
1 parent fe44c50 commit e7c599b

15 files changed

+346
-3
lines changed

recombee_api_client/api_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def send(self, request):
6363

6464
@staticmethod
6565
def __get_http_headers(additional_headers=None):
66-
headers = {'User-Agent': 'recombee-python-api-client/1.4.0'}
66+
headers = {'User-Agent': 'recombee-python-api-client/1.5.0'}
6767
if additional_headers:
6868
headers.update(additional_headers)
6969
return headers

recombee_api_client/api_requests/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@
4949
from recombee_api_client.api_requests.delete_bookmark import DeleteBookmark
5050
from recombee_api_client.api_requests.list_item_bookmarks import ListItemBookmarks
5151
from recombee_api_client.api_requests.list_user_bookmarks import ListUserBookmarks
52+
from recombee_api_client.api_requests.set_view_portion import SetViewPortion
53+
from recombee_api_client.api_requests.delete_view_portion import DeleteViewPortion
54+
from recombee_api_client.api_requests.list_item_view_portions import ListItemViewPortions
55+
from recombee_api_client.api_requests.list_user_view_portions import ListUserViewPortions
5256
from recombee_api_client.api_requests.user_based_recommendation import UserBasedRecommendation
5357
from recombee_api_client.api_requests.item_based_recommendation import ItemBasedRecommendation
5458
from recombee_api_client.api_requests.reset_database import ResetDatabase
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from recombee_api_client.api_requests.request import Request
2+
import uuid
3+
4+
DEFAULT = uuid.uuid4()
5+
6+
class DeleteViewPortion(Request):
7+
"""
8+
The view portions feature is currently experimental.
9+
10+
Deletes an existing view portion specified by (`userId`, `itemId`, `sessionId`) from the database.
11+
12+
"""
13+
14+
def __init__(self, user_id, item_id, session_id=DEFAULT):
15+
"""
16+
Required parameters:
17+
@param user_id: ID of the user who rated the item.
18+
19+
@param item_id: ID of the item which was rated.
20+
21+
22+
Optional parameters:
23+
@param session_id: Identifier of a session.
24+
25+
"""
26+
self.user_id = user_id
27+
self.item_id = item_id
28+
self.session_id = session_id
29+
self.timeout = 1000
30+
self.ensure_https = False
31+
self.method = 'delete'
32+
self.path = "/viewportions/" % ()
33+
34+
def get_body_parameters(self):
35+
"""
36+
Values of body parameters as a dictionary (name of parameter: value of the parameter).
37+
"""
38+
p = dict()
39+
return p
40+
41+
def get_query_parameters(self):
42+
"""
43+
Values of query parameters as a dictionary (name of parameter: value of the parameter).
44+
"""
45+
params = dict()
46+
params['userId'] = self.user_id
47+
params['itemId'] = self.item_id
48+
if self.session_id is not DEFAULT:
49+
params['sessionId'] = self.session_id
50+
return params
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from recombee_api_client.api_requests.request import Request
2+
import uuid
3+
4+
DEFAULT = uuid.uuid4()
5+
6+
class ListItemViewPortions(Request):
7+
"""
8+
The view portions feature is currently experimental.
9+
10+
List all the view portions of an item ever submitted by different users.
11+
12+
"""
13+
14+
def __init__(self, item_id):
15+
"""
16+
Required parameters:
17+
@param item_id: ID of the item of which the view portions are to be listed.
18+
19+
20+
"""
21+
self.item_id = item_id
22+
self.timeout = 100000
23+
self.ensure_https = False
24+
self.method = 'get'
25+
self.path = "/items/%s/viewportions/" % (self.item_id)
26+
27+
def get_body_parameters(self):
28+
"""
29+
Values of body parameters as a dictionary (name of parameter: value of the parameter).
30+
"""
31+
p = dict()
32+
return p
33+
34+
def get_query_parameters(self):
35+
"""
36+
Values of query parameters as a dictionary (name of parameter: value of the parameter).
37+
"""
38+
params = dict()
39+
return params
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from recombee_api_client.api_requests.request import Request
2+
import uuid
3+
4+
DEFAULT = uuid.uuid4()
5+
6+
class ListUserViewPortions(Request):
7+
"""
8+
The view portions feature is currently experimental.
9+
10+
List all the view portions ever submitted by a given user.
11+
12+
"""
13+
14+
def __init__(self, user_id):
15+
"""
16+
Required parameters:
17+
@param user_id: ID of the user whose view portions are to be listed.
18+
19+
"""
20+
self.user_id = user_id
21+
self.timeout = 100000
22+
self.ensure_https = False
23+
self.method = 'get'
24+
self.path = "/users/%s/viewportions/" % (self.user_id)
25+
26+
def get_body_parameters(self):
27+
"""
28+
Values of body parameters as a dictionary (name of parameter: value of the parameter).
29+
"""
30+
p = dict()
31+
return p
32+
33+
def get_query_parameters(self):
34+
"""
35+
Values of query parameters as a dictionary (name of parameter: value of the parameter).
36+
"""
37+
params = dict()
38+
return params
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from recombee_api_client.api_requests.request import Request
2+
import uuid
3+
4+
DEFAULT = uuid.uuid4()
5+
6+
class SetViewPortion(Request):
7+
"""
8+
The view portions feature is currently experimental.
9+
10+
Sets viewed portion of an item (for example a video or article) by a user (at a session).
11+
If you send new request with the same (`userId`, `itemId`, `sessionId`), the portion gets updated.
12+
13+
"""
14+
15+
def __init__(self, user_id, item_id, portion, session_id=DEFAULT, timestamp=DEFAULT, cascade_create=DEFAULT):
16+
"""
17+
Required parameters:
18+
@param user_id: User who viewed a portion of the item
19+
20+
@param item_id: Viewed item
21+
22+
@param portion: Viewed portion of the item (number between 0.0 (viewed nothing) and 1.0 (viewed full item) ).
23+
24+
25+
Optional parameters:
26+
@param session_id: Id of session in which the user viewed the item
27+
28+
@param timestamp: UTC timestamp of the rating as ISO8601-1 pattern or UTC epoch time. The default value is the current time.
29+
30+
@param cascade_create: Sets whether the given user/item should be created if not present in the database.
31+
32+
"""
33+
self.user_id = user_id
34+
self.item_id = item_id
35+
self.portion = portion
36+
self.session_id = session_id
37+
self.timestamp = timestamp
38+
self.cascade_create = cascade_create
39+
self.timeout = 1000
40+
self.ensure_https = False
41+
self.method = 'post'
42+
self.path = "/viewportions/" % ()
43+
44+
def get_body_parameters(self):
45+
"""
46+
Values of body parameters as a dictionary (name of parameter: value of the parameter).
47+
"""
48+
p = dict()
49+
p['userId'] = self.user_id
50+
p['itemId'] = self.item_id
51+
p['portion'] = self.portion
52+
if self.session_id is not DEFAULT:
53+
p['sessionId'] = self.session_id
54+
if self.timestamp is not DEFAULT:
55+
p['timestamp'] = self.timestamp
56+
if self.cascade_create is not DEFAULT:
57+
p['cascadeCreate'] = self.cascade_create
58+
return p
59+
60+
def get_query_parameters(self):
61+
"""
62+
Values of query parameters as a dictionary (name of parameter: value of the parameter).
63+
"""
64+
params = dict()
65+
return params

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
setup(
1212
name='recombee-api-client',
1313

14-
version='1.4.0',
14+
version='1.5.0',
1515

1616
description='Client for Recombee recommendation API',
1717
long_description=long_description,

tests/test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@
116116
suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(ListItemBookmarksTestCase))
117117
from tests.test_cases.test_list_user_bookmarks import ListUserBookmarksTestCase
118118
suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(ListUserBookmarksTestCase))
119+
from tests.test_cases.test_set_view_portion import SetViewPortionTestCase
120+
suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(SetViewPortionTestCase))
121+
from tests.test_cases.test_delete_view_portion import DeleteViewPortionTestCase
122+
suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(DeleteViewPortionTestCase))
123+
from tests.test_cases.test_list_item_view_portions import ListItemViewPortionsTestCase
124+
suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(ListItemViewPortionsTestCase))
125+
from tests.test_cases.test_list_user_view_portions import ListUserViewPortionsTestCase
126+
suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(ListUserViewPortionsTestCase))
119127
from tests.test_cases.test_user_based_recommendation import UserBasedRecommendationTestCase
120128
suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(UserBasedRecommendationTestCase))
121129
from tests.test_cases.test_item_based_recommendation import ItemBasedRecommendationTestCase
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
#
4+
# This file is auto-generated, do not edit
5+
#
6+
7+
from tests.test_cases.recombee_test import RecombeeTest, InteractionsTest
8+
from recombee_api_client.exceptions import ResponseException
9+
from recombee_api_client.api_requests import *
10+
11+
class DeleteViewPortionTest (InteractionsTest ):
12+
13+
def create_request(self,user_id,item_id,session_id=None):
14+
pass
15+
16+
def test_delete_view_portion(self):
17+
18+
# it 'does not fail with existing entity id'
19+
req = self.create_request('user','item')
20+
resp = self.client.send(req)
21+
req = self.create_request('user','item')
22+
try:
23+
self.client.send(req)
24+
self.assertFail()
25+
except ResponseException as ex:
26+
self.assertEqual(ex.status_code, 404)
27+

tests/test_cases/recombee_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ def setUp(self):
4848
AddPurchase('user', 'item', timestamp=0),
4949
AddRating('user', 'item', 1, timestamp=0),
5050
AddCartAddition('user', 'item', timestamp=0),
51-
AddBookmark('user', 'item', timestamp=0)
51+
AddBookmark('user', 'item', timestamp=0),
52+
SetViewPortion('user', 'item', 1, timestamp=0),
5253
])
5354

5455
self.client.send(batch)

0 commit comments

Comments
 (0)