Updated config schema to support finding parameter by full name; improved search speed

This commit is contained in:
Maxim Kulkin 2013-11-13 17:31:35 +04:00
parent 89d05f35a0
commit 233d7e5f29

View File

@ -83,6 +83,14 @@ class ConfigSchemaRegistry:
return ConfigSchema(fullname, last_version, 'ini', parameters) return ConfigSchema(fullname, last_version, 'ini', parameters)
def param_fullname(name, section=None):
fullname = name
if section and section != 'DEFAULT':
fullname = '%s.%s' % (section, name)
return fullname
class ConfigSchema: class ConfigSchema:
def __init__(self, name, version, format, parameters): def __init__(self, name, version, format, parameters):
@ -90,6 +98,9 @@ class ConfigSchema:
self.version = Version(version) self.version = Version(version)
self.format = format self.format = format
self.parameters = parameters self.parameters = parameters
self._parameterByName = {}
for param in self.parameters:
self._parameterByName[param.fullname] = param
def has_section(self, section): def has_section(self, section):
return ( return (
@ -97,18 +108,13 @@ class ConfigSchema:
) )
def get_parameter(self, name, section=None): def get_parameter(self, name, section=None):
# TODO: optimize this fullname = param_fullname(name, section)
return (
find( return self._parameterByName.get(fullname, None)
self.parameters,
lambda p: p.name == name and p.section == section)
)
def __repr__(self): def __repr__(self):
return ( return ('<ConfigSchema name=%s version=%s format=%s parameters=%s>' %
'<ConfigSchema name=%s version=%s format=%s parameters=%s>' % ( (self.name, self.version, self.format, self.parameters))
self.name, self.version, self.format, self.parameters)
)
class ConfigParameterSchema: class ConfigParameterSchema:
@ -118,6 +124,7 @@ class ConfigParameterSchema:
self.section = section self.section = section
self.name = name self.name = name
self.type = type self.type = type
self.fullname = param_fullname(name, section)
self.description = description self.description = description
self.default = default self.default = default
self.required = required self.required = required