0001-wscall-store-more-informations-after-the-call-9889.patch
tests/test_workflows.py | ||
---|---|---|
494 | 494 |
item.post = False |
495 | 495 |
item.varname = 'xxx' |
496 | 496 |
item.perform(formdata) |
497 |
assert formdata.workflow_data.get('xxx_status') == 200 |
|
498 |
assert formdata.workflow_data.get('xxx_response') == {'foo': 'bar'} |
|
497 |
assert formdata.workflow_data['xxx_status'] == 200 |
|
498 |
assert formdata.workflow_data['xxx_response'] == {'foo': 'bar'} |
|
499 |
assert formdata.workflow_data.get('xxx_time') |
|
500 |
formdata.workflow_data = None |
|
499 | 501 | |
500 | 502 |
item = WebserviceCallStatusItem() |
501 | 503 |
item.url = 'http://remote.example.net' |
... | ... | |
520 | 522 |
assert 'signature=' in http_requests.get_last('url') |
521 | 523 | |
522 | 524 |
item = WebserviceCallStatusItem() |
525 |
item.url = 'http://remote.example.net/204' |
|
526 |
item.post = False |
|
527 |
item.varname = 'xxx' |
|
528 |
item.perform(formdata) |
|
529 |
assert formdata.workflow_data.get('xxx_status') == 204 |
|
530 |
assert formdata.workflow_data.get('xxx_time') |
|
531 |
assert 'xxx_response' not in formdata.workflow_data |
|
532 |
assert 'xxx_error_response' not in formdata.workflow_data |
|
533 |
formdata.workflow_data = None |
|
534 | ||
535 |
item = WebserviceCallStatusItem() |
|
523 | 536 |
item.url = 'http://remote.example.net/404' |
524 | 537 |
item.post = False |
538 |
item.varname = 'xxx' |
|
525 | 539 |
with pytest.raises(AbortActionException): |
526 | 540 |
item.perform(formdata) |
541 |
assert formdata.workflow_data.get('xxx_status') == 404 |
|
542 |
assert formdata.workflow_data.get('xxx_time') |
|
543 |
assert 'xxx_error_response' not in formdata.workflow_data |
|
544 |
formdata.workflow_data = None |
|
545 | ||
546 |
item = WebserviceCallStatusItem() |
|
547 |
item.url = 'http://remote.example.net/404-json' |
|
548 |
item.post = False |
|
549 |
item.varname = 'xxx' |
|
550 |
with pytest.raises(AbortActionException): |
|
551 |
item.perform(formdata) |
|
552 |
assert formdata.workflow_data.get('xxx_status') == 404 |
|
553 |
assert formdata.workflow_data.get('xxx_error_response') == {'err': 1} |
|
554 |
assert formdata.workflow_data.get('xxx_time') |
|
555 |
assert 'xxx_response' not in formdata.workflow_data |
|
556 |
formdata.workflow_data = None |
|
527 | 557 | |
528 | 558 |
item = WebserviceCallStatusItem() |
529 | 559 |
item.url = 'http://remote.example.net/404' |
... | ... | |
563 | 593 |
item.action_on_bad_data = ':stop' |
564 | 594 |
with pytest.raises(AbortActionException): |
565 | 595 |
item.perform(formdata) |
596 |
assert formdata.workflow_data.get('xxx_status') == 200 |
|
597 |
assert 'xxx_response' not in formdata.workflow_data |
|
598 |
assert 'xxx_error_response' not in formdata.workflow_data |
|
599 |
formdata.workflow_data = None |
|
566 | 600 | |
567 | 601 |
item = WebserviceCallStatusItem() |
568 | 602 |
item.url = 'http://remote.example.net/404' |
... | ... | |
582 | 616 |
with pytest.raises(AbortActionException): |
583 | 617 |
item.perform(formdata) |
584 | 618 |
assert formdata.evolution[-1].parts[-1].summary == 'ValueError: No JSON object could be decoded\n' |
619 |
assert formdata.workflow_data.get('xxx_status') == 200 |
|
620 |
assert formdata.workflow_data.get('xxx_time') |
|
621 |
assert 'xxx_error_response' not in formdata.workflow_data |
|
622 |
formdata.workflow_data = None |
|
585 | 623 | |
586 | 624 | |
587 | 625 |
def test_timeout(pub): |
tests/utilities.py | ||
---|---|---|
216 | 216 |
'timeout': timeout}) |
217 | 217 | |
218 | 218 |
status, data = { |
219 |
'http://remote.example.net/204': (204, None), |
|
219 | 220 |
'http://remote.example.net/404': (404, 'page not found'), |
221 |
'http://remote.example.net/404-json': (404, '{"err": 1}'), |
|
220 | 222 |
'http://remote.example.net/500': (500, 'internal server error'), |
221 | 223 |
'http://remote.example.net/json': (200, '{"foo": "bar"}'), |
222 | 224 |
'http://remote.example.net/xml': (200, '<?xml version="1.0"><foo/>'), |
wcs/wf/wscall.py | ||
---|---|---|
14 | 14 |
# You should have received a copy of the GNU General Public License |
15 | 15 |
# along with this program; if not, see <http://www.gnu.org/licenses/>. |
16 | 16 | |
17 |
import datetime |
|
17 | 18 |
import json |
18 | 19 |
import sys |
19 | 20 |
import traceback |
... | ... | |
177 | 178 |
exc_info=sys.exc_info()) |
178 | 179 | |
179 | 180 |
if self.varname: |
180 |
workflow_data = {'%s_status' % self.varname: status} |
|
181 |
if status == 200: |
|
181 |
workflow_data = { |
|
182 |
'%s_status' % self.varname: status, |
|
183 |
'%s_time' % self.varname: datetime.datetime.now().isoformat(), |
|
184 |
} |
|
185 |
if status in (204, 205): |
|
186 |
pass # not returning any content |
|
187 |
elif (status // 100) == 2: |
|
182 | 188 |
try: |
183 | 189 |
d = json_loads(data) |
184 | 190 |
except (ValueError, TypeError) as e: |
191 |
formdata.update_workflow_data(workflow_data) |
|
192 |
formdata.store() |
|
185 | 193 |
self.action_on_error(self.action_on_bad_data, formdata, |
186 | 194 |
response, data=data, exc_info=sys.exc_info()) |
187 | 195 |
else: |
... | ... | |
190 | 198 |
formdata.id_display = d.get('data', {}).get('display_id') |
191 | 199 |
elif d.get('display_id'): |
192 | 200 |
formdata.id_display = d.get('display_id') |
201 |
else: # on error, record data if it is JSON |
|
202 |
try: |
|
203 |
d = json_loads(data) |
|
204 |
except (ValueError, TypeError) as e: |
|
205 |
pass |
|
206 |
else: |
|
207 |
workflow_data['%s_error_response' % self.varname] = d |
|
193 | 208 |
formdata.update_workflow_data(workflow_data) |
194 | 209 |
formdata.store() |
195 | 210 | |
196 |
- |