in luigi/util.py [0:0]
def __call__(self, task_that_inherits):
# Get all parameter objects from each of the underlying tasks
task_iterator = self.tasks_to_inherit or self.kw_tasks_to_inherit.values()
for task_to_inherit in task_iterator:
for param_name, param_obj in task_to_inherit.get_params():
# Check if the parameter exists in the inheriting task
if not hasattr(task_that_inherits, param_name):
# If not, add it to the inheriting task
setattr(task_that_inherits, param_name, param_obj)
# Modify task_that_inherits by adding methods
# Handle unnamed tasks as a list, named as a dictionary
if self.tasks_to_inherit:
def clone_parent(_self, **kwargs):
return _self.clone(cls=self.tasks_to_inherit[0], **kwargs)
task_that_inherits.clone_parent = clone_parent
def clone_parents(_self, **kwargs):
return [
_self.clone(cls=task_to_inherit, **kwargs)
for task_to_inherit in self.tasks_to_inherit
]
task_that_inherits.clone_parents = clone_parents
elif self.kw_tasks_to_inherit:
# Even if there is just one named task, return a dictionary
def clone_parents(_self, **kwargs):
return {
task_name: _self.clone(cls=task_to_inherit, **kwargs)
for task_name, task_to_inherit in self.kw_tasks_to_inherit.items()
}
task_that_inherits.clone_parents = clone_parents
return task_that_inherits