1717
1818from oidcmsg import oauth2
1919from oidcmsg import time_util
20- from oidcmsg .exception import InvalidRequest
20+ from oidcmsg .exception import InvalidRequest , FormatError
2121from oidcmsg .exception import IssuerMismatch
2222from oidcmsg .exception import MessageException
2323from 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+
6783def 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
87103def 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
97107def 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
105111def msg_ser_json (inst , sformat = "json" , lev = 0 ):
@@ -161,11 +167,7 @@ def claims_ser(val, sformat="urlencoded", lev=0):
161167
162168
163169def 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
171173def claims_request_deser (val , sformat = "json" ):
0 commit comments