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 Apr 07, 2025 by Valentin Valls
Assignee Loading
Time tracking Loading