Skip to content
This repository was archived by the owner on Jun 1, 2023. It is now read-only.

Commit 4cb9c07

Browse files
committed
Refactored some deserialization methods.
1 parent 532d464 commit 4cb9c07

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

src/oidcmsg/oidc/__init__.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from oidcmsg import oauth2
1919
from oidcmsg import time_util
20-
from oidcmsg.exception import InvalidRequest
20+
from oidcmsg.exception import InvalidRequest, FormatError
2121
from oidcmsg.exception import IssuerMismatch
2222
from oidcmsg.exception import MessageException
2323
from oidcmsg.exception import MissingRequiredAttribute
@@ -64,6 +64,22 @@ class IATError(VerificationError):
6464
pass
6565

6666

67+
def deserialize_from_one_of(val, msgtype, sformat):
68+
if sformat in ["dict", "json"]:
69+
flist = ['json', 'urlencoded']
70+
if not isinstance(val, str):
71+
val = json.dumps(val)
72+
else:
73+
flist = ['urlencoded', 'json']
74+
75+
for _format in flist:
76+
try:
77+
return msgtype().deserialize(val, _format)
78+
except FormatError:
79+
pass
80+
raise FormatError('Unexpected format')
81+
82+
6783
def json_ser(val, sformat=None, lev=0):
6884
return json.dumps(val)
6985

@@ -85,21 +101,11 @@ def idtoken_deser(val, sformat="urlencoded"):
85101

86102

87103
def address_deser(val, sformat="urlencoded"):
88-
if sformat in ["dict", "json"]:
89-
if not isinstance(val, str):
90-
val = json.dumps(val)
91-
sformat = "json"
92-
elif sformat == "dict":
93-
sformat = "json"
94-
return AddressClaim().deserialize(val, sformat)
104+
return deserialize_from_one_of(val, AddressClaim, sformat)
95105

96106

97107
def claims_deser(val, sformat="urlencoded"):
98-
if sformat in ["dict", "json"]:
99-
if not isinstance(val, str):
100-
val = json.dumps(val)
101-
sformat = "json"
102-
return Claims().deserialize(val, sformat)
108+
return deserialize_from_one_of(val, Claims, sformat)
103109

104110

105111
def msg_ser_json(inst, sformat="json", lev=0):
@@ -161,11 +167,7 @@ def claims_ser(val, sformat="urlencoded", lev=0):
161167

162168

163169
def registration_request_deser(val, sformat="urlencoded"):
164-
if sformat in ["dict", "json"]:
165-
if not isinstance(val, str):
166-
val = json.dumps(val)
167-
sformat = "json"
168-
return RegistrationRequest().deserialize(val, sformat)
170+
return deserialize_from_one_of(val, RegistrationRequest, sformat)
169171

170172

171173
def claims_request_deser(val, sformat="json"):

0 commit comments

Comments
 (0)