Savings - AttributeError: 'NoneType' object has no attribute 'append'
It is possible that Savings screen can crash with the
AttributeError: 'NoneType' object has no attribute 'append'
from this line:
pending_transfers.append(cart_transfer) # type: ignore[union-attr, arg-type]
That's because mypy is correct and this pending_transfers could be None as observed. I think that issue was mentioned during Savings review but unfortunately this was not fixed then.
I think that SavingsData
shouldn't allow None for their pending_transfers
property.
IMO it should be initialized with an empty list just like ProposalsData
does with proposals
property.
full tb:
2023-12-13 08:33:08.426 | ❌ ERROR | clive.__private.ui.app:_handle_exception:397 - AttributeError: 'NoneType' object has no attribute 'append'
Traceback (most recent call last):
File "/clive/venv/lib/python3.10/site-packages/textual/message_pump.py", line 552, in _process_messages_loop
await self._dispatch_message(message)
File "/clive/venv/lib/python3.10/site-packages/textual/message_pump.py", line 614, in _dispatch_message
await self.on_event(message)
File "/clive/venv/lib/python3.10/site-packages/textual/message_pump.py", line 683, in on_event
await self._on_message(event)
File "/clive/venv/lib/python3.10/site-packages/textual/message_pump.py", line 704, in _on_message
await invoke(method, message)
File "/clive/venv/lib/python3.10/site-packages/textual/_callback.py", line 74, in invoke
return await _invoke(callback, *params)
File "/clive/venv/lib/python3.10/site-packages/textual/_callback.py", line 36, in _invoke
result = await result
File "/clive/venv/lib/python3.10/site-packages/textual/widget.py", line 3315, in _on_click
await self.broker_event("click", event)
File "/clive/venv/lib/python3.10/site-packages/textual/widget.py", line 3303, in broker_event
return await self.app._broker_event(event_name, event, default_namespace=self)
File "/clive/venv/lib/python3.10/site-packages/textual/app.py", line 2829, in _broker_event
await self.run_action(action, default_namespace=default_namespace) # type: ignore[arg-type]
File "/clive/venv/lib/python3.10/site-packages/textual/app.py", line 2760, in run_action
handled = await self._dispatch_action(action_target, action_name, params)
File "/clive/venv/lib/python3.10/site-packages/textual/app.py", line 2794, in _dispatch_action
await invoke(public_method, *params)
File "/clive/venv/lib/python3.10/site-packages/textual/_callback.py", line 74, in invoke
return await _invoke(callback, *params)
File "/clive/venv/lib/python3.10/site-packages/textual/_callback.py", line 36, in _invoke
result = await result
File "/clive/venv/lib/python3.10/site-packages/textual/app.py", line 3039, in action_check_bindings
await self.check_bindings(key, priority=False)
File "/clive/venv/lib/python3.10/site-packages/textual/app.py", line 2667, in check_bindings
if await self.run_action(binding.action, namespace):
File "/clive/venv/lib/python3.10/site-packages/textual/app.py", line 2760, in run_action
handled = await self._dispatch_action(action_target, action_name, params)
File "/clive/venv/lib/python3.10/site-packages/textual/app.py", line 2794, in _dispatch_action
await invoke(public_method, *params)
File "/clive/venv/lib/python3.10/site-packages/textual/_callback.py", line 74, in invoke
return await _invoke(callback, *params)
File "/clive/venv/lib/python3.10/site-packages/textual/_callback.py", line 34, in _invoke
result = callback(*params[:parameter_count])
File "/clive/venv/lib/python3.10/site-packages/clive/__private/ui/operations/bindings/operation_action_bindings.py", line 66, in action_finalize
if self.__add_to_cart():
File "/clive/venv/lib/python3.10/site-packages/clive/__private/ui/operations/bindings/operation_action_bindings.py", line 119, in __add_to_cart
operation = self.create_operation()
File "/clive/venv/lib/python3.10/site-packages/clive/__private/ui/operations/bindings/operation_action_bindings.py", line 49, in create_operation
operation = self._create_operation()
File "/clive/venv/lib/python3.10/site-packages/clive/__private/ui/operations/savings_operations/savings_operations.py", line 216, in _create_operation
request_id = self.__create_request_id()
File "/clive/venv/lib/python3.10/site-packages/clive/__private/ui/operations/savings_operations/savings_operations.py", line 236, in __create_request_id
pending_transfers.append(cart_transfer) # type: ignore[union-attr, arg-type]
AttributeError: 'NoneType' object has no attribute 'append'