Skip to content

Commit 3d38150

Browse files
committed
Drop job.purge, fix tests
1 parent 82adab5 commit 3d38150

File tree

5 files changed

+65
-67
lines changed

5 files changed

+65
-67
lines changed

scrapinghub/client/jobs.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -413,18 +413,6 @@ def cancel(self):
413413
"""
414414
self._project.jobq.request_cancel(self)
415415

416-
def purge(self):
417-
"""Delete job and expire its local metadata.
418-
419-
Usage::
420-
421-
>>> job.purge()
422-
>>> job.metadata.get('state')
423-
'deleted'
424-
"""
425-
self.delete()
426-
self.metadata.expire()
427-
428416

429417
class JobMeta(_MappingProxy):
430418
"""Class representing job metadata.

tests/client/conftest.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,9 @@ def setup_vcrpy(request, project):
141141

142142

143143
def remove_all_jobs(project):
144-
for k in list(project.settings.keys()):
144+
for k, _ in project.settings.iter():
145145
if k != 'botgroups':
146-
del project.settings[k]
147-
project.settings.save()
146+
project.settings.delete(k)
148147

149148
# Cleanup JobQ: run 2 times to ensure we covered all jobs
150149
for queuename in ('pending', 'running', 'finished')*2:

tests/client/test_job.py

Lines changed: 60 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from collections import Iterator
2+
13
from scrapinghub.client.items import Items
24
from scrapinghub.client.jobs import Job
35
from scrapinghub.client.jobs import JobMeta
@@ -22,15 +24,6 @@ def test_job_base(client, spider):
2224
assert isinstance(job.metadata, JobMeta)
2325

2426

25-
def test_job_update_metadata(spider):
26-
job = spider.jobs.schedule(meta={'meta1': 'data1'})
27-
assert job.metadata['meta1'] == 'data1'
28-
job.update_metadata(meta1='data2', meta2='data3')
29-
job.metadata.expire()
30-
assert job.metadata['meta1'] == 'data2'
31-
assert job.metadata['meta2'] == 'data3'
32-
33-
3427
def test_job_update_tags(spider):
3528
job1 = spider.jobs.schedule(spider_args={'subid': 'tags-1'},
3629
add_tag=['tag1'])
@@ -39,27 +32,26 @@ def test_job_update_tags(spider):
3932
# FIXME the endpoint normalises tags so it's impossible to send tags
4033
# having upper-cased symbols, let's add more tests when it's fixed
4134
assert job1.update_tags(add=['tag11', 'tag12']) == 1
42-
assert job1.metadata.liveget('tags') == ['tag1', 'tag11', 'tag12']
35+
assert job1.metadata.get('tags') == ['tag1', 'tag11', 'tag12']
4336

4437
assert job1.update_tags(remove=['tag1', 'tagx']) == 1
45-
assert job1.metadata.liveget('tags') == ['tag11', 'tag12']
38+
assert job1.metadata.get('tags') == ['tag11', 'tag12']
4639

4740
# assert that 2nd job tags weren't changed
48-
assert job2.metadata.liveget('tags') == ['tag2']
41+
assert job2.metadata.get('tags') == ['tag2']
4942
# FIXME adding and removing tags at the same time doesn't work neither:
5043
# remove-tag field is ignored if there's non-void add-tag field
5144

5245

5346
def test_job_start(spider):
5447
job = spider.jobs.schedule()
55-
assert job.metadata['state'] == 'pending'
48+
assert job.metadata.get('state') == 'pending'
5649
job.start()
57-
job.metadata.expire()
58-
assert job.metadata['state'] == 'running'
59-
assert isinstance(job.metadata['pending_time'], int)
60-
assert isinstance(job.metadata['running_time'], int)
61-
assert job.metadata['spider'] == TEST_SPIDER_NAME
62-
assert job.metadata['priority'] == 2
50+
assert job.metadata.get('state') == 'running'
51+
assert isinstance(job.metadata.get('pending_time'), int)
52+
assert isinstance(job.metadata.get('running_time'), int)
53+
assert job.metadata.get('spider') == TEST_SPIDER_NAME
54+
assert job.metadata.get('priority') == 2
6355

6456

6557
def test_job_start_extras(spider):
@@ -86,75 +78,94 @@ def test_job_start_extras(spider):
8678

8779
def test_job_update(spider):
8880
job = spider.jobs.schedule()
89-
assert job.metadata['state'] == 'pending'
81+
assert job.metadata.get('state') == 'pending'
9082
job.update(state='running', foo='bar')
9183

9284
job = spider.jobs.get(job.key)
93-
assert job.metadata['state'] == 'running'
94-
assert job.metadata['foo'] == 'bar'
85+
assert job.metadata.get('state') == 'running'
86+
assert job.metadata.get('foo') == 'bar'
9587

9688

9789
def test_job_cancel_pending(spider):
9890
job = spider.jobs.schedule()
99-
assert job.metadata['state'] == 'pending'
100-
job.metadata.expire()
91+
assert job.metadata.get('state') == 'pending'
10192
job.cancel()
102-
assert job.metadata['state'] == 'finished'
93+
assert job.metadata.get('state') == 'finished'
10394

10495

10596
def test_job_cancel_running(spider):
10697
job = spider.jobs.schedule()
10798
job.start()
108-
assert job.metadata['state'] == 'running'
109-
job.metadata.expire()
99+
assert job.metadata.get('state') == 'running'
110100
job.cancel()
111101
# still running as should be stopped by scheduler
112-
assert job.metadata['state'] == 'running'
102+
assert job.metadata.get('state') == 'running'
113103

114104

