forked from M-Labs/artiq
environment: implement HasEnvironment.call_child_method (#1366)
This commit is contained in:
parent
0b1fb255a9
commit
4c1fe1de0d
|
@ -222,6 +222,23 @@ class HasEnvironment:
|
||||||
def register_child(self, child):
|
def register_child(self, child):
|
||||||
self.children.append(child)
|
self.children.append(child)
|
||||||
|
|
||||||
|
def call_child_method(self, method, *args, **kwargs):
|
||||||
|
"""Calls the named method for each child, if it exists for that child,
|
||||||
|
in the order of registration.
|
||||||
|
|
||||||
|
:param method: Name of the method to call
|
||||||
|
:type method: str
|
||||||
|
:param args: Tuple of positional arguments to pass to all children
|
||||||
|
:param kwargs: Dict of keyword arguments to pass to all children
|
||||||
|
"""
|
||||||
|
for child in self.children:
|
||||||
|
try:
|
||||||
|
child_method = getattr(child, method)
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
child_method(*args, **kwargs)
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
"""Should be implemented by the user to request arguments.
|
"""Should be implemented by the user to request arguments.
|
||||||
|
|
||||||
|
@ -435,11 +452,9 @@ class EnvExperiment(Experiment, HasEnvironment):
|
||||||
Most experiments should derive from this class."""
|
Most experiments should derive from this class."""
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
"""This default prepare method calls :meth:`~artiq.language.environment.Experiment.prepare`
|
"""This default prepare method calls :meth:`~artiq.language.environment.Experiment.prepare`
|
||||||
for all children, in the order of instantiation, if the child has a
|
for all children, in the order of registration, if the child has a
|
||||||
:meth:`~artiq.language.environment.Experiment.prepare` method."""
|
:meth:`~artiq.language.environment.Experiment.prepare` method."""
|
||||||
for child in self.children:
|
self.call_child_method("prepare")
|
||||||
if hasattr(child, "prepare"):
|
|
||||||
child.prepare()
|
|
||||||
|
|
||||||
|
|
||||||
def is_experiment(o):
|
def is_experiment(o):
|
||||||
|
|
Loading…
Reference in New Issue