Open LeLunZ opened 3 years ago
@classmethod BunqModel._from_json_list
assumes that the endpoint name is the same as the model name.
This does not work for the "abstract" type NotificationFilterUrl
which can be loaded from multiple endpoints (NotificationFilterUrlUser
, NotificationFilterUrlMonetaryAccount
)
item_unwrapped
in BunqModel._from_json_list
needs to be deserialized to NotificationFilterUrl
(wrapper) when cls
is NotificationFilterUrlUser
or NotificationFilterUrlMonetaryAccount
# bunq/sdk/model/core/bunq_model.py:56
@classmethod
def _unwrap_response_single(cls,
obj: Dict,
wrapper: str = None)
...
# bunq/sdk/model/core/bunq_model.py:60
if wrapper is not None:
return obj[cls._FIELD_RESPONSE][cls._INDEX_FIRST][wrapper]
from bunq.sdk.model.generated.endpoint import NotificationFilterUrlUser, NotificationFilterUrlMonetaryAccount
if cls == NotificationFilterUrlUser or cls == NotificationFilterUrlMonetaryAccount:
return obj[cls._FIELD_RESPONSE][cls._INDEX_FIRST]['NotificationFilterUrl']
else:
return obj[cls._FIELD_RESPONSE][cls._INDEX_FIRST][wrapper]
# bunq/sdk/model/core/bunq_model.py:91
@classmethod
def _from_json_list(cls,
response_raw: BunqResponseRaw,
wrapper: str = None)
...
# bunq/sdk/model/core/bunq_model.py:102
for item in array:
item_unwrapped = item if wrapper is None else item[wrapper]
# item_unwrapped needs to be deserialized to NotificationFilterUrl (wrapper)
# when cls is NotificationFilterUrlUser or NotificationFilterUrlMonetaryAccount
if wrapper=='NotificationFilterUrl':
from bunq.sdk.model.generated.endpoint import NotificationFilterUrlUser, NotificationFilterUrlMonetaryAccount
from bunq.sdk.model.generated.object_ import NotificationFilterUrl
if cls == NotificationFilterUrlUser or cls == NotificationFilterUrlMonetaryAccount:
cls_orig = cls
cls = NotificationFilterUrl
#print(f'NotificationFilterUrlUser deserialization, changing cls from: {cls_orig} to: {cls}')
#TODO: Test deserialize for NotificationFilterUrlUser and NotificationFilterUrlMonetaryAccount
Please see: https://github.com/bunq/sdk_python/pull/157/commits/e4fecd8454f235ad8530d2c97d132a28dc873772
Steps to reproduce:
(only showing the callback part here)
What should happen:
What happens:
Traceback
SDK version and environment
Response id
Extra info:
As response we get this object:
Now in _unwrap_response_single we do this:
So if we take the first element of "Response" there is no "Id". Only a NotificationFilterUrl... And then again there is no "Id" only a "id"...