Skip to content

Commit

Permalink
handele errors returned by the geonetwork POST /rest/records entrypoint
Browse files Browse the repository at this point in the history
  • Loading branch information
mki-c2c committed Jan 31, 2025
1 parent 7647e1e commit 847437b
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 3 deletions.
16 changes: 15 additions & 1 deletion geonetwork/gn_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,21 @@ def put_record_zip(self, zipdata: IO[bytes], overwrite: bool = True) -> Any:
},
)
resp.raise_for_status()
return resp.json()
results = resp.json()
if results["errors"]:
raise ParameterException({"code": 404, "details": results["errors"]})

# take first id of results ids
serial_id = next(iter(results["metadataInfos"].keys()))
metadata_json = self.session.get(
f"{self.api_url}/records/{serial_id}",
headers={"accept": "application/json"},
).json()
uuid = metadata_json["gmd:fileIdentifier"]["gco:CharacterString"]["#text"]
return {
"msg": f"Metadata creation successful ({uuid})",
"detail": results,
}

def get_metadataxml(self, uuid):
headers = {
Expand Down
36 changes: 34 additions & 2 deletions tests/test_gn_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,35 @@ def test_record_zip_unknown_uuid(init_gn):


def test_upload_zip(init_gn):
with requests_mock.Mocker() as m:

def creation_callback(request, context):
assert request.headers.get("accept") == "application/json"
assert request.headers.get('Content-Length') == '184'
assert request.headers.get('X-XSRF-TOKEN') == "dummy_xsrf"
assert 'multipart/form-data' in request.headers.get("Content-Type")
assert "application/zip" in request.text
assert "dummy_zip" in request.text
return {"errors": [], "metadataInfos": {101: {}}}
m.post('http://geonetwork/api/records', json=creation_callback)

def record_callback(request, context):
assert request.headers.get("accept") == "application/json"
assert request.headers.get('X-XSRF-TOKEN') == "dummy_xsrf"
return {
"gmd:fileIdentifier": {
"gco:CharacterString": {
"#text": "pseuso_uuid-1234-55ac"
}
}
}
m.get('http://geonetwork/api/records/101', json=record_callback)
zipdata = BytesIO(b"dummy_zip")
resp = init_gn.put_record_zip(zipdata)
assert resp["msg"] == "Metadata creation successful (pseuso_uuid-1234-55ac)"


def test_upload_zip_fail(init_gn):
with requests_mock.Mocker() as m:

def record_callback(request, context):
Expand All @@ -83,7 +112,10 @@ def record_callback(request, context):
assert 'multipart/form-data' in request.headers.get("Content-Type")
assert "application/zip" in request.text
assert "dummy_zip" in request.text
return {"created": "success"}
return {"errors": ["err1", "err2"]}
m.post('http://geonetwork/api/records', json=record_callback)
zipdata = BytesIO(b"dummy_zip")
init_gn.put_record_zip(zipdata)
with pytest.raises(ParameterException) as err:
init_gn.put_record_zip(zipdata)
assert err.value.args[0]["code"] == 404
assert err.value.args[0]["details"] == ["err1", "err2"]

0 comments on commit 847437b

Please sign in to comment.