Exception during hasattr on deviceproxy
Hi,
I found out that hasattr on a device proxy can raise an exception.
Have you ever see such problem?
In this case the device don't have such attribute.
MRTOMO [22]: hasattr(proxy, "image_bin_mode")
Traceback (most recent call last):
File "/home/blissadm/local/bliss.git/bliss/common/tango.py", line 196, in __getattr__
attr = getattr(self.__wrapped__, name)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/device_proxy.py", line 462, in __DeviceProxy__getattr
return __get_attribute_value(self, attr_info, name)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/device_proxy.py", line 402, in __get_attribute_value
return __sync_get_attribute_value(self, attr_info, name)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/device_proxy.py", line 394, in __sync_get_attribute_value
attr_value = self.read_attribute(name).value
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/green.py", line 234, in greener
return executor.run(fn, args, kwargs, wait=wait, timeout=timeout)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/green.py", line 129, in run
return self.access(accessor, timeout=timeout)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/gevent_executor.py", line 179, in access
return accessor.get(timeout=timeout)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/gevent_executor.py", line 92, in wrapper
return func(*args, **kwargs)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/device_proxy.py", line 594, in __DeviceProxy__read_attribute
return __check_read_attribute(self._read_attribute(value, extract_as))
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.10/site-packages/tango/device_proxy.py", line 162, in __check_read_attribute
raise DevFailed(*dev_attr.get_err_stack())
DevFailed: DevFailed[
DevError[
desc = image_bin_mode attribute not found
origin = long int Tango::MultiAttribute::get_attr_ind_by_name(const char*) at (/home/conda/feedstock_root/build_artifacts/cpptango_1698825844057/work/src/server/multiattribute.cpp:1270)
reason = API_AttrNotFound
severity = ERR]
DevError[
desc = Failed to read_attribute on device bm18/limaccds/det02_iris2, attribute image_bin_mode
origin = virtual Tango::DeviceAttribute Tango::DeviceProxy::read_attribute(const std::string&) at (/home/conda/feedstock_root/build_artifacts/cpptango_1698825844057/work/src/client/devapi_base.cpp:5581)
reason = API_AttributeFailed
severity = ERR]
]
I can trig it multiple times.
And if i check something else, it goes back to normal.
MRTOMO [27]: hasattr(det8.proxy, "image_bin_mod")
Out [27]: False
MRTOMO [28]: hasattr(det8.proxy, "image_bin_mode")
Out [28]: False
Sounds like there is like a cache for the exception.
Also notice that this attribute is sometimes here, sometimes not, depending on the version of the server i launch.
This could maybe explain something?
# Launch server with image_bin_mode
MRTOMO [16]: hasattr(det8.proxy, "image_bin_mode")
Out [16]: True
# Stop server with image_bin_mode
# Launch server without image_bin_mode
MRTOMO [17]: hasattr(det8.proxy, "image_bin_mode")
Out [17]: False
MRTOMO [30]: tango.__version_info__
Out [30]: (9, 5, 1)
Do you have any idea of what is wrong?
Thanks a lot.
Edited by Valentin Valls