- Notifications
You must be signed in to change notification settings - Fork 31
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__'Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels