1+ from collections import Iterator
2+
13from scrapinghub .client .items import Items
24from scrapinghub .client .jobs import Job
35from 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-
3427def 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
5346def 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
6557def test_job_start_extras (spider ):
@@ -86,75 +78,94 @@ def test_job_start_extras(spider):
8678
8779def 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
9789def 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
10596def 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
115105def 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
123112def 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
134122def 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
142129def 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 )
0 commit comments