Home / Function/ test_discriminator_pydantic_v2() — fastapi Function Reference

test_discriminator_pydantic_v2() — fastapi Function Reference

Architecture documentation for the test_discriminator_pydantic_v2() function in test_union_body_discriminator.py from the fastapi codebase.

Entity Profile

Dependency Diagram

graph TD
  e31bc680_496a_2d95_67f7_97ceff78c63f["test_discriminator_pydantic_v2()"]
  b7547d18_a665_12ea_3e49_b878c6e6d305["test_union_body_discriminator.py"]
  e31bc680_496a_2d95_67f7_97ceff78c63f -->|defined in| b7547d18_a665_12ea_3e49_b878c6e6d305
  style e31bc680_496a_2d95_67f7_97ceff78c63f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

tests/test_union_body_discriminator.py lines 10–176

def test_discriminator_pydantic_v2() -> None:
    from pydantic import Tag

    app = FastAPI()

    class FirstItem(BaseModel):
        value: Literal["first"]
        price: int

    class OtherItem(BaseModel):
        value: Literal["other"]
        price: float

    Item = Annotated[
        Union[Annotated[FirstItem, Tag("first")], Annotated[OtherItem, Tag("other")]],
        Field(discriminator="value"),
    ]

    @app.post("/items/")
    def save_union_body_discriminator(
        item: Item, q: Annotated[str, Field(description="Query string")]
    ) -> dict[str, Any]:
        return {"item": item}

    client = TestClient(app)
    response = client.post("/items/?q=first", json={"value": "first", "price": 100})
    assert response.status_code == 200, response.text
    assert response.json() == {"item": {"value": "first", "price": 100}}

    response = client.post("/items/?q=other", json={"value": "other", "price": 100.5})
    assert response.status_code == 200, response.text
    assert response.json() == {"item": {"value": "other", "price": 100.5}}

    response = client.get("/openapi.json")
    assert response.status_code == 200, response.text
    assert response.json() == snapshot(
        {
            "openapi": "3.1.0",
            "info": {"title": "FastAPI", "version": "0.1.0"},
            "paths": {
                "/items/": {
                    "post": {
                        "summary": "Save Union Body Discriminator",
                        "operationId": "save_union_body_discriminator_items__post",
                        "parameters": [
                            {
                                "name": "q",
                                "in": "query",
                                "required": True,
                                "schema": {
                                    "type": "string",
                                    "description": "Query string",
                                    "title": "Q",
                                },
                            }
                        ],
                        "requestBody": {
                            "required": True,
                            "content": {
                                "application/json": {
                                    "schema": {
                                        "oneOf": [
                                            {"$ref": "#/components/schemas/FirstItem"},
                                            {"$ref": "#/components/schemas/OtherItem"},
                                        ],
                                        "discriminator": {
                                            "propertyName": "value",
                                            "mapping": {
                                                "first": "#/components/schemas/FirstItem",
                                                "other": "#/components/schemas/OtherItem",
                                            },
                                        },
                                        "title": "Item",
                                    }
                                }
                            },
                        },
                        "responses": {
                            "200": {
                                "description": "Successful Response",
                                "content": {

Domain

Subdomains

Frequently Asked Questions

What does test_discriminator_pydantic_v2() do?
test_discriminator_pydantic_v2() is a function in the fastapi codebase, defined in tests/test_union_body_discriminator.py.
Where is test_discriminator_pydantic_v2() defined?
test_discriminator_pydantic_v2() is defined in tests/test_union_body_discriminator.py at line 10.

Analyze Your Own Codebase

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

Try Supermodel Free