Skip to content

Commit d4f79ef

Browse files
authored
Merge pull request #50 from scrapinghub/drop-activity-post-method
Merge Activity post() logic into add()
2 parents 3f723b3 + dfaa469 commit d4f79ef

File tree

3 files changed

+59
-15
lines changed

3 files changed

+59
-15
lines changed

README.rst

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,32 @@ To retrieve all samples for a job::
385385
[1482233732452, 0, 0, 0, 0, 0]
386386

387387

388+
Activity
389+
--------
390+
391+
To retrieve all activity events from a project::
392+
393+
>>> project.activity.iter()
394+
<generator object jldecode at 0x1049ee990>
395+
396+
>>> project.activity.list()
397+
[{'event': 'job:completed', 'job': '123/2/3', 'user': 'jobrunner'},
398+
{'event': 'job:cancelled', 'job': '123/2/3', 'user': 'john'}]
399+
400+
To post a new activity event::
401+
402+
>>> event = {'event': 'job:completed', 'job': '123/2/4', 'user': 'john'}
403+
>>> project.activity.add(event)
404+
405+
Or post multiple events at once::
406+
407+
>>> events = [
408+
{'event': 'job:completed', 'job': '123/2/5', 'user': 'john'},
409+
{'event': 'job:cancelled', 'job': '123/2/6', 'user': 'john'},
410+
]
411+
>>> project.activity.add(events)
412+
413+
388414
Collections
389415
-----------
390416

scrapinghub/client.py

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,24 +1031,41 @@ class Activity(_Proxy):
10311031
10321032
- get only last 2 events from a project::
10331033
1034-
>>> p.activity.list(count=2)
1034+
>>> project.activity.list(count=2)
10351035
[{'event': 'job:completed', 'job': '123/2/3', 'user': 'jobrunner'},
1036-
{'event': 'job:cancelled', 'job': '123/2/3', 'user': 'john'}]
1036+
{'event': 'job:started', 'job': '123/2/3', 'user': 'john'}]
1037+
1038+
- post a new event::
1039+
1040+
>>> event = {'event': 'job:completed',
1041+
'job': '123/2/4',
1042+
'user': 'jobrunner'}
1043+
>>> project.activity.add(event)
1044+
1045+
- post multiple events at once::
1046+
1047+
>>> events = [
1048+
{'event': 'job:completed', 'job': '123/2/5', 'user': 'jobrunner'},
1049+
{'event': 'job:cancelled', 'job': '123/2/6', 'user': 'john'},
1050+
]
1051+
>>> project.activity.add(events)
1052+
10371053
"""
10381054
def __init__(self, *args, **kwargs):
10391055
super(Activity, self).__init__(*args, **kwargs)
10401056
self._proxy_methods([('iter', 'list')])
10411057
self._wrap_iter_methods(['iter'])
10421058

1043-
def add(self, *args, **kwargs):
1044-
entry = dict(*args, **kwargs)
1045-
return self.post(entry)
1046-
1047-
def post(self, _value, **kwargs):
1048-
jobkey = _value.get('job') or kwargs.get('job')
1049-
if jobkey and parse_job_key(jobkey).projectid != self.key:
1050-
raise ValueError('Please use same project id')
1051-
self._origin.post(_value, **kwargs)
1059+
def add(self, values, **kwargs):
1060+
if not isinstance(values, list):
1061+
values = list(values)
1062+
for activity in values:
1063+
if not isinstance(activity, dict):
1064+
raise ValueError("Please pass events as dictionaries")
1065+
jobkey = activity.get('job')
1066+
if jobkey and parse_job_key(jobkey).projectid != self.key:
1067+
raise ValueError('Please use same project id')
1068+
self._origin.post(values, **kwargs)
10521069

10531070

10541071
class Collections(_Proxy):

tests/client/test_proxy.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,15 @@ def test_items_list(spider):
272272
def _add_test_activity(project):
273273
activity = project.activity
274274
jobkey = TEST_PROJECT_ID + '/2/3'
275-
activity.add(event='job:completed', job=jobkey, user='jobrunner')
276-
activity.add(event='job:cancelled', job=jobkey, user='john')
275+
events = [{'event': 'job:completed', 'job': jobkey, 'user': 'jobrunner'},
276+
{'event': 'job:cancelled', 'job': jobkey, 'user': 'john'}]
277+
activity.add(events)
277278

278279

279280
def test_activity_wrong_project(project):
281+
event = {'event': 'job:completed', 'job': '123/1/1', 'user': 'user'}
280282
with pytest.raises(ValueError):
281-
project.activity.add(event='job:completed',
282-
job='123/1/1', user='user')
283+
project.activity.add(event)
283284

284285

285286
def test_activity_iter(project):

0 commit comments

Comments
 (0)