Skip to content

Commit

Permalink
wait_for_publication_status optionally raises if incomplete
Browse files Browse the repository at this point in the history
  • Loading branch information
jirik committed Nov 22, 2023
1 parent 18dec68 commit d954c1a
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 13 deletions.
1 change: 1 addition & 0 deletions src/layman/error_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,5 @@
52: (400, 'GeoServer HTTP or connection error'),
53: (500, 'Error when publishing on GeoServer. It happens for example for raster files with wrong explicit CRS.'),
54: (400, 'Wrong header value'),
55: (400, 'Publication is not complete'), # raised by process_client only
}
6 changes: 4 additions & 2 deletions src/layman/layer/client_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ def test_post_layers_chunk(browser):
try:
process_client.wait_for_publication_status(WORKSPACE,
process_client.LAYER_TYPE,
LAYERNAME)
LAYERNAME,
raise_if_not_complete=True)
except Exception as exc:
browser.save_screenshot('/code/tmp/artifacts/client-post-layers-2.5.png')
raise exc
Expand Down Expand Up @@ -171,7 +172,8 @@ def test_patch_layer_chunk(browser):
try:
process_client.wait_for_publication_status(WORKSPACE,
process_client.LAYER_TYPE,
LAYERNAME)
LAYERNAME,
raise_if_not_complete=True)
except Exception as exc:
browser.save_screenshot('/code/tmp/artifacts/client-patch-layers-3.5.png')
raise exc
Expand Down
8 changes: 5 additions & 3 deletions src/layman/publication_relation/layer_map_relation_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@


def assert_map_thumbnail(workspace, map, expected_thumbnail_path):
process_client.wait_for_publication_status(workspace, process_client.MAP_TYPE, map)
process_client.wait_for_publication_status(workspace, process_client.MAP_TYPE, map, raise_if_not_complete=True)
with app.app_context():
thumbnail_path = thumbnail.get_map_thumbnail_path(workspace, map)
diffs = test_util.compare_images(expected_thumbnail_path, thumbnail_path)
Expand All @@ -34,12 +34,14 @@ def test_map_refresh_after_layer_change():
# Test refresh map thumbnail after layer WFS-T query
data_xml = data_wfs.get_wfs20_insert_points(workspace, layer, )
process_client.post_wfst(data_xml)
process_client.wait_for_publication_status(workspace, process_client.LAYER_TYPE, layer)
process_client.wait_for_publication_status(workspace, process_client.LAYER_TYPE, layer,
raise_if_not_complete=True)
assert_map_thumbnail(workspace, map, f'/code/test_tools/data/thumbnail/map_with_internal_layer_basic_after_wfst.png')

# Test refresh map thumbnail after patch layer
process_client.patch_workspace_layer(workspace, layer, file_paths=['sample/layman.layer/small_layer.geojson'])
process_client.wait_for_publication_status(workspace, process_client.LAYER_TYPE, layer)
process_client.wait_for_publication_status(workspace, process_client.LAYER_TYPE, layer,
raise_if_not_complete=True)
assert_map_thumbnail(workspace, map, f'/code/test_tools/data/thumbnail/map_with_internal_layer_basic.png')

process_client.delete_workspace_map(workspace, map)
Expand Down
3 changes: 2 additions & 1 deletion src/layman/requests_concurrency_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ def test_patch_after_feature_change_concurrency(publication_type):
lock = redis.get_publication_lock(workspace, publication_type, publication)
assert lock == common_const.PUBLICATION_LOCK_FEATURE_CHANGE

