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