__getattr__ OD
This commit is contained in:
parent
2f40216fad
commit
8709386570
|
@ -120,8 +120,7 @@ def test_find_in_config():
|
||||||
assert conf.find(byname='prop') == [conf.unwrap_from_path('gc.prop')]
|
assert conf.find(byname='prop') == [conf.unwrap_from_path('gc.prop')]
|
||||||
conf.read_write()
|
conf.read_write()
|
||||||
raises(AttributeError, "assert conf.find(byname='prop')")
|
raises(AttributeError, "assert conf.find(byname='prop')")
|
||||||
assert conf.find(byname='prop', check_properties=False) == [conf.unwrap_from_path('gc.gc2.prop'), conf.unwrap_from_path('gc.prop')]
|
assert conf.find(byname='prop', check_properties=False) == [conf.unwrap_from_path('gc.prop'), conf.unwrap_from_path('gc.gc2.prop')]
|
||||||
#assert conf.find_first(byname='prop') == conf.unwrap_from_path('gc.prop')
|
|
||||||
# combinaison of filters
|
# combinaison of filters
|
||||||
assert conf.find(bytype=BoolOption, byname='dummy') == [conf.unwrap_from_path('gc.dummy')]
|
assert conf.find(bytype=BoolOption, byname='dummy') == [conf.unwrap_from_path('gc.dummy')]
|
||||||
assert conf.find_first(bytype=BoolOption, byname='dummy') == conf.unwrap_from_path('gc.dummy')
|
assert conf.find_first(bytype=BoolOption, byname='dummy') == conf.unwrap_from_path('gc.dummy')
|
||||||
|
@ -134,7 +133,7 @@ def test_find_in_config():
|
||||||
assert conf.gc.find_first(byname='bool', byvalue=False) == conf.unwrap_from_path('gc.gc2.bool')
|
assert conf.gc.find_first(byname='bool', byvalue=False) == conf.unwrap_from_path('gc.gc2.bool')
|
||||||
raises(AttributeError, "assert conf.gc.find_first(byname='bool', byvalue=True)")
|
raises(AttributeError, "assert conf.gc.find_first(byname='bool', byvalue=True)")
|
||||||
raises(AttributeError, "conf.gc.find(byname='wantref').first()")
|
raises(AttributeError, "conf.gc.find(byname='wantref').first()")
|
||||||
assert conf.gc.find(byname='prop', check_properties=False) == [conf.unwrap_from_path('gc.gc2.prop'), conf.unwrap_from_path('gc.prop')]
|
assert conf.gc.find(byname='prop', check_properties=False) == [conf.unwrap_from_path('gc.prop'), conf.unwrap_from_path('gc.gc2.prop')]
|
||||||
conf.read_only()
|
conf.read_only()
|
||||||
assert conf.gc.find(byname='prop') == [conf.unwrap_from_path('gc.prop')]
|
assert conf.gc.find(byname='prop') == [conf.unwrap_from_path('gc.prop')]
|
||||||
# not OptionDescription
|
# not OptionDescription
|
||||||
|
|
|
@ -320,9 +320,7 @@ class SubConfig(object):
|
||||||
# if value and/or check_properties are set, need all avalaible option
|
# if value and/or check_properties are set, need all avalaible option
|
||||||
# If first one has no good value or not good property check second one
|
# If first one has no good value or not good property check second one
|
||||||
# and so on
|
# and so on
|
||||||
#FIXME
|
only_first = first is True and byvalue is None and check_properties is None
|
||||||
#only_first = first == True and value is None and check_properties is None
|
|
||||||
only_first = first
|
|
||||||
options = self.cfgimpl_get_description().impl_get_options_paths(
|
options = self.cfgimpl_get_description().impl_get_options_paths(
|
||||||
bytype, byname, _subpath, only_first)
|
bytype, byname, _subpath, only_first)
|
||||||
for path, option in options:
|
for path, option in options:
|
||||||
|
|
|
@ -366,7 +366,7 @@ class Option(OnlyOption):
|
||||||
#so _name is already set
|
#so _name is already set
|
||||||
is_readonly = True
|
is_readonly = True
|
||||||
#FIXME je n'aime pas ce except ...
|
#FIXME je n'aime pas ce except ...
|
||||||
except:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
elif name != '_readonly':
|
elif name != '_readonly':
|
||||||
is_readonly = self.impl_is_readonly()
|
is_readonly = self.impl_is_readonly()
|
||||||
|
@ -805,7 +805,6 @@ class SymLinkOption(OnlyOption):
|
||||||
super(SymLinkOption, self)._impl_setstate(descr)
|
super(SymLinkOption, self)._impl_setstate(descr)
|
||||||
|
|
||||||
def impl_get_information(self, key, default=None):
|
def impl_get_information(self, key, default=None):
|
||||||
#FIXME ne devrait pas etre utile si ?
|
|
||||||
return self._opt.impl_get_information(key, default)
|
return self._opt.impl_get_information(key, default)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1179,38 +1178,15 @@ class OptionDescription(BaseOption, StorageOptionDescription):
|
||||||
self._group_type = groups.default
|
self._group_type = groups.default
|
||||||
|
|
||||||
def impl_getrequires(self):
|
def impl_getrequires(self):
|
||||||
#FIXME
|
|
||||||
return self._requires
|
return self._requires
|
||||||
|
|
||||||
def impl_getdoc(self):
|
def impl_getdoc(self):
|
||||||
return self.impl_get_information('doc')
|
return self.impl_get_information('doc')
|
||||||
|
|
||||||
def impl_validate(self, *args):
|
def impl_validate(self, *args):
|
||||||
#FIXME a voir ...
|
"""usefull for OptionDescription"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def __getattr__(self, name):
|
|
||||||
try:
|
|
||||||
if name.startswith('_') or name.startswith('impl_'):
|
|
||||||
return object.__getattribute__(self, name)
|
|
||||||
else:
|
|
||||||
#FIXME regression ... devrait etre un query !
|
|
||||||
for child in self._children:
|
|
||||||
if child.impl_getname() == name:
|
|
||||||
return child
|
|
||||||
#convert to object
|
|
||||||
#return session.query(child._type).filter_by(id=child.id).first()
|
|
||||||
#return pouet#self._children[1][self._children[0].index(name)]
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
raise AttributeError(_('unknown Option {0} '
|
|
||||||
'in OptionDescription {1}'
|
|
||||||
'').format(name, self.impl_getname()))
|
|
||||||
|
|
||||||
#def impl_getkey(self, config):
|
|
||||||
# return tuple([child.impl_getkey(getattr(config, child.impl_getname()))
|
|
||||||
# for child in self.impl_getchildren()])
|
|
||||||
|
|
||||||
def impl_getpaths(self, include_groups=False, _currpath=None):
|
def impl_getpaths(self, include_groups=False, _currpath=None):
|
||||||
"""returns a list of all paths in self, recursively
|
"""returns a list of all paths in self, recursively
|
||||||
_currpath should not be provided (helps with recursion)
|
_currpath should not be provided (helps with recursion)
|
||||||
|
@ -1288,7 +1264,6 @@ class OptionDescription(BaseOption, StorageOptionDescription):
|
||||||
if init:
|
if init:
|
||||||
self._readonly = True
|
self._readonly = True
|
||||||
|
|
||||||
|
|
||||||
# ____________________________________________________________
|
# ____________________________________________________________
|
||||||
def impl_set_group_type(self, group_type):
|
def impl_set_group_type(self, group_type):
|
||||||
"""sets a given group object to an OptionDescription
|
"""sets a given group object to an OptionDescription
|
||||||
|
|
|
@ -382,8 +382,6 @@ class StorageOptionDescription(object):
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
def impl_get_options_paths(self, bytype, byname, _subpath, only_first):
|
def impl_get_options_paths(self, bytype, byname, _subpath, only_first):
|
||||||
#FIXME tester si 1er est un descr ...
|
|
||||||
#FAIRE UN JOIN pour only_first
|
|
||||||
sqlquery = session.query(Cache).filter_by(descr=self.id)
|
sqlquery = session.query(Cache).filter_by(descr=self.id)
|
||||||
if bytype is None:
|
if bytype is None:
|
||||||
sqlquery = sqlquery.filter(not_(Cache.opt_type == 'OptionDescription'))
|
sqlquery = sqlquery.filter(not_(Cache.opt_type == 'OptionDescription'))
|
||||||
|
@ -415,6 +413,16 @@ class StorageOptionDescription(object):
|
||||||
ret.append((opt.path, option))
|
ret.append((opt.path, option))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
if name.startswith('_') or name.startswith('impl_'):
|
||||||
|
return object.__getattribute__(self, name)
|
||||||
|
ret = session.query(_Base).filter_by(_parent=self.id, _name=name).first()
|
||||||
|
if ret is None:
|
||||||
|
raise AttributeError(_('unknown Option {0} '
|
||||||
|
'in OptionDescription {1}'
|
||||||
|
'').format(name, self.impl_getname()))
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
class StorageBase(_Base):
|
class StorageBase(_Base):
|
||||||
@declared_attr
|
@declared_attr
|
||||||
|
|
Loading…
Reference in New Issue