Resolve requested job names to JobConfig via literals + rendered bindings.
Literal jobs are matched directly; any remaining name is looked up in the
enumerated job set (see :func:enumerate_jobs). Raises a ValueError listing
available names if a requested name is neither a literal job nor a rendered one.
Source Code
View on GitHub
Source code in src/kedro_azureml_pipeline/factory.py
| def resolve_jobs(
config: KedroAzureMLConfig, job_names: list[str], pipelines: Mapping[str, Any] | None = None
) -> dict[str, JobConfig]:
"""Resolve requested job names to ``JobConfig`` via literals + rendered bindings.
Literal jobs are matched directly; any remaining name is looked up in the
enumerated job set (see :func:`enumerate_jobs`). Raises a ``ValueError`` listing
available names if a requested name is neither a literal job nor a rendered one.
"""
literals = {k: v for k, v in config.jobs.items() if not is_factory(k)}
has_factories = any(is_factory(k) for k in config.jobs)
resolved: dict[str, JobConfig] = {}
all_jobs: dict[str, JobConfig] | None = None
missing: list[str] = []
for name in job_names:
if name in literals:
resolved[name] = literals[name]
continue
if not has_factories: # nothing to render; only literal jobs exist
missing.append(name)
continue
if all_jobs is None:
all_jobs = enumerate_jobs(config, pipelines)
if name in all_jobs:
resolved[name] = all_jobs[name]
else:
missing.append(name)
if missing:
available = sorted(all_jobs if all_jobs is not None else literals)
raise ValueError(
f"Job(s) not found in config: {', '.join(sorted(missing))}. Available jobs: {', '.join(available)}"
)
return resolved
|