wcs: explicite wcs response on WcsApiError (#78967)
This commit is contained in:
parent
16fd6aae41
commit
a8bab7fa01
|
@ -4486,12 +4486,16 @@ class Subscription(models.Model):
|
|||
try:
|
||||
result = wcs_api.post_json(obj.wcs_trigger_payload, [], headers=headers)
|
||||
except WcsApiError as e:
|
||||
wcs_response = getattr(e.args[2], 'response', None)
|
||||
if wcs_response is not None and wcs_response.status_code == 404:
|
||||
if e.request_response is not None and e.request_response.status_code == 404:
|
||||
try:
|
||||
json_response = json.loads(e.request_response.text)
|
||||
except ValueError:
|
||||
self.resource.logger.warning(e)
|
||||
return
|
||||
# stop triggering a removed wcs demand
|
||||
self.resource.logger.info(e)
|
||||
obj.wcs_trigger_date = now()
|
||||
obj.wcs_trigger_response = json.loads(e.args[2].response.text)
|
||||
obj.wcs_trigger_response = json_response
|
||||
obj.save()
|
||||
else:
|
||||
self.resource.logger.warning(e)
|
||||
|
|
|
@ -505,7 +505,7 @@ class SmartRequest(models.Model):
|
|||
result = wcs_api.post_json(self.payload, [], headers=headers)
|
||||
except WcsApiError as e:
|
||||
try:
|
||||
result = json.loads(e.args[3])
|
||||
result = json.loads(e.request_response.text)
|
||||
except ValueError:
|
||||
return False
|
||||
self.result = result
|
||||
|
|
|
@ -35,7 +35,14 @@ from passerelle.base import signature
|
|||
|
||||
|
||||
class WcsApiError(Exception):
|
||||
pass
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.request_exception = kwargs.pop('request_exception')
|
||||
self.__dict__.update(kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
@property
|
||||
def request_response(self):
|
||||
return getattr(self.request_exception, 'response', None)
|
||||
|
||||
|
||||
class JSONFile:
|
||||
|
@ -573,7 +580,7 @@ class WcsApi:
|
|||
response.raise_for_status()
|
||||
except requests.RequestException as e:
|
||||
content = getattr(getattr(e, 'response', None), 'content', None)
|
||||
raise WcsApiError('GET request failed', final_url, e, content)
|
||||
raise WcsApiError('GET request failed', final_url, e, content, request_exception=e)
|
||||
else:
|
||||
try:
|
||||
return response.json()
|
||||
|
@ -600,7 +607,7 @@ class WcsApi:
|
|||
response.raise_for_status()
|
||||
except requests.RequestException as e:
|
||||
content = getattr(getattr(e, 'response', None), 'content', None)
|
||||
raise WcsApiError('POST request failed', final_url, e, content)
|
||||
raise WcsApiError('POST request failed', final_url, e, content, request_exception=e)
|
||||
else:
|
||||
try:
|
||||
return response.json()
|
||||
|
|
|
@ -11371,6 +11371,19 @@ def test_trigger_wcs_api_error(family_service, activity_service, wcs_service, co
|
|||
assert subscription.trigger_status() == 'triggering'
|
||||
assert subscription.wcs_trigger_response is None
|
||||
|
||||
# bad wcs 404 response
|
||||
wcs_service.add(
|
||||
responses.POST,
|
||||
'https://wcs.example.com/api/forms/exemple-inscription-loisirs-1/12/hooks/update_subscription/',
|
||||
body='not a json content',
|
||||
status=404,
|
||||
)
|
||||
con.hourly()
|
||||
assert len([x for x in wcs_service.calls if '/hooks/' in x.request.url]) == 4
|
||||
subscription = con.subscription_set.get(wcs_form_number='13-12')
|
||||
assert subscription.trigger_status() == 'triggering'
|
||||
assert subscription.wcs_trigger_response is None
|
||||
|
||||
# stop triggering a removed wcs demand
|
||||
wcs_service.add(
|
||||
responses.POST,
|
||||
|
@ -11379,7 +11392,7 @@ def test_trigger_wcs_api_error(family_service, activity_service, wcs_service, co
|
|||
status=404,
|
||||
)
|
||||
con.hourly()
|
||||
assert len([x for x in wcs_service.calls if '/hooks/' in x.request.url]) == 4
|
||||
assert len([x for x in wcs_service.calls if '/hooks/' in x.request.url]) == 5
|
||||
subscription = con.subscription_set.get(wcs_form_number='13-12')
|
||||
assert subscription.trigger_status() == 'triggered'
|
||||
assert subscription.wcs_trigger_response == {'err': 1, 'err_class': 'Page non trouvée', 'err_desc': None}
|
||||
|
|
Loading…
Reference in New Issue