]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
✨ Implement __repr__ methods for path parameters to simplify debugging (#1560)
authorRupsi Kaushik <rkaus053@uottawa.ca>
Fri, 12 Jun 2020 23:22:30 +0000 (19:22 -0400)
committerGitHub <noreply@github.com>
Fri, 12 Jun 2020 23:22:30 +0000 (01:22 +0200)
* repr description added to Depends class

* repr description added to Security subclass

* get rid of __repr__ in security since it will inherit from super

* make code format consistent with rest

* add desc for rest of the classes

* Update fastapi/params.py

remove trailing whitespace

Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
* Implement __repr__

* fix formatting

* formatting again

* ran formatting

* added basic testing

* basic tests added to rest of the classes

* added more test coverage and simplified test file

Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
Co-authored-by: Jayati Shrivastava <gaurijove@gmail.com>
fastapi/params.py
tests/test_params_repr.py [new file with mode: 0644]

index 3aa333ac75615c282e067f4a6d6b8a1ad2d9078b..c822cbfebb184e6c94eb2f2211795469b1b73d39 100644 (file)
@@ -51,6 +51,9 @@ class Param(FieldInfo):
             **extra,
         )
 
+    def __repr__(self) -> str:
+        return f"{self.__class__.__name__}({self.default})"
+
 
 class Path(Param):
     in_ = ParamTypes.path
@@ -239,6 +242,9 @@ class Body(FieldInfo):
             **extra,
         )
 
+    def __repr__(self) -> str:
+        return f"{self.__class__.__name__}({self.default})"
+
 
 class Form(Body):
     def __init__(
@@ -316,6 +322,11 @@ class Depends:
         self.dependency = dependency
         self.use_cache = use_cache
 
+    def __repr__(self) -> str:
+        attr = getattr(self.dependency, "__name__", type(self.dependency).__name__)
+        cache = "" if self.use_cache else ", use_cache=False"
+        return f"{self.__class__.__name__}({attr}{cache})"
+
 
 class Security(Depends):
     def __init__(
diff --git a/tests/test_params_repr.py b/tests/test_params_repr.py
new file mode 100644 (file)
index 0000000..e21772a
--- /dev/null
@@ -0,0 +1,46 @@
+import pytest
+from fastapi.params import Body, Cookie, Depends, Header, Param, Path, Query
+
+test_data = ["teststr", None, ..., 1, []]
+
+
+def get_user():
+    return {}  # pragma: no cover
+
+
+@pytest.fixture(scope="function", params=test_data)
+def params(request):
+    return request.param
+
+
+def test_param_repr(params):
+    assert repr(Param(params)) == "Param(" + str(params) + ")"
+
+
+def test_path_repr(params):
+    assert repr(Path(params)) == "Path(Ellipsis)"
+
+
+def test_query_repr(params):
+    assert repr(Query(params)) == "Query(" + str(params) + ")"
+
+
+def test_header_repr(params):
+    assert repr(Header(params)) == "Header(" + str(params) + ")"
+
+
+def test_cookie_repr(params):
+    assert repr(Cookie(params)) == "Cookie(" + str(params) + ")"
+
+
+def test_body_repr(params):
+    assert repr(Body(params)) == "Body(" + str(params) + ")"
+
+
+def test_depends_repr():
+    assert repr(Depends()) == "Depends(NoneType)"
+    assert repr(Depends(get_user)) == "Depends(get_user)"
+    assert repr(Depends(use_cache=False)) == "Depends(NoneType, use_cache=False)"
+    assert (
+        repr(Depends(get_user, use_cache=False)) == "Depends(get_user, use_cache=False)"
+    )