From 233d7e5f29f7ba3ed67c895e61447ec968ca8889 Mon Sep 17 00:00:00 2001 From: Maxim Kulkin Date: Wed, 13 Nov 2013 17:31:35 +0400 Subject: [PATCH] Updated config schema to support finding parameter by full name; improved search speed --- rubick/schema.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/rubick/schema.py b/rubick/schema.py index 45bed28..619895a 100644 --- a/rubick/schema.py +++ b/rubick/schema.py @@ -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 ( - '' % ( - self.name, self.version, self.format, self.parameters) - ) + return ('' % + (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