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.
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
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
def PushPrefix(self, prefix):
self.prefix.append(prefix)
def PopPrefix(self):
return self.prefix.pop()
def SetPrefix(self, prefix):
if prefix:
if self.prefix:
self.PopPrefix()
self.PushPrefix(prefix)
else:
self.PopPrefix()
def SetSeparator(self, separator):
self.separator = separator
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)
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
def GetRecordNames():
return _RecordNames
def RecordName(name):
return _RecordNames(name)
def PushPrefix(prefix):
_RecordNames.PushPrefix(prefix)
def PopPrefix():
return _RecordNames.PopPrefix()
def SetPrefix(prefix):
_RecordNames.SetPrefix(prefix)
def SetSeparator(separator):
_RecordNames.SetSeparator(separator)