Files
lda-wf/src/wf_api/refs.py
T
2026-06-02 09:52:24 +07:00

34 lines
1.2 KiB
Python

from __future__ import annotations
from typing import Any, TypeAlias
from pydantic import TypeAdapter, ValidationError
from wf_artifacts import WorkflowCapabilityRef
from wf_platform import CapabilityRef
WorkflowSurfaceCapabilityId: TypeAlias = CapabilityRef | WorkflowCapabilityRef
_CAPABILITY_REF_ADAPTER = TypeAdapter(CapabilityRef)
_WORKFLOW_CAPABILITY_REF_ADAPTER = TypeAdapter(WorkflowCapabilityRef)
def parse_workflow_surface_capability_id(
value: str | dict[str, Any],
) -> WorkflowSurfaceCapabilityId:
"""Parse a workflow API capability id into its real domain ref.
API callers still pass strings at protocol boundaries. Internally,
workflow-facing capability ids are either live source capabilities or saved
wrapper artifacts, so this parser avoids inventing a third identifier model.
"""
if isinstance(value, dict):
if "artifact_id" in value and "version" in value:
return _WORKFLOW_CAPABILITY_REF_ADAPTER.validate_python(value)
return _CAPABILITY_REF_ADAPTER.validate_python(value)
try:
return WorkflowCapabilityRef.parse(value)
except TypeError, ValueError, ValidationError:
return CapabilityRef.parse(value)