_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.
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
Domain
Subdomains
Defined In
Called By
Source
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