Commit 7091c80f authored by Elisabetta Giani's avatar Elisabetta Giani
Browse files

AT5-382:

CspCapabilityMonitor.py: unsubscribe events and cleaning of the
event list on device deletion.
Removed linting bugs.
parent 5d2617fd
Loading
Loading
Loading
Loading
Loading
+30 −23
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ from tango.server import run
from tango.server import attribute, command
from tango.server import device_property
from tango import AttrQuality, DispLevel, DevState
from tango import AttrWriteType, PipeWriteType
from tango import AttrWriteType, EventType
# Additional import
# PROTECTED REGION ID(CspCapabilityMonitor.additionnal_import) ENABLED START #
from ska.base import SKABaseDevice
@@ -156,6 +156,7 @@ class CspCapabilityMonitor(SKABaseDevice):
        # connect to DB and read the adminMode of each capability
        
        for fqdn in self.CapabilityDevices:
            self._event_id[fqdn] = []
            attribute_properties = self._csp_tango_db.get_device_attribute_property(fqdn, {'adminMode': ['__value'],})
            try:
                admin_mode_memorized = attribute_properties['adminMode']['__value']
@@ -169,31 +170,31 @@ class CspCapabilityMonitor(SKABaseDevice):
                                                     EventType.CHANGE_EVENT,
                                                     self._attributes_change_event_cb,
                                                     stateless=True)
                self._event_id[fqdn] = ev_id
                self._event_id[fqdn].append(ev_id)
                
                ev_id = device_proxy.subscribe_event("State",
                                                     EventType.CHANGE_EVENT,
                                                     self._attributes_change_event_cb,
                                                     stateless=True)
                self._event_id[fqdn] = ev_id
                self._event_id[fqdn].append(ev_id)

                ev_id = device_proxy.subscribe_event("healthState",
                                                     EventType.CHANGE_EVENT,
                                                     self._attributes_change_event_cb,
                                                     stateless=True)
                self._event_id[fqdn] = ev_id
                self._event_id[fqdn].append(ev_id)
                
                ev_id = device_proxy.subscribe_event("obsState",
                                                     EventType.CHANGE_EVENT,
                                                     self._attributes_change_event_cb,
                                                     stateless=True)
                self._event_id[fqdn]= ev_id
                self._event_id[fqdn].append(ev_id)
                
                ev_id = device_proxy.subscribe_event("subarrayMemebership",
                                                     EventType.CHANGE_EVENT,
                                                     self._attributes_change_event_cb,
                                                     stateless=True)
                self._event_id[fqdn]['subarrayMembership'] = ev_id
                self._event_id[fqdn].append(ev_id)
            except tango.DevFailed as tango_err:
                self.logger.warn("_connect_to_capability: {}.".format(tango_err.args[0].desc))
                
@@ -251,25 +252,31 @@ class CspCapabilityMonitor(SKABaseDevice):
        destructor and by the device Init command.
        """
        # PROTECTED REGION ID(CspCapabilityMonitor.delete_device) ENABLED START #
        event_to_remove = []
        for fqdn in self._capability_fqdn:
            event_to_remove = []
            try:
                self._capability_proxies[fqdn].unsubscribe_event(self._event_id[fqdn])
                event_to_remove.append(fqdn)
                for ev_id in self._event_id[fqdn]:
                    try: 
                        self._capability_proxies[fqdn].unsubscribe_event(ev_id)
                        event_to_remove.append(ev_id)
                    except KeyError as key_err:
                        msg = ("Failure unsubscribing event {} "
                       "on device {}. Reason: {}".format(event_id,
                               "on device {}. Reason: {}".format(ev_id,
                                                             fqdn,
                                                             key_err))
                        self.logger.error(msg)
                # remove the events id from the list
        for k in _event_id[fqdn].remove(k):
                for k in event_to_remove:
                    self._event_id[fqdn].remove(k)
                if self._event_id[fqdn]:
                    msg = "Still subscribed events: {}".format(self._event_id)
                    self.logger.warn(msg)
                else:
                    # remove the dictionary element
                    self._event_id.pop(fqdn)
            except KeyError as key_err:
                msg = " Can't retrieve the information of key {}".format(key_err)
                self.loggerr.error(msg)
            
        self._capability_fqdn.clear()
        self._capability_state.clear()
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ from tango import AttrWriteType, PipeWriteType
# Additional import
# PROTECTED REGION ID(CspTimingBeamCapability.additionnal_import) ENABLED START #
from ska.base import SKACapability
from ska.base.control_model import HealthState, AdminMode, ObsStte, ObsMode
from ska.base.control_model import HealthState, AdminMode, ObsState, ObsMode
# PROTECTED REGION END #    //  CspTimingBeamCapability.additionnal_import

__all__ = ["CspTimingBeamCapability", "main"]