neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/42155?usp=email )
Change subject: esim/http_json_api.py: support text/plain response Content-Type ......................................................................
esim/http_json_api.py: support text/plain response Content-Type
Allow returning text/plain Content-Types as 'data' output argument.
So far, all the esim/http_json_api functions require a JSON response. However, a specific vendor has a list function where the request is JSON but the response is text/plain CSV data. Allow and return in a dict.
Change-Id: Iba6e4cef1048b376050a435a900c0f395655a790 --- M pySim/esim/http_json_api.py 1 file changed, 7 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/55/42155/1
diff --git a/pySim/esim/http_json_api.py b/pySim/esim/http_json_api.py index cd95e0d..c268ce6 100644 --- a/pySim/esim/http_json_api.py +++ b/pySim/esim/http_json_api.py @@ -383,14 +383,18 @@ # SGP.22, section 6.5.1) if response.status_code != self.api_func.expected_http_status: raise HttpStatusError(response) - if response.content and not response.headers.get('Content-Type').startswith(req_headers['Content-Type']): - raise HttpHeaderError(response) if not response.headers.get('X-Admin-Protocol', 'gsma/rsp/v2.unknown').startswith('gsma/rsp/v2.'): raise HttpHeaderError(response)
# Decode response and return the result back to the caller if response.content: - output = self.api_func.decode_client(response.json()) + if response.headers.get('Content-Type').startswith('application/json'): + output = self.api_func.decode_client(response.json()) + elif response.headers.get('Content-Type').startswith('text/plain;charset=UTF-8'): + output = { 'data': response.content.decode('utf-8') } + else: + raise HttpHeaderError(f'unimplemented response Content-Type: {response.headers=!r}') + # In case the response contains a header, check it to make sure that the API call was executed successfully # (the presence of the header field is checked by the decode_client method) if 'header' in output: