Source code for pylablib.aux_libs.devices.device_manager

from ...core.fileio import loadfile  #@UnresolvedImport

import importlib
import re

[docs]class DeviceManager(object): def __init__(self, path=None): object.__init__(self) self.devices={} self.opened={} if path: self.add_from_file(path)
[docs] def add_device(self, name, dev_cls, addr): if not (isinstance(addr,tuple) or isinstance(addr,dict)): addr=(addr,) self.devices[name]=(dev_cls,addr)
@staticmethod def _get_class(name): mdln,clsn=name.rsplit(".") mdl=importlib.import_module(".."+mdln,__name__) cls=getattr(mdl,clsn) return cls
[docs] def add_from_file(self, path): descr=loadfile.load(path,"csv",dtype="generic",columns=["name","class","address"]) for name,cls,addr in descr.r: name=re.sub(r"\s+","_",name) self.add_device(name,self._get_class(cls),addr)
[docs] def get_device(self, name, reopen=False): if (not reopen) and (name in self.opened): return self.opened[name] dev_cls,addr=self.devices[name] if isinstance(addr,dict): dev=dev_cls(**addr) else: dev=dev_cls(*addr) self.opened[name]=dev return dev
__getitem__=get_device __getattr__=get_device def __dir__(self): return list(self.devices.keys())