AttributeError: 'AttrW' object has no attribute 'get'
In [1]: [2026-07-24 10:59:18.994+0000 E] Put failed [fastcs.attributes.attr_w] attribute=AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldInfo(type='table', subtype=None, description='Sequencer table of lines', max_length=1048576, fields={'REPEATS': TableFieldDetails(subtype='uint', bit_low=0, bit_high=15, description='Number of times the line will repeat ', labels=None), 'TRIGGER': TableFieldDetails(subtype='enum', bit_low=16, bit_high=19, description='The trigger condition to start the phases ', labels=['Immediate', 'BITA=0', 'BITA=1', 'BITB=0', 'BITB=1', 'BITC=0', 'BITC=1', 'POSA>=POSITION', 'POSA<=POSITION', 'POSB>=POSITION', 'POSB<=POSITION', 'POSC>=POSITION', 'POSC<=POSITION']), 'POSITION': TableFieldDetails(subtype='int', bit_low=32, bit_high=63, description='The position that can be used in trigger condition ', labels=None), 'TIME1': TableFieldDetails(subtype='uint', bit_low=64, bit_high=95, description='The time the optional phase 1 should take ', labels=None), 'OUTA1': TableFieldDetails(subtype='uint', bit_low=20, bit_high=20, description='Output A value during phase 1 ', labels=None), 'OUTB1': TableFieldDetails(subtype='uint', bit_low=21, bit_high=21, description='Output B value during phase 1 ', labels=None), 'OUTC1': TableFieldDetails(subtype='uint', bit_low=22, bit_high=22, description='Output C value during phase 1 ', labels=None), 'OUTD1': TableFieldDetails(subtype='uint', bit_low=23, bit_high=23, description='Output D value during phase 1 ', labels=None), 'OUTE1': TableFieldDetails(subtype='uint', bit_low=24, bit_high=24, description='Output E value during phase 1 ', labels=None), 'OUTF1': TableFieldDetails(subtype='uint', bit_low=25, bit_high=25, description='Output F value during phase 1 ', labels=None), 'TIME2': TableFieldDetails(subtype='uint', bit_low=96, bit_high=127, description='The time the mandatory phase 2 should take ', labels=None), 'OUTA2': TableFieldDetails(subtype='uint', bit_low=26, bit_high=26, description='Output A value during phase 2 ', labels=None), 'OUTB2': TableFieldDetails(subtype='uint', bit_low=27, bit_high=27, description='Output B value during phase 2 ', labels=None), 'OUTC2': TableFieldDetails(subtype='uint', bit_low=28, bit_high=28, description='Output C value during phase 2 ', labels=None), 'OUTD2': TableFieldDetails(subtype='uint', bit_low=29, bit_high=29, description='Output D value during phase 2 ', labels=None), 'OUTE2': TableFieldDetails(subtype='uint', bit_low=30, bit_high=30, description='Output E value during phase 2 ', labels=None), 'OUTF2': TableFieldDetails(subtype='uint', bit_low=31, bit_high=31, description='Output F value during phase 2 ', labels=None)}, row_words=4, has_mode=True), put_value_to_panda=<bound method RawPanda.put_value_to_panda of <fastcs_pandablocks.panda.client_wrapper.RawPanda object at 0x7fc3d8b94110>>, append_to_panda=<bound method RawPanda.append_to_panda of <fastcs_pandablocks.panda.client_wrapper.RawPanda object at 0x7fc3d8b94110>>, next_write_attr=AttrW(path=1.table_next_write, datatype=Enum, io_ref=None))), setpoint=[( 1, 'BITA=0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
( 1, 'BITA=1', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
(1000, 'Immediate', 0, 990000, 1, 0, 0, 0, 0, 0, 10000, 0, 0, 0, 0, 0, 0)]
Traceback (most recent call last):
File "/app/.venv/bin/fastcs-pandablocks", line 10, in <module>
sys.exit(main())
│ │ └ <function main at 0x7fc3da8caca0>
│ └ <built-in function exit>
└ <module 'sys' (built-in)>
File "/app/.venv/lib/python3.11/site-packages/fastcs_pandablocks/__main__.py", line 11, in main
launch(PandaController, version=__version__)
│ │ └ '0.2.0a5'
│ └ <class 'fastcs_pandablocks.panda.panda_controller.PandaController'>
└ <function launch at 0x7fc3da9672e0>
File "/app/.venv/lib/python3.11/site-packages/fastcs/launch.py", line 56, in launch
_launch(controller_class, version)()
│ │ └ '0.2.0a5'
│ └ <class 'fastcs_pandablocks.panda.panda_controller.PandaController'>
└ <function _launch at 0x7fc3d9544fe0>
File "/app/.venv/lib/python3.11/site-packages/typer/main.py", line 1135, in __call__
return get_command(self)(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <typer.main.Typer object at 0x7fc3d95d8f90>
└ <function get_command at 0x7fc3d9568180>
File "/app/.venv/lib/python3.11/site-packages/click/core.py", line 1485, in __call__
return self.main(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function TyperGroup.main at 0x7fc3d9593ba0>
└ <TyperGroup >
File "/app/.venv/lib/python3.11/site-packages/typer/core.py", line 795, in main
return _main(
└ <function _main at 0x7fc3d9592a20>
File "/app/.venv/lib/python3.11/site-packages/typer/core.py", line 188, in _main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x7fc3d945b410>
│ └ <function Group.invoke at 0x7fc3d9bb4c20>
└ <TyperGroup >
File "/app/.venv/lib/python3.11/site-packages/click/core.py", line 1873, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
│ │ │ │ └ <click.core.Context object at 0x7fc3d9487250>
│ │ │ └ <function Command.invoke at 0x7fc3d9b939c0>
│ │ └ <TyperCommand run>
│ └ <click.core.Context object at 0x7fc3d9487250>
└ <function Group.invoke.<locals>._process_result at 0x7fc3d8b46840>
File "/app/.venv/lib/python3.11/site-packages/click/core.py", line 1269, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'config': '/epics/ioc/config/controller.yaml', 'log_level': 'INFO', 'graylog_endpoint': None, 'graylog_static_fields': None,...
│ │ │ │ └ <click.core.Context object at 0x7fc3d9487250>
│ │ │ └ <function _launch.<locals>.run at 0x7fc3d8b46020>
│ │ └ <TyperCommand run>
│ └ <function Context.invoke at 0x7fc3d9b92c00>
└ <click.core.Context object at 0x7fc3d9487250>
File "/app/.venv/lib/python3.11/site-packages/click/core.py", line 824, in invoke
return callback(*args, **kwargs)
│ │ └ {'config': '/epics/ioc/config/controller.yaml', 'log_level': 'INFO', 'graylog_endpoint': None, 'graylog_static_fields': None,...
│ └ ()
└ <function _launch.<locals>.run at 0x7fc3d8b46020>
File "/app/.venv/lib/python3.11/site-packages/typer/main.py", line 1514, in wrapper
return callback(**use_params)
│ └ {'ctx': <click.core.Context object at 0x7fc3d9487250>, 'config': PosixPath('/epics/ioc/config/controller.yaml'), 'log_level':...
└ <function _launch.<locals>.run at 0x7fc3d8b45da0>
File "/app/.venv/lib/python3.11/site-packages/fastcs/launch.py", line 165, in run
instance.run()
│ └ <function FastCS.run at 0x7fc3da9671a0>
└ <fastcs.control_system.FastCS object at 0x7fc3d8b95650>
File "/app/.venv/lib/python3.11/site-packages/fastcs/control_system.py", line 51, in run
self._loop.run_until_complete(serve)
│ │ │ └ <Task pending name='Task-1' coro=<FastCS.serve() running at /app/.venv/lib/python3.11/site-packages/fastcs/control_system.py:...
│ │ └ <function BaseEventLoop.run_until_complete at 0x7fc4069d37e0>
│ └ <_UnixSelectorEventLoop running=True closed=False debug=False>
└ <fastcs.control_system.FastCS object at 0x7fc3d8b95650>
File "/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 641, in run_until_complete
self.run_forever()
│ └ <function BaseEventLoop.run_forever at 0x7fc4069d3740>
└ <_UnixSelectorEventLoop running=True closed=False debug=False>
File "/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 608, in run_forever
self._run_once()
│ └ <function BaseEventLoop._run_once at 0x7fc4069e9580>
└ <_UnixSelectorEventLoop running=True closed=False debug=False>
File "/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 1936, in _run_once
handle._run()
│ └ <function Handle._run at 0x7fc406b07100>
└ <Handle <TaskStepMethWrapper object at 0x7fc3ca314fa0>()>
File "/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/events.py", line 84, in _run
self._context.run(self._callback, *self._args)
│ │ │ │ │ └ <member '_args' of 'Handle' objects>
│ │ │ │ └ <Handle <TaskStepMethWrapper object at 0x7fc3ca314fa0>()>
│ │ │ └ <member '_callback' of 'Handle' objects>
│ │ └ <Handle <TaskStepMethWrapper object at 0x7fc3ca314fa0>()>
│ └ <member '_context' of 'Handle' objects>
└ <Handle <TaskStepMethWrapper object at 0x7fc3ca314fa0>()>
File "/app/.venv/lib/python3.11/site-packages/fastcs/transports/epics/pva/_pv_handlers.py", line 50, in put
await self._attr_w.put(cast_value)
│ │ │ └ array([( 1, 'BITA=0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
│ │ │ ( 1, 'BITA=1', 0, 0, 0, 0, 0, 0,...
│ │ └ <function AttrW.put at 0x7fc3dc6c2020>
│ └ AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldI...
└ <fastcs.transports.epics.pva._pv_handlers.WritePvHandler object at 0x7fc3cb73d3d0>
> File "/app/.venv/lib/python3.11/site-packages/fastcs/attributes/attr_w.py", line 57, in put
await self._on_put_callback(self, setpoint)
│ │ │ └ array([( 1, 'BITA=0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
│ │ │ ( 1, 'BITA=1', 0, 0, 0, 0, 0, 0,...
│ │ └ AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldI...
│ └ <bound method TableFieldIO.send of <fastcs_pandablocks.panda.io.table.TableFieldIO object at 0x7fc3d8b94c90>>
└ AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldI...
File "/app/.venv/lib/python3.11/site-packages/fastcs_pandablocks/panda/io/table.py", line 60, in send
attr.io_ref.next_write_attr.get()
│ └ <property object at 0x7fc40531d300>
└ AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldI...
AttributeError: 'AttrW' object has no attribute 'get'
In [1]: [2026-07-24 10:59:19.178+0000 E] Put failed [fastcs.attributes.attr_w] attribute=AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldInfo(type='table', subtype=None, description='Sequencer table of lines', max_length=1048576, fields={'REPEATS': TableFieldDetails(subtype='uint', bit_low=0, bit_high=15, description='Number of times the line will repeat ', labels=None), 'TRIGGER': TableFieldDetails(subtype='enum', bit_low=16, bit_high=19, description='The trigger condition to start the phases ', labels=['Immediate', 'BITA=0', 'BITA=1', 'BITB=0', 'BITB=1', 'BITC=0', 'BITC=1', 'POSA>=POSITION', 'POSA<=POSITION', 'POSB>=POSITION', 'POSB<=POSITION', 'POSC>=POSITION', 'POSC<=POSITION']), 'POSITION': TableFieldDetails(subtype='int', bit_low=32, bit_high=63, description='The position that can be used in trigger condition ', labels=None), 'TIME1': TableFieldDetails(subtype='uint', bit_low=64, bit_high=95, description='The time the optional phase 1 should take ', labels=None), 'OUTA1': TableFieldDetails(subtype='uint', bit_low=20, bit_high=20, description='Output A value during phase 1 ', labels=None), 'OUTB1': TableFieldDetails(subtype='uint', bit_low=21, bit_high=21, description='Output B value during phase 1 ', labels=None), 'OUTC1': TableFieldDetails(subtype='uint', bit_low=22, bit_high=22, description='Output C value during phase 1 ', labels=None), 'OUTD1': TableFieldDetails(subtype='uint', bit_low=23, bit_high=23, description='Output D value during phase 1 ', labels=None), 'OUTE1': TableFieldDetails(subtype='uint', bit_low=24, bit_high=24, description='Output E value during phase 1 ', labels=None), 'OUTF1': TableFieldDetails(subtype='uint', bit_low=25, bit_high=25, description='Output F value during phase 1 ', labels=None), 'TIME2': TableFieldDetails(subtype='uint', bit_low=96, bit_high=127, description='The time the mandatory phase 2 should take ', labels=None), 'OUTA2': TableFieldDetails(subtype='uint', bit_low=26, bit_high=26, description='Output A value during phase 2 ', labels=None), 'OUTB2': TableFieldDetails(subtype='uint', bit_low=27, bit_high=27, description='Output B value during phase 2 ', labels=None), 'OUTC2': TableFieldDetails(subtype='uint', bit_low=28, bit_high=28, description='Output C value during phase 2 ', labels=None), 'OUTD2': TableFieldDetails(subtype='uint', bit_low=29, bit_high=29, description='Output D value during phase 2 ', labels=None), 'OUTE2': TableFieldDetails(subtype='uint', bit_low=30, bit_high=30, description='Output E value during phase 2 ', labels=None), 'OUTF2': TableFieldDetails(subtype='uint', bit_low=31, bit_high=31, description='Output F value during phase 2 ', labels=None)}, row_words=4, has_mode=True), put_value_to_panda=<bound method RawPanda.put_value_to_panda of <fastcs_pandablocks.panda.client_wrapper.RawPanda object at 0x7fc3d8b94110>>, append_to_panda=<bound method RawPanda.append_to_panda of <fastcs_pandablocks.panda.client_wrapper.RawPanda object at 0x7fc3d8b94110>>, next_write_attr=AttrW(path=1.table_next_write, datatype=Enum, io_ref=None))), setpoint=[]
Traceback (most recent call last):
File "/app/.venv/bin/fastcs-pandablocks", line 10, in <module>
sys.exit(main())
│ │ └ <function main at 0x7fc3da8caca0>
│ └ <built-in function exit>
└ <module 'sys' (built-in)>
File "/app/.venv/lib/python3.11/site-packages/fastcs_pandablocks/__main__.py", line 11, in main
launch(PandaController, version=__version__)
│ │ └ '0.2.0a5'
│ └ <class 'fastcs_pandablocks.panda.panda_controller.PandaController'>
└ <function launch at 0x7fc3da9672e0>
File "/app/.venv/lib/python3.11/site-packages/fastcs/launch.py", line 56, in launch
_launch(controller_class, version)()
│ │ └ '0.2.0a5'
│ └ <class 'fastcs_pandablocks.panda.panda_controller.PandaController'>
└ <function _launch at 0x7fc3d9544fe0>
File "/app/.venv/lib/python3.11/site-packages/typer/main.py", line 1135, in __call__
return get_command(self)(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <typer.main.Typer object at 0x7fc3d95d8f90>
└ <function get_command at 0x7fc3d9568180>
File "/app/.venv/lib/python3.11/site-packages/click/core.py", line 1485, in __call__
return self.main(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function TyperGroup.main at 0x7fc3d9593ba0>
└ <TyperGroup >
File "/app/.venv/lib/python3.11/site-packages/typer/core.py", line 795, in main
return _main(
└ <function _main at 0x7fc3d9592a20>
File "/app/.venv/lib/python3.11/site-packages/typer/core.py", line 188, in _main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x7fc3d945b410>
│ └ <function Group.invoke at 0x7fc3d9bb4c20>
└ <TyperGroup >
File "/app/.venv/lib/python3.11/site-packages/click/core.py", line 1873, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
│ │ │ │ └ <click.core.Context object at 0x7fc3d9487250>
│ │ │ └ <function Command.invoke at 0x7fc3d9b939c0>
│ │ └ <TyperCommand run>
│ └ <click.core.Context object at 0x7fc3d9487250>
└ <function Group.invoke.<locals>._process_result at 0x7fc3d8b46840>
File "/app/.venv/lib/python3.11/site-packages/click/core.py", line 1269, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'config': '/epics/ioc/config/controller.yaml', 'log_level': 'INFO', 'graylog_endpoint': None, 'graylog_static_fields': None,...
│ │ │ │ └ <click.core.Context object at 0x7fc3d9487250>
│ │ │ └ <function _launch.<locals>.run at 0x7fc3d8b46020>
│ │ └ <TyperCommand run>
│ └ <function Context.invoke at 0x7fc3d9b92c00>
└ <click.core.Context object at 0x7fc3d9487250>
File "/app/.venv/lib/python3.11/site-packages/click/core.py", line 824, in invoke
return callback(*args, **kwargs)
│ │ └ {'config': '/epics/ioc/config/controller.yaml', 'log_level': 'INFO', 'graylog_endpoint': None, 'graylog_static_fields': None,...
│ └ ()
└ <function _launch.<locals>.run at 0x7fc3d8b46020>
File "/app/.venv/lib/python3.11/site-packages/typer/main.py", line 1514, in wrapper
return callback(**use_params)
│ └ {'ctx': <click.core.Context object at 0x7fc3d9487250>, 'config': PosixPath('/epics/ioc/config/controller.yaml'), 'log_level':...
└ <function _launch.<locals>.run at 0x7fc3d8b45da0>
File "/app/.venv/lib/python3.11/site-packages/fastcs/launch.py", line 165, in run
instance.run()
│ └ <function FastCS.run at 0x7fc3da9671a0>
└ <fastcs.control_system.FastCS object at 0x7fc3d8b95650>
File "/app/.venv/lib/python3.11/site-packages/fastcs/control_system.py", line 51, in run
self._loop.run_until_complete(serve)
│ │ │ └ <Task pending name='Task-1' coro=<FastCS.serve() running at /app/.venv/lib/python3.11/site-packages/fastcs/control_system.py:...
│ │ └ <function BaseEventLoop.run_until_complete at 0x7fc4069d37e0>
│ └ <_UnixSelectorEventLoop running=True closed=False debug=False>
└ <fastcs.control_system.FastCS object at 0x7fc3d8b95650>
File "/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 641, in run_until_complete
self.run_forever()
│ └ <function BaseEventLoop.run_forever at 0x7fc4069d3740>
└ <_UnixSelectorEventLoop running=True closed=False debug=False>
File "/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 608, in run_forever
self._run_once()
│ └ <function BaseEventLoop._run_once at 0x7fc4069e9580>
└ <_UnixSelectorEventLoop running=True closed=False debug=False>
File "/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 1936, in _run_once
handle._run()
│ └ <function Handle._run at 0x7fc406b07100>
└ <Handle <TaskStepMethWrapper object at 0x7fc3ca317e80>()>
File "/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/events.py", line 84, in _run
self._context.run(self._callback, *self._args)
│ │ │ │ │ └ <member '_args' of 'Handle' objects>
│ │ │ │ └ <Handle <TaskStepMethWrapper object at 0x7fc3ca317e80>()>
│ │ │ └ <member '_callback' of 'Handle' objects>
│ │ └ <Handle <TaskStepMethWrapper object at 0x7fc3ca317e80>()>
│ └ <member '_context' of 'Handle' objects>
└ <Handle <TaskStepMethWrapper object at 0x7fc3ca317e80>()>
File "/app/.venv/lib/python3.11/site-packages/fastcs/transports/epics/pva/_pv_handlers.py", line 50, in put
await self._attr_w.put(cast_value)
│ │ │ └ array([],
│ │ │ dtype=[('repeats', '<u4'), ('trigger', '<U16'), ('position', '<i4'), ('time1', '<u4'), ('outa1', '<u4'), ('ou...
│ │ └ <function AttrW.put at 0x7fc3dc6c2020>
│ └ AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldI...
└ <fastcs.transports.epics.pva._pv_handlers.WritePvHandler object at 0x7fc3cb73d3d0>
> File "/app/.venv/lib/python3.11/site-packages/fastcs/attributes/attr_w.py", line 57, in put
await self._on_put_callback(self, setpoint)
│ │ │ └ array([],
│ │ │ dtype=[('repeats', '<u4'), ('trigger', '<U16'), ('position', '<i4'), ('time1', '<u4'), ('outa1', '<u4'), ('ou...
│ │ └ AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldI...
│ └ <bound method TableFieldIO.send of <fastcs_pandablocks.panda.io.table.TableFieldIO object at 0x7fc3d8b94c90>>
└ AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldI...
File "/app/.venv/lib/python3.11/site-packages/fastcs_pandablocks/panda/io/table.py", line 60, in send
attr.io_ref.next_write_attr.get()
│ └ <property object at 0x7fc40531d300>
└ AttrRW(path=1.table, datatype=Table, io_ref=TableFieldIORef(update_period=None, panda_name=SEQ1.TABLE, field_info=TableFieldI...
AttributeError: 'AttrW' object has no attribute 'get'