laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/pysim/+/37496?usp=email )

Change subject: pySim.esim.http_json_api: 'header' is not always present in 
response
......................................................................

pySim.esim.http_json_api: 'header' is not always present in response

For example, the ES9+ handleNotification function is defined with an
empty response body, so we cannot unconditionally assume that every HTTP
response will contain a JSON "header" value.

Change-Id: Ia3c5703b746c1eba91f85f8545f849a3f2d56e0b
---
M pySim/esim/http_json_api.py
1 file changed, 26 insertions(+), 10 deletions(-)

Approvals:
  dexter: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve




diff --git a/pySim/esim/http_json_api.py b/pySim/esim/http_json_api.py
index 377faea..6a803f2 100644
--- a/pySim/esim/http_json_api.py
+++ b/pySim/esim/http_json_api.py
@@ -204,16 +204,17 @@
         return output

     def decode(self, data: dict) -> dict:
-        """[further] Decode and validate the JSON-Dict of the respnse body."""
+        """[further] Decode and validate the JSON-Dict of the response body."""
         output = {}
-        # let's first do the header, it's special
-        if not 'header' in data:
-            raise ValueError('Mandatory output parameter "header" missing')
-        hdr_class = self.output_params.get('header')
-        output['header'] = hdr_class.decode(data['header'])
+        if 'header' in self.output_params:
+            # let's first do the header, it's special
+            if not 'header' in data:
+                raise ValueError('Mandatory output parameter "header" missing')
+            hdr_class = self.output_params.get('header')
+            output['header'] = hdr_class.decode(data['header'])

-        if output['header']['functionExecutionStatus']['status'] not in 
['Executed-Success','Executed-WithWarning']:
-            raise ApiError(output['header']['functionExecutionStatus'])
+            if output['header']['functionExecutionStatus']['status'] not in 
['Executed-Success','Executed-WithWarning']:
+                raise ApiError(output['header']['functionExecutionStatus'])
         # we can only expect mandatory parameters to be present in case of 
successful execution
         for p in self.output_mandatory:
             if p == 'header':
@@ -229,7 +230,7 @@
                 output[p] = p_class.decode(v)
         return output

-    def call(self, data: dict, func_call_id: Optional[str] = None, timeout=10) 
-> dict:
+    def call(self, data: dict, func_call_id: Optional[str] = None, timeout=10) 
-> Optional[dict]:
         """Make an API call to the HTTP API endpoint represented by this 
object.
         Input data is passed in `data` as json-serializable dict.  Output data
         is returned as json-deserialized dict."""
@@ -253,4 +254,6 @@
         if not response.headers.get('X-Admin-Protocol', 
'gsma/rsp/v2.unknown').startswith('gsma/rsp/v2.'):
             raise HttpHeaderError(response)

-        return self.decode(response.json())
+        if response.content:
+            return self.decode(response.json())
+        return None

--
To view, visit https://gerrit.osmocom.org/c/pysim/+/37496?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Ia3c5703b746c1eba91f85f8545f849a3f2d56e0b
Gerrit-Change-Number: 37496
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <[email protected]>
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-MessageType: merged

Reply via email to