From 972e75a4fa19b284aa927cba0029fc736e7e54c0 Mon Sep 17 00:00:00 2001 From: Lucas Wiman Date: Fri, 24 Jun 2022 10:16:08 -0700 Subject: [PATCH] Add failing test for #5065. --- tests/forward_reference_type.py | 9 +++++++ .../test_wrapped_method_forward_reference.py | 24 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 tests/forward_reference_type.py create mode 100644 tests/test_wrapped_method_forward_reference.py diff --git a/tests/forward_reference_type.py b/tests/forward_reference_type.py new file mode 100644 index 000000000..02be56bec --- /dev/null +++ b/tests/forward_reference_type.py @@ -0,0 +1,9 @@ +from pydantic import BaseModel + + +def forwardref_method(input: "ForwardRef") -> "ForwardRef": + return ForwardRef() + + +class ForwardRef(BaseModel): + x: int = 0 diff --git a/tests/test_wrapped_method_forward_reference.py b/tests/test_wrapped_method_forward_reference.py new file mode 100644 index 000000000..05681604d --- /dev/null +++ b/tests/test_wrapped_method_forward_reference.py @@ -0,0 +1,24 @@ +import functools + +from fastapi import FastAPI + +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, then + the types are still processed correctly, including dereferencing of forward + references. + """ + app = FastAPI() + app.get("/endpoint")(passthrough(forwardref_method))