From f63e45c9caed7bb6e5846d8b28f19ebc33dbd93b Mon Sep 17 00:00:00 2001 From: Arijit Basu Date: Sat, 6 Jan 2024 05:10:34 +0530 Subject: [PATCH] Exclude unset --- apphelpers/rest/hug.py | 4 +++- tests/app/endpoints.py | 1 + tests/test_rest.py | 6 +++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apphelpers/rest/hug.py b/apphelpers/rest/hug.py index d092740..0b0a2bd 100644 --- a/apphelpers/rest/hug.py +++ b/apphelpers/rest/hug.py @@ -433,7 +433,9 @@ def build(self, method, method_args, method_kw, f): validator = TypeAdapter(response_model) def callable_return_type(ret): - return validator.dump_python(validator.validate_python(ret)) + return validator.dump_python( + validator.validate_python(ret), exclude_unset=True + ) f.__annotations__["return"] = callable_return_type diff --git a/tests/app/endpoints.py b/tests/app/endpoints.py index 3357c08..275a02e 100644 --- a/tests/app/endpoints.py +++ b/tests/app/endpoints.py @@ -77,6 +77,7 @@ def process_request(request, body): class RawResp(BaseModel): raw_body: str headers: Dict[str, str] + unset_field: Optional[str] = None @ep.response_model(RawResp) diff --git a/tests/test_rest.py b/tests/test_rest.py index 4124cea..bef916c 100644 --- a/tests/test_rest.py +++ b/tests/test_rest.py @@ -160,7 +160,9 @@ def test_not_found(): assert requests.get(url).status_code == 404 url = urls.base + "snakes/viper" - assert requests.get(url).status_code == 200 + resp = requests.get(url) + assert resp.status_code == 200 + assert resp.json() == "viper" url = urls.base + "snakes-legacy/" assert requests.get(url).status_code == 404 @@ -298,6 +300,8 @@ def test_raw_request(): req = requests.post(url, data={"z": 1}, headers={"testheader": "testheader-value"}) resp = req.json() assert "testheader".upper() in resp["headers"] + assert "raw_body" in resp + assert "unset_field" not in resp def test_custom_authorization_access():