Source code for epicsdbbuilder.recordnames

'''Support for default record name configurations.'''

from . import parameter


__all__ = [
    'SimpleRecordNames', 'TemplateRecordNames',
    'SetSimpleRecordNames', 'SetTemplateRecordNames',
    'RecordName', 'SetRecordNames', 'GetRecordNames',
    'PushPrefix', 'PopPrefix', 'SetPrefix', 'SetSeparator']


# Default record name support: each record is created with precisely the name
# it is given.
[docs]class SimpleRecordNames(object): # Maximum record name length for EPICS 3.14 maxLength = 61 def __init__(self, prefix = '', separator = ':', check = True): self.prefix = [prefix] if prefix else [] self.separator = separator self.check = check
[docs] def __call__(self, name): name = self.separator.join(map(str, self.prefix + [name])) assert not self.check or 0 < len(name) <= self.maxLength, \ 'Record name "%s" too long' % name return name
[docs] def PushPrefix(self, prefix): self.prefix.append(prefix)
[docs] def PopPrefix(self): return self.prefix.pop()
[docs] def SetPrefix(self, prefix): if prefix: if self.prefix: self.PopPrefix() self.PushPrefix(prefix) else: self.PopPrefix()
def SetSeparator(self, separator): self.separator = separator
[docs]class TemplateRecordNames(SimpleRecordNames): def __init__(self, prefix = None, separator = ':'): if prefix is None: prefix = parameter.Parameter('DEVICE', 'Device name') SimpleRecordNames.__init__(self, prefix, separator, False)
[docs]def SetSimpleRecordNames(prefix = '', separator = ''): SetRecordNames(SimpleRecordNames(prefix, separator))
[docs]def SetTemplateRecordNames(prefix = None, separator = ':'): SetRecordNames(TemplateRecordNames(prefix, separator))
# By default record names are unmodified. def _RecordNames(name): return name
[docs]def SetRecordNames(names): global _RecordNames current = _RecordNames _RecordNames = names return current
[docs]def GetRecordNames(): return _RecordNames
[docs]def RecordName(name): return _RecordNames(name)
[docs]def PushPrefix(prefix): _RecordNames.PushPrefix(prefix)
[docs]def PopPrefix(): _RecordNames.PopPrefix()
[docs]def SetPrefix(prefix): _RecordNames.SetPrefix(prefix)
[docs]def SetSeparator(separator): _RecordNames.SetSeparator(separator)