115105
def test_job_finish(spider):
116106
job = spider.jobs.schedule()
117-
assert job.metadata['state'] == 'pending'
118-
job.metadata.expire()
107+
assert job.metadata.get('state') == 'pending'
119108
job.finish()
120109
assert job.metadata.get('state') == 'finished'
121110

122111

123112
def test_job_finish_with_metadata(spider):
124113
job = spider.jobs.schedule(meta={'meta1': 'val1', 'meta2': 'val3'})
125-
assert job.metadata['state'] == 'pending'
126-
job.metadata.expire()
114+
assert job.metadata.get('state') == 'pending'
127115
job.finish(meta2='val2', meta3='val3')
128116
assert job.metadata.get('state') == 'finished'
129-
assert job.metadata['meta1'] == 'val1'
130-
assert job.metadata['meta2'] == 'val2'
131-
assert job.metadata['meta3'] == 'val3'
117+
assert job.metadata.get('meta1') == 'val1'
118+
assert job.metadata.get('meta2') == 'val2'
119+
assert job.metadata.get('meta3') == 'val3'
132120

133121

134122
def test_job_delete(spider):
135123
job = spider.jobs.schedule(meta={'state': 'finished'})
136-
assert job.metadata['state'] == 'finished'
137-
job.metadata.expire()
124+
assert job.metadata.get('state') == 'finished'
138125
job.delete()
139126
assert job.metadata.get('state') == 'deleted'
140127

141128

142129
def test_job_delete_with_metadata(spider):
143130
meta = {'state': 'finished', 'meta1': 'val1', 'meta2': 'val3'}
144131
job = spider.jobs.schedule(meta=meta)
145-
assert job.metadata['state'] == 'finished'
146-
job.metadata.expire()
132+
assert job.metadata.get('state') == 'finished'
147133
job.delete(meta2='val2', meta3='val3')
148134
assert job.metadata.get('state') == 'deleted'
149-
assert job.metadata['meta1'] == 'val1'
150-
assert job.metadata['meta2'] == 'val2'
151-
assert job.metadata['meta3'] == 'val3'
135+
assert job.metadata.get('meta1') == 'val1'
136+
assert job.metadata.get('meta2') == 'val2'
137+
assert job.metadata.get('meta3') == 'val3'
152138

153139

154-
def test_job_purge(spider):
155-
meta = {'state': 'finished', 'meta1': 'val1'}
156-
job = spider.jobs.schedule(meta=meta)
157-
assert job.metadata['state'] == 'finished'
158-
job.purge()
159-
assert job.metadata['state'] == 'deleted'
160-
assert job.metadata['meta1'] == 'val1'
140+
def test_metadata_update(spider):
141+
job = spider.jobs.schedule(meta={'meta1': 'data1'})
142+
assert job.metadata.get('meta1') == 'data1'
143+
job.metadata.update({'meta1': 'data2', 'meta2': 'data3'})
144+
assert job.metadata.get('meta1') == 'data2'
145+
assert job.metadata.get('meta2') == 'data3'
146+
147+
148+
def test_metadata_set(spider):
149+
job = spider.jobs.schedule(meta={'meta1': 'data1'})
150+
assert job.metadata.get('meta1') == 'data1'
151+
job.metadata.set('meta1', 'data2')
152+
job.metadata.set('meta2', 123)
153+
assert job.metadata.get('meta1') == 'data2'
154+
assert job.metadata.get('meta2') == 123
155+
156+
157+
def test_metadata_delete(spider):
158+
job = spider.jobs.schedule(meta={'meta1': 'data1', 'meta2': 'data2'})
159+
job.metadata.delete('meta1')
160+
assert job.metadata.get('meta1') is None
161+
assert job.metadata.get('meta2') == 'data2'
162+
163+
164+
def test_metadata_iter_list(spider):
165+
job = spider.jobs.schedule(meta={'meta1': 'data1', 'meta2': 'data2'})
166+
meta_iter = job.metadata.iter()
167+
assert isinstance(meta_iter, Iterator)
168+
meta_list = job.metadata.list()
169+
assert ('meta1', 'data1') in meta_list
170+
assert ('meta2', 'data2') in meta_list
171+
assert meta_list == list(meta_iter)

tests/client/test_projects.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def test_project_jobs_schedule(project):
162162
assert isinstance(job0, Job)
163163
validate_default_meta(job0.metadata, state='pending')
164164
assert isinstance(job0.metadata.get('pending_time'), int)
165-
assert job0.metadata['pending_time'] > 0
165+
assert job0.metadata.get('pending_time') > 0
166166
assert job0.metadata.get('scheduled_by')
167167

168168
# running the same spider with same args leads to duplicate error
@@ -181,7 +181,7 @@ def test_project_jobs_schedule(project):
181181
assert meta.get('meta1') == 'val1'
182182
assert meta.get('spider_args') == {'arg1': 'val1', 'arg2': 'val2'}
183183
assert isinstance(meta.get('running_time'), int)
184-
assert meta['running_time'] > 0
184+
assert meta.get('running_time') > 0
185185
assert meta.get('started_by')
186186

187187

tests/client/test_spiders.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def test_spider_jobs_schedule(spider):
156156
assert job1.metadata.get('meta1') == 'val1'
157157
assert job1.metadata.get('spider_args') == {'arg1': 'val1', 'arg2': 'val2'}
158158
assert isinstance(job1.metadata.get('running_time'), int)
159-
assert job1.metadata['running_time'] > 0
159+
assert job1.metadata.get('running_time') > 0
160160
assert job1.metadata.get('started_by')
161161

162162

0 commit comments

Comments
 (0)