55
66import jwt
77import requests
8- from requests .adapters import HTTPAdapter
8+ from stream .serializer import _datetime_encoder
9+
910from stream import exceptions , serializer
10- from stream .httpsig .requests_auth import HTTPSignatureAuth
1111from 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
1313from stream .httpsig .requests_auth import HTTPSignatureAuth
1414from 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