Open
Description
Hey guys, when trying to create an API context with the latest version of the python package, I get the error in issue title.
The following is the full traceback with the API key removed:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[7], line 2
1 # Create API context
----> 2 api_context = ApiContext.create(
3 environment_type=ApiEnvironmentType.PRODUCTION,
4 api_key="...",
5 description="..."
6 )
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/context/api_context.py:66, in ApiContext.create(cls, environment_type, api_key, description, all_permitted_ip, proxy_url)
64 api_context.__initialize_installation()
65 api_context.__register_device(description, all_permitted_ip)
---> 66 api_context.__initialize_session()
68 return api_context
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/context/api_context.py:148, in ApiContext.__initialize_session(self)
146 def __initialize_session(self) -> None:
147 from bunq.sdk.model.core.session_server import SessionServer
--> 148 session_server = SessionServer.create(self).value
150 token = session_server.token
151 expiry_time = self._get_expiry_timestamp(session_server)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/model/core/session_server.py:74, in SessionServer.create(cls, api_context)
71 body_bytes = cls.generate_request_body_bytes(api_context.api_key)
72 response_raw = api_client.post(cls._ENDPOINT_URL_POST, body_bytes, {})
---> 74 return cls._from_json_array_nested(response_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/model/core/bunq_model.py:39, in BunqModel._from_json_array_nested(cls, response_raw)
37 json = response_raw.body_bytes.decode()
38 obj = converter.json_to_class(dict, json)
---> 39 value = converter.deserialize(cls, obj[cls._FIELD_RESPONSE])
41 return BunqResponse(value, response_raw.headers)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:464, in deserialize(cls, obj_raw)
463 def deserialize(cls: Type[T], obj_raw: JsonValue) -> T:
--> 464 return JsonAdapter.deserialize(cls, obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:104, in JsonAdapter.deserialize(cls, cls_target, obj_raw)
102 return cls._deserialize_default(cls_target, obj_raw)
103 else:
--> 104 return deserializer.deserialize(cls_target, obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/session_server_adapter.py:73, in SessionServerAdapter.deserialize(cls, target_class, array)
66 session_server.__dict__[cls._ATTRIBUTE_USER_COMPANY] = \
67 converter.deserialize(
68 UserCompanyApiObject,
69 user_dict_wrapped[cls._FIELD_USER_COMPANY]
70 )
71 elif cls._FIELD_USER_PERSON in user_dict_wrapped:
72 session_server.__dict__[cls._ATTRIBUTE_USER_PERSON] = \
---> 73 converter.deserialize(
74 UserPersonApiObject,
75 user_dict_wrapped[cls._FIELD_USER_PERSON]
76 )
77 elif cls._FIELD_USER_API_KEY in user_dict_wrapped:
78 session_server.__dict__[cls._ATTRIBUTE_USER_API_KEY] = \
79 converter.deserialize(
80 UserApiKeyApiObject,
81 user_dict_wrapped[cls._FIELD_USER_API_KEY]
82 )
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:464, in deserialize(cls, obj_raw)
463 def deserialize(cls: Type[T], obj_raw: JsonValue) -> T:
--> 464 return JsonAdapter.deserialize(cls, obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:102, in JsonAdapter.deserialize(cls, cls_target, obj_raw)
99 deserializer = cls._get_deserializer(cls_target)
101 if deserializer == cls:
--> 102 return cls._deserialize_default(cls_target, obj_raw)
103 else:
104 return deserializer.deserialize(cls_target, obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:117, in JsonAdapter._deserialize_default(cls, cls_target, obj_raw)
115 return obj_raw
116 elif type(obj_raw) == dict:
--> 117 return cls._deserialize_dict(cls_target, obj_raw)
118 else:
119 return cls_target(obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:147, in JsonAdapter._deserialize_dict(cls, cls_target, dict_)
142 @classmethod
143 def _deserialize_dict(cls,
144 cls_target: Type[T],
145 dict_: Dict) -> T:
146 instance = cls_target.__new__(cls_target)
--> 147 dict_deserialized = cls._deserialize_dict_attributes(cls_target, dict_)
148 instance.__dict__ = cls._fill_default_values(cls_target, dict_deserialized)
150 return instance
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:163, in JsonAdapter._deserialize_dict_attributes(cls, cls_context, dict_)
160 value_specs = cls._get_value_specs(cls_context, key_deserialized)
162 if value_specs is not None:
--> 163 dict_deserialized[value_specs.name] = cls._deserialize_value(value_specs.types, dict_[key])
165 return dict_deserialized
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:307, in JsonAdapter._deserialize_value(cls, types, value)
305 return cls._deserialize_list(types.sub, value)
306 else:
--> 307 return cls.deserialize(types.main, value)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:102, in JsonAdapter.deserialize(cls, cls_target, obj_raw)
99 deserializer = cls._get_deserializer(cls_target)
101 if deserializer == cls:
--> 102 return cls._deserialize_default(cls_target, obj_raw)
103 else:
104 return deserializer.deserialize(cls_target, obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:117, in JsonAdapter._deserialize_default(cls, cls_target, obj_raw)
115 return obj_raw
116 elif type(obj_raw) == dict:
--> 117 return cls._deserialize_dict(cls_target, obj_raw)
118 else:
119 return cls_target(obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:147, in JsonAdapter._deserialize_dict(cls, cls_target, dict_)
142 @classmethod
143 def _deserialize_dict(cls,
144 cls_target: Type[T],
145 dict_: Dict) -> T:
146 instance = cls_target.__new__(cls_target)
--> 147 dict_deserialized = cls._deserialize_dict_attributes(cls_target, dict_)
148 instance.__dict__ = cls._fill_default_values(cls_target, dict_deserialized)
150 return instance
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:163, in JsonAdapter._deserialize_dict_attributes(cls, cls_context, dict_)
160 value_specs = cls._get_value_specs(cls_context, key_deserialized)
162 if value_specs is not None:
--> 163 dict_deserialized[value_specs.name] = cls._deserialize_value(value_specs.types, dict_[key])
165 return dict_deserialized
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:307, in JsonAdapter._deserialize_value(cls, types, value)
305 return cls._deserialize_list(types.sub, value)
306 else:
--> 307 return cls.deserialize(types.main, value)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:102, in JsonAdapter.deserialize(cls, cls_target, obj_raw)
99 deserializer = cls._get_deserializer(cls_target)
101 if deserializer == cls:
--> 102 return cls._deserialize_default(cls_target, obj_raw)
103 else:
104 return deserializer.deserialize(cls_target, obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:117, in JsonAdapter._deserialize_default(cls, cls_target, obj_raw)
115 return obj_raw
116 elif type(obj_raw) == dict:
--> 117 return cls._deserialize_dict(cls_target, obj_raw)
118 else:
119 return cls_target(obj_raw)
File /home/user/miniconda3/envs/financials/lib/python3.12/site-packages/bunq/sdk/json/converter.py:148, in JsonAdapter._deserialize_dict(cls, cls_target, dict_)
146 instance = cls_target.__new__(cls_target)
147 dict_deserialized = cls._deserialize_dict_attributes(cls_target, dict_)
--> 148 instance.__dict__ = cls._fill_default_values(cls_target, dict_deserialized)
150 return instance
AttributeError: 'str' object has no attribute '__dict__'
Metadata
Metadata
Assignees
Labels
No labels