process_client.wait_for_publication_status(workspace, publication_type, publication)
process_client.wait_for_publication_status(workspace, publication_type, publication,
raise_if_not_complete=True)
queue = celery.get_run_after_chain_queue(workspace, publication_type, publication)
assert not queue, queue
lock = redis.get_publication_lock(workspace, publication_type, publication)
Expand Down
28 changes: 24 additions & 4 deletions test_tools/process_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ def wait_for_rest(url, max_attempts, sleeping_time, check_response, headers=None
if attempts > max_attempts:
logger.error(f"r.status_code={response.status_code}\nrltest={response.text}")
raise Exception('Max attempts reached!')
return response


def raise_layman_error(response, status_codes_to_skip=None):
Expand All @@ -132,6 +133,20 @@ def raise_layman_error(response, status_codes_to_skip=None):
assert 'Deprecation' not in response.headers, f'This is deprecated URL! Use new one. headers={response.headers}'


def raise_if_not_complete_status(response):
resp_json = response.json()
status = resp_json.get('layman_metadata', {}).get('publication_status')
if status != 'COMPLETE':
failed_source_key = next((k for k, v in resp_json.items() if isinstance(v, dict) and v.get('status') == 'FAILURE'), None)
if failed_source_key and resp_json[failed_source_key].get('error').get('code'):
failed_source = resp_json[failed_source_key]
error_desc = failed_source['error']
raise LaymanError(error_desc['code'],
error_desc.get('detail'),
sub_code=error_desc.get('sub_code'))
raise LaymanError(55, data=resp_json)


def upload_file_chunks(publication_type,
workspace,
name,
Expand Down Expand Up @@ -281,7 +296,8 @@ def patch_workspace_publication(publication_type,
file_paths, )

if not do_not_upload_chunks:
wait_for_publication_status(workspace, publication_type, name, check_response_fn=check_response_fn, headers=headers)
wait_for_publication_status(workspace, publication_type, name, check_response_fn=check_response_fn,
headers=headers, raise_if_not_complete=True)
wfs.clear_cache(workspace)
wms.clear_cache(workspace)
if temp_dir:
Expand Down Expand Up @@ -440,7 +456,8 @@ def publish_workspace_publication(publication_type,
file_paths, )

if not do_not_upload_chunks:
wait_for_publication_status(workspace, publication_type, name, check_response_fn=check_response_fn, headers=headers)
wait_for_publication_status(workspace, publication_type, name, check_response_fn=check_response_fn,
headers=headers, raise_if_not_complete=True)
if temp_dir:
shutil.rmtree(temp_dir)
return response.json()[0]
Expand Down Expand Up @@ -661,14 +678,17 @@ def check_publication_status(response):
return current_status in {'COMPLETE', 'INCOMPLETE'}


def wait_for_publication_status(workspace, publication_type, publication, *, check_response_fn=None, headers=None,):
def wait_for_publication_status(workspace, publication_type, publication, *, check_response_fn=None, headers=None,
raise_if_not_complete=False):
publication_type_def = PUBLICATION_TYPES_DEF[publication_type]
with app.app_context():
url = url_for(publication_type_def.get_workspace_publication_url,
workspace=workspace,
**{publication_type_def.url_param_name: publication})
check_response_fn = check_response_fn or check_publication_status
wait_for_rest(url, 60, 0.5, check_response=check_response_fn, headers=headers)
response = wait_for_rest(url, 60, 0.5, check_response=check_response_fn, headers=headers)
if raise_if_not_complete:
raise_if_not_complete_status(response)


def patch_after_feature_change(workspace, publ_type, name):
Expand Down
3 changes: 2 additions & 1 deletion test_tools/wfs_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,5 @@ def post_wfst(workspace, publ_type, name,
process_client.post_wfst(data_xml, headers=request_headers, url=request_url, workspace=request_workspace)

if wait_for_update:
process_client.wait_for_publication_status(workspace, publ_type, name, headers=request_headers)
process_client.wait_for_publication_status(workspace, publ_type, name, headers=request_headers,
raise_if_not_complete=True)
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ def test_new_attribute(self, layer: Publication, rest_args, params, parametrizat
process_client.post_wfst(wfst_data, headers=AUTHN_HEADERS, workspace=workspace)
for layer_name, _ in new_attributes:
process_client.wait_for_publication_status(workspace, self.publication_type, layer_name,
headers=AUTHN_HEADERS)
headers=AUTHN_HEADERS, raise_if_not_complete=True)
assert_publ_util.is_publication_valid_and_complete(layer)

# assert that new attributes are present
Expand Down
3 changes: 2 additions & 1 deletion tests/dynamic_data/publications/layer_wfst/refresh_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ def test_refresh(self, layer: Publication, rest_args, parametrization: base_test
for wfs_method, exp_bbox, exp_native_bbox, thumbnail_bbox_postfix in wfst_actions:
data_xml = wfs_method(layer.workspace, layer.name, )
process_client.post_wfst(data_xml, workspace=layer.workspace)
process_client.wait_for_publication_status(layer.workspace, process_client.LAYER_TYPE, layer.name)
process_client.wait_for_publication_status(layer.workspace, process_client.LAYER_TYPE, layer.name,
raise_if_not_complete=True)
assert_publ_util.is_publication_valid_and_complete(layer)

assert_util.assert_all_sources_bbox(layer.workspace, layer.name, exp_bbox,
Expand Down

0 comments on commit d954c1a

Please sign in to comment.