find in api return an api object
This commit is contained in:
@ -19,6 +19,7 @@
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
from copy import copy
|
||||
from itertools import chain
|
||||
|
||||
|
||||
from ..i18n import _
|
||||
@ -254,74 +255,61 @@ class OptionDescriptionWalk(CacheOptionDescription):
|
||||
bytype,
|
||||
byname,
|
||||
_subpath,
|
||||
only_first,
|
||||
config_bag):
|
||||
find_results = []
|
||||
def _filter_by_type(path,
|
||||
option):
|
||||
if isinstance(option,
|
||||
bytype):
|
||||
if byname is None:
|
||||
if option.issubdyn():
|
||||
for doption in self.build_dynoptions(option, config_bag):
|
||||
dpath = doption.impl_getname(config_bag.config)
|
||||
yield (dpath, doption)
|
||||
else:
|
||||
yield (path, option)
|
||||
|
||||
def _filter_by_name(path,
|
||||
option):
|
||||
name = option.impl_getname()
|
||||
if option.issubdyn():
|
||||
found = False
|
||||
if byname.startswith(name):
|
||||
for doption in self.build_dynoptions(option, config_bag):
|
||||
if byname == doption.impl_getname():
|
||||
dpath = doption.impl_getpath(config_bag.config)
|
||||
find_results.append((dpath, doption))
|
||||
found = True
|
||||
yield (dpath, doption)
|
||||
break
|
||||
if not found:
|
||||
return False
|
||||
else:
|
||||
if not byname == name:
|
||||
return False
|
||||
find_results.append((path, option))
|
||||
return True
|
||||
|
||||
def _filter_by_type(path,
|
||||
option):
|
||||
if isinstance(option,
|
||||
bytype):
|
||||
#if byname is not None, check option byname in _filter_by_name
|
||||
#not here
|
||||
if byname is None:
|
||||
if option.issubdyn():
|
||||
for doption in self.build_dynoptions(option, config_bag):
|
||||
dpath = doption.impl_getname(config_bag.config)
|
||||
find_results.append((dpath, doption))
|
||||
else:
|
||||
find_results.append((path, option))
|
||||
return True
|
||||
return False
|
||||
if byname == name:
|
||||
yield (path, option)
|
||||
|
||||
def _filter(path, option):
|
||||
generators = []
|
||||
if bytype is not None:
|
||||
retval = _filter_by_type(path, option)
|
||||
if byname is None:
|
||||
return retval
|
||||
generators.append(_filter_by_type(path, option))
|
||||
if byname is not None:
|
||||
return _filter_by_name(path, option)
|
||||
generators.append(_filter_by_name(path, option))
|
||||
if len(generators) == 1:
|
||||
return generators[0]
|
||||
else:
|
||||
return chain(*generators)
|
||||
|
||||
opts, paths = self._cache_paths
|
||||
for index, path in enumerate(paths):
|
||||
option = opts[index]
|
||||
for index, option in enumerate(opts):
|
||||
if option.impl_is_optiondescription():
|
||||
continue
|
||||
path = paths[index]
|
||||
if _subpath is not None and not path.startswith(_subpath + '.'):
|
||||
continue
|
||||
if bytype == byname is None:
|
||||
if option.issubdyn():
|
||||
for doption in self.build_dynoptions(option, config_bag):
|
||||
dpath = doption.impl_getpath(config_bag.config)
|
||||
find_results.append((dpath, doption))
|
||||
yield (dpath, doption)
|
||||
else:
|
||||
find_results.append((dpath, option))
|
||||
yield (dpath, option)
|
||||
else:
|
||||
if _filter(path, option) is False:
|
||||
continue
|
||||
if only_first:
|
||||
return find_results
|
||||
return find_results
|
||||
for ret in _filter(path, option):
|
||||
yield ret
|
||||
|
||||
def impl_getchild(self,
|
||||
name,
|
||||
|
Reference in New Issue
Block a user