workflow: do not fail on geolocation server errors (#29168)
This commit is contained in:
parent
c6eaa44951
commit
14e543ccce
|
@ -12,6 +12,7 @@ import zipfile
|
|||
import mock
|
||||
|
||||
from quixote import cleanup, get_response
|
||||
from qommon.errors import ConnectionError
|
||||
from quixote.http_request import Upload as QuixoteUpload
|
||||
from wcs.qommon.http_request import HTTPRequest
|
||||
from qommon.form import *
|
||||
|
@ -2599,6 +2600,20 @@ def test_geolocate_address(pub):
|
|||
item.perform(formdata)
|
||||
assert formdata.geolocations == {}
|
||||
|
||||
# check for nominatim bad json
|
||||
formdata.geolocations = None
|
||||
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
|
||||
http_get_page.return_value = (None, 200, 'bad json', None)
|
||||
item.perform(formdata)
|
||||
assert formdata.geolocations == {}
|
||||
|
||||
# check for nominatim connection error
|
||||
formdata.geolocations = None
|
||||
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
|
||||
http_get_page.side_effect = ConnectionError
|
||||
item.perform(formdata)
|
||||
assert formdata.geolocations == {}
|
||||
|
||||
def test_geolocate_image(pub):
|
||||
formdef = FormDef()
|
||||
formdef.name = 'baz'
|
||||
|
|
|
@ -28,6 +28,7 @@ from quixote import get_publisher
|
|||
|
||||
from qommon import _
|
||||
from qommon import get_logger
|
||||
from qommon.errors import ConnectionError
|
||||
from qommon.form import RadiobuttonsWidget, ComputedExpressionWidget, CheckboxWidget
|
||||
from qommon.misc import http_get_page, normalize_geolocation
|
||||
from wcs.workflows import WorkflowStatusItem, register_item_class
|
||||
|
@ -124,11 +125,16 @@ class GeolocateWorkflowStatusItem(WorkflowStatusItem):
|
|||
url += '&format=json'
|
||||
url += '&accept-language=%s' % (get_publisher().get_site_language() or 'en')
|
||||
|
||||
response, status, data, auth_header = http_get_page(url)
|
||||
if status != 200:
|
||||
get_logger().error('error calling geocoding service [%s]', status)
|
||||
try:
|
||||
response, status, data, auth_header = http_get_page(url, raise_on_http_errors=True)
|
||||
except ConnectionError as e:
|
||||
get_logger().error('error calling geocoding service [%s]', str(e))
|
||||
return
|
||||
try:
|
||||
data = json.loads(data)
|
||||
except ValueError:
|
||||
get_logger().error('non-JSON response from geocoding service')
|
||||
return
|
||||
data = json.loads(data)
|
||||
if len(data) == 0:
|
||||
get_logger().info('error finding location')
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue