def __init__(self, **kwargs): super(CommDispatcherBase, self).__init__(**kwargs) self.IO_MODULES = {} self.IO_MODULE_UPDN_ORDER = {} for key in ['up', 'dn']: self.IO_MODULE_UPDN_ORDER[key] = ChildGroup(name=key, child_class=DummyIOObj) self.ServiceConnector = ServiceConnector()
class CommDispatcherBase(BaseIO.BaseIO): def __init__(self, **kwargs): super(CommDispatcherBase, self).__init__(**kwargs) self.IO_MODULES = {} self.IO_MODULE_UPDN_ORDER = {} for key in ['up', 'dn']: self.IO_MODULE_UPDN_ORDER[key] = ChildGroup(name=key, child_class=DummyIOObj) self.ServiceConnector = ServiceConnector() @property def SystemData(self): return self.GLOBAL_CONFIG.get('SystemData') @property def IO_CLASSES(self): return IO_CLASSES def do_connect(self, **kwargs): self.ServiceConnector.publish() updnobj = self.IO_MODULE_UPDN_ORDER['up'].indexed_items for key in sorted(updnobj.keys()): obj = updnobj[key].io_obj obj.do_connect(**kwargs) self.connected = True def do_disconnect(self, **kwargs): updnobj = self.IO_MODULE_UPDN_ORDER['dn'].indexed_items for key in reversed(sorted(updnobj.keys())): obj = updnobj[key].io_obj obj.do_disconnect(**kwargs) self.ServiceConnector.unpublish() self.connected = False def shutdown(self): updnobj = self.IO_MODULE_UPDN_ORDER['dn'].indexed_items for key in reversed(sorted(updnobj.keys())): obj = updnobj[key].io_obj if hasattr(obj, 'shutdown'): obj.shutdown() else: obj.do_disconnect(blocking=True) self.ServiceConnector.unpublish(blocking=True) self.connected = False def build_io_module(self, name, updn_order=False, **kwargs): cls = self.IO_CLASSES.get(name) if not cls: return if updn_order is True: updn_order = [None, None] kwargs.setdefault('comm', self) obj = cls(**kwargs) self.IO_MODULES[name] = obj if type(updn_order) in [list, tuple]: for i, key in enumerate(['up', 'dn']): index = updn_order[i] c_kwargs = dict(id=name, obj=obj) if index is not None: c_kwargs['Index'] = index dobj = self.IO_MODULE_UPDN_ORDER[key].add_child(**c_kwargs) return obj def remove_io_module(self, name): obj = self.IO_MODULES.get(name) if not obj: return if hasattr(obj, 'shutdown'): obj.shutdown() else: obj.do_disconnect(blocking=True) obj.unlink() del self.IO_MODULES[name] return obj