[selector] make select a hardcoded argument, and propaget it (see #6)

This commit is contained in:
Noe Brucy
2021-01-28 11:58:16 +01:00
parent 9f8da0a8db
commit 8c82117dfc
3 changed files with 38 additions and 30 deletions
+23 -13
View File
@@ -77,7 +77,13 @@ class BaseProcessor:
print(self.log_id + string)
def process(
self, to_process, arg=None, overwrite=False, overwrite_dep=False, **kwargs
self,
to_process,
arg=None,
overwrite=False,
overwrite_dep=False,
select=None,
**kwargs,
):
"""
Process the rule `to_process`
@@ -89,7 +95,7 @@ class BaseProcessor:
if to_process in self.rules:
rule = self.rules[to_process]
return self._solve_and_process_rule(
to_process, rule, arg, overwrite, **kwargs
to_process, rule, arg, overwrite, select, **kwargs
)
else:
self._log(
@@ -99,12 +105,14 @@ class BaseProcessor:
"ERROR",
)
def _solve_and_process_rule(self, name, rule, arg, overwrite=False, **kwargs):
updated = self._solve_dependencies(name, rule, arg, overwrite, **kwargs)
def _solve_and_process_rule(
self, name, rule, arg, overwrite=False, select=None, **kwargs
):
updated = self._solve_dependencies(name, rule, arg, overwrite, select)
overwrite_rule = overwrite or updated
return self._process_rule(name, rule, arg, overwrite_rule, **kwargs)
return self._process_rule(name, rule, arg, overwrite_rule, select, **kwargs)
def _solve_dependencies(self, name, rule, arg, overwrite=False, **kwargs):
def _solve_dependencies(self, name, rule, arg, overwrite=False, select=None):
self.done_before_dep = len(self.just_done)
@@ -113,7 +121,7 @@ class BaseProcessor:
# get arguments
try:
dep_arg = rule.dependencies[dep]
except:
except (TypeError, KeyError):
dep_arg = arg
if dep_arg == "__parent__":
@@ -123,20 +131,22 @@ class BaseProcessor:
# it to a child processor
if self.solve_self_dep and dep in self.rules:
rule_dep = self.rules[dep]
self._solve_and_process_rule(dep, rule_dep, dep_arg, self.overwrite_dep)
self._solve_and_process_rule(
dep, rule_dep, dep_arg, self.overwrite_dep, select
)
else:
self._not_self_dep(name, dep, dep_arg, self.overwrite_dep, **kwargs)
self._not_self_dep(name, dep, dep_arg, self.overwrite_dep, select)
# Whether dependencies where updated
return len(self.just_done) > self.done_before_dep
def _not_self_dep(self, name, dep, dep_arg, overwrite, **kwargs):
def _not_self_dep(self, name, dep, dep_arg, overwrite, select=None):
self._log("Dependency {} for {} is unknown".format(dep, name), "ERROR")
def _needs_computation(self, overwrite, name_full):
return overwrite
def _process_rule(self, name, rule, arg, overwrite=False, **kwargs):
def _process_rule(self, name, rule, arg, overwrite=False, select=None, **kwargs):
if arg is not None:
name_full = rule.group + "/" + name + "_" + str(arg)
else:
@@ -186,11 +196,11 @@ class HDF5Container(BaseProcessor):
def _needs_computation(self, overwrite, name_full):
return overwrite or not (name_full in self.save)
def _process_rule(self, name, rule, arg, overwrite, **kwargs):
def _process_rule(self, name, rule, arg, overwrite, select, **kwargs):
self.open()
try:
super(HDF5Container, self)._process_rule(
name, rule, arg, overwrite, **kwargs
name, rule, arg, overwrite, select, **kwargs
)
finally:
self.close()