Issue Manager / issue-manager (push) Has been cancelled
Build Docs / changes (push) Has been cancelled
Build Docs / langs (push) Has been cancelled
Build Docs / build-docs (push) Has been cancelled
Build Docs / docs-all-green (push) Has been cancelled
Conflict detector / main (push) Has been cancelled
Test Redistribute / test-redistribute (fastapi) (push) Has been cancelled
Test Redistribute / test-redistribute (fastapi-slim) (push) Has been cancelled
Test Redistribute / test-redistribute-alls-green (push) Has been cancelled
Test / lint (push) Has been cancelled
Test / test (pydantic-v1, 3.10) (push) Has been cancelled
Test / test (pydantic-v1, 3.11) (push) Has been cancelled
Test / test (pydantic-v1, 3.13) (push) Has been cancelled
Test / test (pydantic-v1, 3.8) (push) Has been cancelled
Test / test (pydantic-v1, 3.9) (push) Has been cancelled
Test / test (pydantic-v2, 3.10) (push) Has been cancelled
Test / test (pydantic-v2, 3.11) (push) Has been cancelled
Test / test (pydantic-v2, 3.12) (push) Has been cancelled
Test / test (pydantic-v2, 3.13) (push) Has been cancelled
Test / test (pydantic-v2, 3.14) (push) Has been cancelled
Test / test (pydantic-v2, 3.8) (push) Has been cancelled
Test / test (pydantic-v2, 3.9) (push) Has been cancelled
Test / coverage-combine (push) Has been cancelled
Test / check (push) Has been cancelled
Label Approved / label-approved (push) Has been cancelled
FastAPI People Contributors / job (push) Has been cancelled
FastAPI People Sponsors / job (push) Has been cancelled
Update Topic Repos / topic-repos (push) Has been cancelled
FastAPI People / job (push) Has been cancelled
Test / test (pydantic-v1, 3.12) (push) Has been cancelled
32 lines
997 B
Python
32 lines
997 B
Python
import functools
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.testclient import TestClient
|
|
|
|
from .forward_reference_type import forwardref_method
|
|
|
|
|
|
def passthrough(f):
|
|
@functools.wraps(f)
|
|
def method(*args, **kwargs):
|
|
return f(*args, **kwargs)
|
|
|
|
return method
|
|
|
|
|
|
def test_wrapped_method_type_inference():
|
|
"""
|
|
Regression test ensuring that when a method imported from another module
|
|
is decorated with something that sets the __wrapped__ attribute (functools.wraps),
|
|
then the types are still processed correctly, including dereferencing of forward
|
|
references.
|
|
"""
|
|
app = FastAPI()
|
|
client = TestClient(app)
|
|
app.post("/endpoint")(passthrough(forwardref_method))
|
|
app.post("/endpoint2")(passthrough(passthrough(forwardref_method)))
|
|
with client:
|
|
response = client.post("/endpoint", json={"input": {"x": 0}})
|
|
response2 = client.post("/endpoint2", json={"input": {"x": 0}})
|
|
assert response.json() == response2.json() == {"x": 1}
|