Switches broken for pi motor controllers
In a similar way to the icepap switches, pi switches need the controller passed (see 36fce890) so dont match the standard class signature.
piezos configured as:
class: PI_E712
name: npie712
axes:
- name: nnp1
channel: 1
...
- name: nnp2
channel: 2
...
- name: nnp3
channel: 3
...
...
switches:
- name: pi_out1
output-channel: 9
- name: pi_out2
output-channel: 10
trying to get a switch from beacon gives:
EH3 [4]: pi_out1 = config.get("pi_out1")
!!! === TypeError: __init__() missing 1 required positional argument: 'config' === !!! ( for more details type cmd 'last_error' )
EH3 [4]: last_error
Out [4]: 16/12/2021 17:19:32 Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/users/blissadm/local/bliss.git/bliss/common/session.py", line 114, in get
obj = self.__wrapped__.get(name)
File "/users/blissadm/local/bliss.git/bliss/config/static.py", line 998, in get
return self._get(name)
File "/users/blissadm/local/bliss.git/bliss/config/static.py", line 1037, in _get
instance_object = cache_func(self, name, cache_object)
File "/users/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 564, in create_object_from_cache
return bctrl._get_subitem(name)
File "/users/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 339, in _get_subitem
self.__build_subitem_from_config(name)
File "/users/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 222, in __build_subitem_from_config
cfg_name, cfg, pkey, item_class, item_obj
File "/users/blissadm/local/bliss.git/bliss/controllers/motor.py", line 65, in func_wrapper
return func(self, *args, **kwargs)
File "/users/blissadm/local/bliss.git/bliss/controllers/motor.py", line 186, in _create_subitem_from_config
switch = item_class(name, cfg)
TypeError: __init__() missing 1 required positional argument: 'config'
Fix is to add a local _create_subitem_from_config
as per
diff --git a/bliss/controllers/motors/pi_e712.py b/bliss/controllers/motors/pi_e712.py
index fbfe1c8f5..038b6807e 100644
--- a/bliss/controllers/motors/pi_e712.py
+++ b/bliss/controllers/motors/pi_e712.py
@@ -59,6 +59,18 @@ class PI_E712(pi_gcs.Communication, pi_gcs.Recorder, Controller):
self.cname = "E712"
self.__axis_closed_loop = weakref.WeakKeyDictionary()
+ def _create_subitem_from_config(
+ self, name, cfg, parent_key, item_class, item_obj=None
+ ):
+ if parent_key == "switches":
+ switch = item_class(name, self, cfg)
+ self._switches[name] = switch
+ return switch
+ else:
+ return super()._create_subitem_from_config(
+ name, cfg, parent_key, item_class, item_obj
+ )
+
def initialize(self):
self.com_initialize()
Edited by Stuart Fisher