dataviz: avoid crash getting statistics from bad provider (#49692)
This commit is contained in:
parent
a4546a919b
commit
8abb71b11c
|
@ -51,10 +51,13 @@ class AppConfig(django.apps.AppConfig):
|
||||||
|
|
||||||
for site_key, site_dict in sites.items():
|
for site_key, site_dict in sites.items():
|
||||||
site_title = site_dict.pop('title', '')
|
site_title = site_dict.pop('title', '')
|
||||||
result = requests.get(
|
response = requests.get(
|
||||||
url, remote_service=site_dict, without_user=True, headers={'accept': 'application/json'}
|
url, remote_service=site_dict, without_user=True, headers={'accept': 'application/json'}
|
||||||
).json()
|
)
|
||||||
|
if response.status_code != 200:
|
||||||
|
continue
|
||||||
|
|
||||||
|
result = response.json()
|
||||||
if isinstance(result, dict):
|
if isinstance(result, dict):
|
||||||
result = result['data'] # detect new api
|
result = result['data'] # detect new api
|
||||||
|
|
||||||
|
|
|
@ -1204,11 +1204,19 @@ def test_dataviz_api_list_statistics(new_api_statistics, settings):
|
||||||
catalog = {'data': [{'url': 'https://stat.com/stats/1/', 'name': 'Test', 'id': 'test'}]}
|
catalog = {'data': [{'url': 'https://stat.com/stats/1/', 'name': 'Test', 'id': 'test'}]}
|
||||||
|
|
||||||
@urlmatch(scheme='https', netloc=r'stat.com', path='/stats/')
|
@urlmatch(scheme='https', netloc=r'stat.com', path='/stats/')
|
||||||
def url_mock(url, request):
|
def server_error(url, request):
|
||||||
return {'content': json.dumps(catalog), 'status_code': 200}
|
return {'content': 'error', 'status_code': 500}
|
||||||
|
|
||||||
appconfig = apps.get_app_config('dataviz')
|
appconfig = apps.get_app_config('dataviz')
|
||||||
with HTTMock(url_mock):
|
with HTTMock(server_error):
|
||||||
|
appconfig.hourly()
|
||||||
|
assert Statistic.objects.count() == statistics_count
|
||||||
|
|
||||||
|
@urlmatch(scheme='https', netloc=r'stat.com', path='/stats/')
|
||||||
|
def success(url, request):
|
||||||
|
return {'content': json.dumps(catalog), 'status_code': 200}
|
||||||
|
|
||||||
|
with HTTMock(success):
|
||||||
appconfig.hourly()
|
appconfig.hourly()
|
||||||
|
|
||||||
assert Statistic.objects.count() == statistics_count + 1
|
assert Statistic.objects.count() == statistics_count + 1
|
||||||
|
|
Loading…
Reference in New Issue