Skip to content

Commit 99e4b0e

Browse files
authored
Add enrichment into activity get (#115)
Fixes #114
1 parent 77d8312 commit 99e4b0e

File tree

3 files changed

+66
-2
lines changed

3 files changed

+66
-2
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ client.get_activities(foreign_id_times=[
104104
(foreign_id, activity_time),
105105
])
106106

107+
# Enrich while getting activities
108+
client.get_activities(ids=[activity_id], enrich=True, reactions={"counts": True})
109+
107110
# Update some parts of an activity with activity_partial_update
108111
set = {
109112
'product.name': 'boots',

stream/client.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,10 +352,14 @@ def update_activity(self, activity):
352352
"""
353353
return self.update_activities([activity])
354354

355-
def get_activities(self, ids=None, foreign_id_times=None):
355+
def get_activities(
356+
self, ids=None, foreign_id_times=None, enrich=False, reactions=None, **params
357+
):
356358
"""
357359
Retrieves activities by their ID or foreign_id + time combination
358360
361+
Pass enrich and reactions options for enrichment
362+
359363
ids: list of activity IDs
360364
foreign_id_time: list of tuples (foreign_id, time)
361365
"""
@@ -371,7 +375,13 @@ def get_activities(self, ids=None, foreign_id_times=None):
371375
"At most one of the parameters ids or foreign_id_time must be provided"
372376
)
373377

378+
endpoint = "activities/"
379+
if enrich or reactions is not None:
380+
endpoint = "enrich/" + endpoint
381+
374382
query_params = {}
383+
for key in params:
384+
query_params[key] = params[key]
375385

376386
if ids is not None:
377387
query_params["ids"] = ",".join(ids)
@@ -383,7 +393,18 @@ def get_activities(self, ids=None, foreign_id_times=None):
383393
query_params["foreign_ids"] = ",".join(foreign_ids)
384394
query_params["timestamps"] = ",".join(timestamps)
385395

386-
return self.get("activities/", auth_token, params=query_params)
396+
if reactions is not None and not isinstance(reactions, (dict,)):
397+
raise TypeError("reactions argument should be a dictionary")
398+
399+
if reactions is not None:
400+
if reactions.get("own"):
401+
query_params["withOwnReactions"] = True
402+
if reactions.get("recent"):
403+
query_params["withRecentReactions"] = True
404+
if reactions.get("counts"):
405+
query_params["withReactionCounts"] = True
406+
407+
return self.get(endpoint, auth_token, params=query_params)
387408

388409
def activity_partial_update(
389410
self, id=None, foreign_id=None, time=None, set={}, unset=[]

stream/tests/test_client.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,6 +1159,46 @@ def test_get_activities_full(self):
11591159
self.assertEqual(len(response["results"]), 1)
11601160
self.assertEqual(activity["foreign_id"], response["results"][0]["foreign_id"])
11611161

1162+
def test_get_activities_full_with_enrichment(self):
1163+
dt = datetime.datetime.utcnow()
1164+
fid = "awesome-test"
1165+
1166+
actor = self.c.users.add(str(uuid1()), data={"name": "barry"})
1167+
activity = {
1168+
"actor": self.c.users.create_reference(actor["id"]),
1169+
"object": "09",
1170+
"verb": "tweet",
1171+
"time": dt,
1172+
"foreign_id": fid,
1173+
}
1174+
1175+
feed = getfeed("user", "test_get_activity")
1176+
activity = feed.add_activity(activity)
1177+
1178+
reaction1 = self.c.reactions.add("like", activity["id"], "liker")
1179+
reaction2 = self.c.reactions.add("reshare", activity["id"], "sharer")
1180+
1181+
def validate(response):
1182+
self.assertEqual(len(response["results"]), 1)
1183+
self.assertEqual(response["results"][0]["id"], activity["id"])
1184+
self.assertEqual(
1185+
response["results"][0]["foreign_id"], activity["foreign_id"]
1186+
)
1187+
self.assertEqual(response["results"][0]["actor"]["data"]["name"], "barry")
1188+
latest_reactions = response["results"][0]["latest_reactions"]
1189+
self.assertEqual(len(latest_reactions), 2)
1190+
self.assertEqual(latest_reactions["like"][0]["id"], reaction1["id"])
1191+
self.assertEqual(latest_reactions["reshare"][0]["id"], reaction2["id"])
1192+
self.assertEqual(
1193+
response["results"][0]["reaction_counts"], {"like": 1, "reshare": 1}
1194+
)
1195+
1196+
reactions = {"recent": True, "counts": True}
1197+
validate(self.c.get_activities(ids=[activity["id"]], reactions=reactions))
1198+
validate(
1199+
self.c.get_activities(foreign_id_times=[(fid, dt)], reactions=reactions)
1200+
)
1201+
11621202
def test_activity_partial_update(self):
11631203
now = datetime.datetime.utcnow()
11641204
feed = self.c.feed("user", uuid4())

0 commit comments

Comments
 (0)