66import jwt
77import requests
88from requests .adapters import HTTPAdapter
9+ from stream .serializer import _datetime_encoder
10+
911from stream import exceptions , serializer
1012from stream .httpsig .requests_auth import HTTPSignatureAuth
1113from stream .signing import sign
@@ -304,9 +306,7 @@ def update_activities(self, activities):
304306 raise TypeError ('Activities parameter should be of type list' )
305307
306308 auth_token = self .create_jwt_token ('activities' , '*' , feed_id = '*' )
307-
308309 data = dict (activities = activities )
309-
310310 return self .post ('activities/' , auth_token , data = data )
311311
312312 def update_activity (self , activity ):
@@ -315,6 +315,34 @@ def update_activity(self, activity):
315315 '''
316316 return self .update_activities ([activity ])
317317
318+ def get_activities (self , ids = None , foreign_id_time = None ):
319+ '''
320+ Retrieves activities by their ID or foreign_id + time combination
321+
322+ ids: list of activity IDs
323+ foreign_id_time: list of tuples (foreign_id, time)
324+ '''
325+ auth_token = self .create_jwt_token ('activities' , '*' , feed_id = '*' )
326+
327+ if ids is None and foreign_id_time is None :
328+ raise TypeError ('One the parameters ids or foreign_id_time must be provided and not None' )
329+
330+ if ids is not None and foreign_id_time is not None :
331+ raise TypeError ('At most one of the parameters ids or foreign_id_time must be provided' )
332+
333+ query_params = {}
334+
335+ if ids is not None :
336+ query_params ['ids' ] = ',' .join (ids )
337+
338+ if foreign_id_time is not None :
339+ foreign_ids , timestamps = zip (* foreign_id_time )
340+ timestamps = map (_datetime_encoder , timestamps )
341+ query_params ['foreign_ids' ] = ',' .join (foreign_ids )
342+ query_params ['timestamps' ] = ',' .join (timestamps )
343+
344+ return self .get ('activities/' , auth_token , params = query_params )
345+
318346 def create_redirect_url (self , target_url , user_id , events ):
319347 '''
320348 Creates a redirect url for tracking the given events in the context
0 commit comments