Source code for pasteur.kedro.pipelines.utils
from typing import Callable
from ...utils import gen_closure, list_unique
from ...utils.parser import get_params_for_pipe
def _params_closure(
fun: Callable, view: str, arguments: list[str], params: dict, **kwargs
):
meta = get_params_for_pipe(view, params)
meta_kwargs = {}
for name in arguments:
if name not in meta:
raise AttributeError(f"Parameter '{name}' not provided for view '{view}'.")
meta_kwargs[name] = meta[name]
ext_kwargs = {**meta_kwargs, **kwargs}
return fun(**ext_kwargs)
[docs]
def get_params_closure(fun: Callable, view: str, *arguments: str):
return gen_closure(_params_closure, fun, view, arguments)
def _lazy_execute(anchor: str, module: str, fun: str, *args, **kwargs):
from importlib import import_module
module = import_module(module, anchor) # type: ignore
return getattr(module, fun)(*args, **kwargs)
[docs]
def lazy_load(anchor, module: str, funs: list[str] | str):
if isinstance(funs, str):
return gen_closure(_lazy_execute, anchor, module, funs, _fn=funs)
return (gen_closure(_lazy_execute, anchor, module, fun, _fn=fun) for fun in funs)