Home / Function/ _build_discriminated_union_meta() — anthropic-sdk-python Function Reference

_build_discriminated_union_meta() — anthropic-sdk-python Function Reference

Architecture documentation for the _build_discriminated_union_meta() function in _models.py from the anthropic-sdk-python codebase.

Function python AnthropicClient AsyncAPI calls 3 called by 1

Entity Profile

Dependency Diagram

graph TD
  d05ec88e_2ca5_0a17_2c96_e788b0ef33ff["_build_discriminated_union_meta()"]
  3912cc3f_b0e8_a732_b8e2_613b018b830d["_models.py"]
  d05ec88e_2ca5_0a17_2c96_e788b0ef33ff -->|defined in| 3912cc3f_b0e8_a732_b8e2_613b018b830d
  1f1fa4b5_5943_136f_2cef_23465a8f7aee["construct_type()"]
  1f1fa4b5_5943_136f_2cef_23465a8f7aee -->|calls| d05ec88e_2ca5_0a17_2c96_e788b0ef33ff
  afc80c40_7ec9_e8a7_8063_f2ab74bc2ee7["get()"]
  d05ec88e_2ca5_0a17_2c96_e788b0ef33ff -->|calls| afc80c40_7ec9_e8a7_8063_f2ab74bc2ee7
  6863d334_f818_2044_933f_386d7fd98f75["is_basemodel_type()"]
  d05ec88e_2ca5_0a17_2c96_e788b0ef33ff -->|calls| 6863d334_f818_2044_933f_386d7fd98f75
  106e5427_56f3_c972_a573_f6852d1bf1e7["_extract_field_schema_pv2()"]
  d05ec88e_2ca5_0a17_2c96_e788b0ef33ff -->|calls| 106e5427_56f3_c972_a573_f6852d1bf1e7
  style d05ec88e_2ca5_0a17_2c96_e788b0ef33ff fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

src/anthropic/_models.py lines 667–724

def _build_discriminated_union_meta(*, union: type, meta_annotations: tuple[Any, ...]) -> DiscriminatorDetails | None:
    cached = DISCRIMINATOR_CACHE.get(union)
    if cached is not None:
        return cached

    discriminator_field_name: str | None = None

    for annotation in meta_annotations:
        if isinstance(annotation, PropertyInfo) and annotation.discriminator is not None:
            discriminator_field_name = annotation.discriminator
            break

    if not discriminator_field_name:
        return None

    mapping: dict[str, type] = {}
    discriminator_alias: str | None = None

    for variant in get_args(union):
        variant = strip_annotated_type(variant)
        if is_basemodel_type(variant):
            if PYDANTIC_V1:
                field_info = cast("dict[str, FieldInfo]", variant.__fields__).get(discriminator_field_name)  # pyright: ignore[reportDeprecated, reportUnnecessaryCast]
                if not field_info:
                    continue

                # Note: if one variant defines an alias then they all should
                discriminator_alias = field_info.alias

                if (annotation := getattr(field_info, "annotation", None)) and is_literal_type(annotation):
                    for entry in get_args(annotation):
                        if isinstance(entry, str):
                            mapping[entry] = variant
            else:
                field = _extract_field_schema_pv2(variant, discriminator_field_name)
                if not field:
                    continue

                # Note: if one variant defines an alias then they all should
                discriminator_alias = field.get("serialization_alias")

                field_schema = field["schema"]

                if field_schema["type"] == "literal":
                    for entry in cast("LiteralSchema", field_schema)["expected"]:
                        if isinstance(entry, str):
                            mapping[entry] = variant

    if not mapping:
        return None

    details = DiscriminatorDetails(
        mapping=mapping,
        discriminator_field=discriminator_field_name,
        discriminator_alias=discriminator_alias,
    )
    DISCRIMINATOR_CACHE.setdefault(union, details)
    return details

Subdomains

Called By

Frequently Asked Questions

What does _build_discriminated_union_meta() do?
_build_discriminated_union_meta() is a function in the anthropic-sdk-python codebase, defined in src/anthropic/_models.py.
Where is _build_discriminated_union_meta() defined?
_build_discriminated_union_meta() is defined in src/anthropic/_models.py at line 667.
What does _build_discriminated_union_meta() call?
_build_discriminated_union_meta() calls 3 function(s): _extract_field_schema_pv2, get, is_basemodel_type.
What calls _build_discriminated_union_meta()?
_build_discriminated_union_meta() is called by 1 function(s): construct_type.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free