Skip to content

Commit 1684048

Browse files
authored
Merge pull request GetStream#81 from GetStream/feature/get-activity-endpoint
add new get activity API endpoint
2 parents 66ca299 + 8b6cf17 commit 1684048

File tree

4 files changed

+623
-556
lines changed

4 files changed

+623
-556
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,14 @@ activity = {
9090
}
9191
user_feed_1.add_activity(activity)
9292

93+
# Retrieve an activity by its ID
94+
client.get_activities(ids=[activity_id])
95+
96+
# Retrieve an activity by the combination of foreign_id and time
97+
client.get_activities(foreign_id_time=[
98+
(foreign_id, activity_time),
99+
])
100+
93101
# Generating tokens for client side usage (JS client)
94102
token = user_feed_1.token
95103
# Javascript client side feed initialization

stream/client.py

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
import jwt
77
import requests
8-
from requests.adapters import HTTPAdapter
8+
from stream.serializer import _datetime_encoder
9+
910
from stream import exceptions, serializer
10-
from stream.httpsig.requests_auth import HTTPSignatureAuth
1111
from stream.signing import sign
12-
from stream.utils import validate_feed_slug, validate_user_id
12+
from stream.utils import validate_feed_slug, validate_user_id, validate_foreign_id_time
1313
from stream.httpsig.requests_auth import HTTPSignatureAuth
1414
from requests import Request
1515

@@ -304,9 +304,7 @@ def update_activities(self, activities):
304304
raise TypeError('Activities parameter should be of type list')
305305

306306
auth_token = self.create_jwt_token('activities', '*', feed_id='*')
307-
308307
data = dict(activities=activities)
309-
310308
return self.post('activities/', auth_token, data=data)
311309

312310
def update_activity(self, activity):
@@ -315,6 +313,35 @@ def update_activity(self, activity):
315313
'''
316314
return self.update_activities([activity])
317315

316+
def get_activities(self, ids=None, foreign_id_time=None):
317+
'''
318+
Retrieves activities by their ID or foreign_id + time combination
319+
320+
ids: list of activity IDs
321+
foreign_id_time: list of tuples (foreign_id, time)
322+
'''
323+
auth_token = self.create_jwt_token('activities', '*', feed_id='*')
324+
325+
if ids is None and foreign_id_time is None:
326+
raise TypeError('One the parameters ids or foreign_id_time must be provided and not None')
327+
328+
if ids is not None and foreign_id_time is not None:
329+
raise TypeError('At most one of the parameters ids or foreign_id_time must be provided')
330+
331+
query_params = {}
332+
333+
if ids is not None:
334+
query_params['ids'] = ','.join(ids)
335+
336+
if foreign_id_time is not None:
337+
validate_foreign_id_time(foreign_id_time)
338+
foreign_ids, timestamps = zip(*foreign_id_time)
339+
timestamps = map(_datetime_encoder, timestamps)
340+
query_params['foreign_ids'] = ','.join(foreign_ids)
341+
query_params['timestamps'] = ','.join(timestamps)
342+
343+
return self.get('activities/', auth_token, params=query_params)
344+
318345
def create_redirect_url(self, target_url, user_id, events):
319346
'''
320347
Creates a redirect url for tracking the given events in the context

0 commit comments

Comments
 (0)