commented code for unicity by name

This commit is contained in:
gwen 2012-08-16 11:42:24 +02:00
parent dc99bbc44e
commit d8370b008b
2 changed files with 35 additions and 4 deletions

View file

@ -42,22 +42,32 @@ def make_description_duplicates():
wantframework_option = BoolOption('wantframework', 'Test requires', wantframework_option = BoolOption('wantframework', 'Test requires',
default=False, default=False,
requires=['boolop']) requires=['boolop'])
# dummy2 (same name) # dummy2 (same path)
gcdummy2 = BoolOption('dummy', 'dummy2', default=True) gcdummy2 = BoolOption('dummy', 'dummy2', default=True)
# dummy3 (same name)
gcdummy3 = BoolOption('dummy', 'dummy2', default=True)
gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, gcdummy2, floatoption]) gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, gcdummy2, floatoption])
descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption, descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
wantref_option, stroption, wantref_option, stroption,
wantframework_option, wantframework_option,
intoption, boolop]) intoption, boolop, gcdummy3])
return descr return descr
def test_identical_names(): def test_identical_paths():
"""If in the schema (the option description) there is something that """If in the schema (the option description) there is something that
have the same name, an exection is raised have the same name, an exection is raised
""" """
descr = make_description_duplicates() descr = make_description_duplicates()
raises(ConflictConfigError, "cfg = Config(descr)") raises(ConflictConfigError, "cfg = Config(descr)")
#def test_identical_for_names():
# """if there is something that
# have the same name, an exection is raised
# """
# descr = make_description_duplicates()
# raises(ConflictConfigError, "cfg = Config(descr)")
def make_description2(): def make_description2():
gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref') gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
gcdummy = BoolOption('dummy', 'dummy', default=False) gcdummy = BoolOption('dummy', 'dummy', default=False)
@ -202,4 +212,3 @@ def test_disabled_with_group():
raises(PropertiesOptionError, "cfg.gc.name") raises(PropertiesOptionError, "cfg.gc.name")
assert gcgroup._is_disabled() assert gcgroup._is_disabled()

View file

@ -37,6 +37,8 @@ class Config(object):
_cfgimpl_frozen = False _cfgimpl_frozen = False
_cfgimpl_owner = default_owner _cfgimpl_owner = default_owner
_cfgimpl_toplevel = None _cfgimpl_toplevel = None
# TODO implement unicity by name
# _cfgimpl_unique_names = True
def __init__(self, descr, parent=None, **overrides): def __init__(self, descr, parent=None, **overrides):
self._cfgimpl_descr = descr self._cfgimpl_descr = descr
@ -61,6 +63,26 @@ class Config(object):
raise ConflictConfigError('duplicate option name: ' raise ConflictConfigError('duplicate option name: '
'{0}'.format(dup._name)) '{0}'.format(dup._name))
# TODO implement unicity by name
# def _validate_duplicates_for_names(self, children):
# "validates duplicates names agains the whole config"
# rootconfig = self._cfgimpl_get_toplevel()
# if self._cfgimpl_unique_names:
# for dup in children:
# try:
# print dup._name
# try:
# print rootconfig.get(dup._name)
# except AttributeError:
# pass
# raise NotFoundError
# #rootconfig.get(dup._name)
# except NotFoundError:
# pass # no identical names, it's fine
# else:
# raise ConflictConfigError('duplicate option name: '
# '{0}'.format(dup._name))
def _cfgimpl_build(self, overrides): def _cfgimpl_build(self, overrides):
self._validate_duplicates(self._cfgimpl_descr._children) self._validate_duplicates(self._cfgimpl_descr._children)
for child in self._cfgimpl_descr._children: for child in self._cfgimpl_descr._children: