]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
✨ Add `ResponseValidationError` printable details, to show up in server error logs...
authorSebastián Ramírez <tiangolo@gmail.com>
Mon, 14 Aug 2023 09:49:57 +0000 (11:49 +0200)
committerGitHub <noreply@github.com>
Mon, 14 Aug 2023 09:49:57 +0000 (11:49 +0200)
fastapi/exceptions.py
tests/test_response_model_as_return_annotation.py

index c1692f396127a4cb5ffa38568be70ad67192fd59..42f4709fba8f8d05003fee32dc13e25c92ade7e4 100644 (file)
@@ -47,3 +47,9 @@ class ResponseValidationError(ValidationException):
     def __init__(self, errors: Sequence[Any], *, body: Any = None) -> None:
         super().__init__(errors)
         self.body = body
+
+    def __str__(self) -> str:
+        message = f"{len(self._errors)} validation errors:\n"
+        for err in self._errors:
+            message += f"  {err}\n"
+        return message
index 85dd450eb07f4572c19b85d9631bad05e22c20f9..6948430a13b56d63bc5f91e8017894147615cf25 100644 (file)
@@ -277,13 +277,15 @@ def test_response_model_no_annotation_return_exact_dict():
 
 
 def test_response_model_no_annotation_return_invalid_dict():
-    with pytest.raises(ResponseValidationError):
+    with pytest.raises(ResponseValidationError) as excinfo:
         client.get("/response_model-no_annotation-return_invalid_dict")
+    assert "missing" in str(excinfo.value)
 
 
 def test_response_model_no_annotation_return_invalid_model():
-    with pytest.raises(ResponseValidationError):
+    with pytest.raises(ResponseValidationError) as excinfo:
         client.get("/response_model-no_annotation-return_invalid_model")
+    assert "missing" in str(excinfo.value)
 
 
 def test_response_model_no_annotation_return_dict_with_extra_data():
@@ -313,13 +315,15 @@ def test_no_response_model_annotation_return_exact_dict():
 
 
 def test_no_response_model_annotation_return_invalid_dict():
-    with pytest.raises(ResponseValidationError):
+    with pytest.raises(ResponseValidationError) as excinfo:
         client.get("/no_response_model-annotation-return_invalid_dict")
+    assert "missing" in str(excinfo.value)
 
 
 def test_no_response_model_annotation_return_invalid_model():
-    with pytest.raises(ResponseValidationError):
+    with pytest.raises(ResponseValidationError) as excinfo:
         client.get("/no_response_model-annotation-return_invalid_model")
+    assert "missing" in str(excinfo.value)
 
 
 def test_no_response_model_annotation_return_dict_with_extra_data():
@@ -395,13 +399,15 @@ def test_response_model_model1_annotation_model2_return_exact_dict():
 
 
 def test_response_model_model1_annotation_model2_return_invalid_dict():
-    with pytest.raises(ResponseValidationError):
+    with pytest.raises(ResponseValidationError) as excinfo:
         client.get("/response_model_model1-annotation_model2-return_invalid_dict")
+    assert "missing" in str(excinfo.value)
 
 
 def test_response_model_model1_annotation_model2_return_invalid_model():
-    with pytest.raises(ResponseValidationError):
+    with pytest.raises(ResponseValidationError) as excinfo:
         client.get("/response_model_model1-annotation_model2-return_invalid_model")
+    assert "missing" in str(excinfo.value)
 
 
 def test_response_model_model1_annotation_model2_return_dict_with_extra_data():