Compare commits
21 Commits
e9fcbba3e4
...
ecc80ea82c
Author | SHA1 | Date |
---|---|---|
Nicolas Roche | ecc80ea82c | |
Nicolas Roche | c618d20d5d | |
Nicolas Roche | 13c783debd | |
Nicolas Roche | 6e37b31671 | |
Nicolas Roche | 52f240d7bd | |
Nicolas Roche | 0053be2249 | |
Nicolas Roche | 963351d430 | |
Nicolas Roche | b5b57b5d97 | |
Nicolas Roche | 59a63d266f | |
Nicolas Roche | 7c49ada962 | |
Nicolas Roche | f53fe92ea7 | |
Nicolas Roche | fa198d85fd | |
Nicolas Roche | ec363d3d6b | |
Nicolas Roche | 2ecc216acd | |
Nicolas Roche | e96ccbffe0 | |
Nicolas Roche | a6e3844f98 | |
Nicolas Roche | b206faec40 | |
Nicolas Roche | 549b287c0b | |
Nicolas Roche | 1951597cb1 | |
Lauréline Guérin | fb01b9a9ec | |
Lauréline Guérin | 468e5309a9 |
|
@ -16,6 +16,7 @@
|
|||
|
||||
import json
|
||||
import os
|
||||
import zipfile
|
||||
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
@ -417,7 +418,10 @@ class Demand(models.Model):
|
|||
|
||||
path = os.path.join(self.resource.output_dir, zip_file)
|
||||
|
||||
content = get_file_content_from_zip(path, 'message.xml')
|
||||
try:
|
||||
content = get_file_content_from_zip(path, 'message.xml')
|
||||
except zipfile.BadZipFile:
|
||||
raise APIError('zipfile error')
|
||||
element = mdel.etree.fromstring(content)
|
||||
majs = element.findall('ns2:Body/*/*/*/ns2:Maj', namespace)
|
||||
|
||||
|
|
|
@ -215,12 +215,16 @@ class OpenGIS(BaseResource):
|
|||
response = self.requests.get(self.wfs_service_url, params=params)
|
||||
data = []
|
||||
try:
|
||||
response = response.json()
|
||||
json_response = response.json()
|
||||
except ValueError:
|
||||
self.handle_opengis_error(response)
|
||||
# if handle_opengis_error did not raise an error, we raise a generic one
|
||||
raise APIError('OpenGIS Error: unparsable error', data={'content': repr(response.content[:1024])})
|
||||
for feature in response['features']:
|
||||
if not isinstance(json_response, dict) or 'features' not in json_response:
|
||||
raise APIError(
|
||||
'OpenGIS Error: bad result format', data={'content': repr(response.content[:1024])}
|
||||
)
|
||||
for feature in json_response['features']:
|
||||
feature['text'] = feature['properties'].get(property_name)
|
||||
data.append(feature)
|
||||
return {'data': data}
|
||||
|
|
|
@ -551,6 +551,13 @@ def test_get_status(app, setup):
|
|||
assert data['comment'] == 'Dossier accepté'
|
||||
assert Demand.objects.get(demand_id='102-2-AEC-LA').status == 'accepted'
|
||||
|
||||
# bad zipfile
|
||||
filepath = os.path.join(get_resource_base_dir(), 'test', 'outputs', '102-2-aec-la--4.zip')
|
||||
with open(filepath, 'w') as f:
|
||||
f.write(' ')
|
||||
resp = app.get('/mdel/test/status', params={'demand_id': '102-2-AEC-LA'}, status=200)
|
||||
assert resp.json['err_desc'] == 'zipfile error'
|
||||
|
||||
|
||||
def test_get_status_unknown_demand(app, setup):
|
||||
resp = app.get('/mdel/test/status', params={'demand_id': '1-14-ILE-LA'})
|
||||
|
|
|
@ -585,6 +585,34 @@ def test_get_feature_error2(mocked_get, app, connector):
|
|||
assert '<ows:' in result['data']['content']
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_get_feature_bad_result(mocked_get, app, connector):
|
||||
def keyerror(url, **kwargs):
|
||||
if kwargs['params'].get('request') == 'GetCapabilities':
|
||||
assert kwargs['params'].get('service')
|
||||
return tests.utils.FakedResponse(status_code=200, content=FAKE_SERVICE_CAPABILITIES)
|
||||
return tests.utils.FakedResponse(status_code=200, content=json.dumps({}))
|
||||
|
||||
endpoint = tests.utils.generic_endpoint_url('opengis', 'features', slug=connector.slug)
|
||||
mocked_get.side_effect = keyerror
|
||||
resp = app.get(endpoint, params={'type_names': 'ref_metro_limites_communales', 'property_name': 'nom'})
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'OpenGIS Error: bad result format'
|
||||
assert resp.json['data'] == {'content': "'{}'"}
|
||||
|
||||
def typeerror(url, **kwargs):
|
||||
if kwargs['params'].get('request') == 'GetCapabilities':
|
||||
assert kwargs['params'].get('service')
|
||||
return tests.utils.FakedResponse(status_code=200, content=FAKE_SERVICE_CAPABILITIES)
|
||||
return tests.utils.FakedResponse(status_code=200, content=json.dumps([]))
|
||||
|
||||
mocked_get.side_effect = typeerror
|
||||
resp = app.get(endpoint, params={'type_names': 'ref_metro_limites_communales', 'property_name': 'nom'})
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'OpenGIS Error: bad result format'
|
||||
assert resp.json['data'] == {'content': "'[]'"}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"server_responses, version, typename_label",
|
||||
[(geoserver_responses_v1_0_0, '1.0.0', 'typename'), (geoserver_responses, '2.0.0', 'typenames')],
|
||||
|
|
Loading…
Reference in New Issue