Source code for pyebus.circuitmap

"""Mapping Of EBUS Circuit Names To Human-readable Names."""


[docs]class CircuitMap(dict): """ Mapping of EBUS-circuit names To human-readable Names. >>> c = CircuitMap({ ... 'broadcast': '*', ... 'bai': 'Heater', ... 'mc': 'Mixer', ... 'hwc': 'Water', ... }) >>> for circuitname, humanname in c.items(): ... print(circuitname, '=', humanname) broadcast = * bai = Heater mc = Mixer hwc = Water >>> tuple(c) ('broadcast', 'bai', 'mc', 'hwc') Custom mappigns are added dictionary-like. >>> c = CircuitMap() >>> c['bai'] = 'Heater' >>> c['boo'] = 'My Boo' >>> c['mc.4'] = 'Mixer Unit 2' """
[docs] def get_humanname(self, circuitname): """ Return human-readable name for `circuitname`. The `.X` suffix distinguishes multiple instances of the same unit, this is handled gracefully. Returns: str: human-readable name >>> c = CircuitMap({ ... 'broadcast': '*', ... 'bai': 'Heater', ... 'mc': 'Mixer', ... 'hwc': 'Water', ... }) >>> c.get_humanname('bai') 'Heater' >>> c.get_humanname('bai.3') 'Heater#3' >>> c.get_humanname('mc.4') 'Mixer#4' >>> c.get_humanname('unknown') 'unknown' >>> c.get_humanname('unknown.4') 'unknown.4' """ # lookup full name humanname = self.get(circuitname, None) # loopup basename if humanname is None and "." in circuitname: basename, suffix = circuitname.split(".") humanname = self.get(basename, None) if humanname is not None: humanname = f"{humanname}#{suffix}" # use circuitname as default if humanname is None: humanname = circuitname return humanname