From cdab831e24983eb96d3f44441962573f29821bcb Mon Sep 17 00:00:00 2001 From: keming Date: Sat, 12 Dec 2020 00:57:39 +0800 Subject: [PATCH 1/3] use parse_obj instead of validate --- spectree/plugins/falcon_plugin.py | 2 +- spectree/plugins/flask_plugin.py | 2 +- spectree/plugins/starlette_plugin.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spectree/plugins/falcon_plugin.py b/spectree/plugins/falcon_plugin.py index 3079efef..5436738b 100644 --- a/spectree/plugins/falcon_plugin.py +++ b/spectree/plugins/falcon_plugin.py @@ -168,7 +168,7 @@ def validate( model = resp.find_model(_resp.status[:3]) if model: try: - model.validate(_resp.media) + model.parse_obj(_resp.media) except ValidationError as err: resp_validation_error = err _resp.status = "500 Internal Service Response Validation Error" diff --git a/spectree/plugins/flask_plugin.py b/spectree/plugins/flask_plugin.py index 9dd3f6b7..0d8a541c 100644 --- a/spectree/plugins/flask_plugin.py +++ b/spectree/plugins/flask_plugin.py @@ -160,7 +160,7 @@ def validate( model = resp.find_model(response.status_code) if model: try: - model.validate(response.get_json()) + model.parse_obj(response.get_json()) except ValidationError as err: resp_validation_error = err response = make_response( diff --git a/spectree/plugins/starlette_plugin.py b/spectree/plugins/starlette_plugin.py index 1577a788..41f2a0dc 100644 --- a/spectree/plugins/starlette_plugin.py +++ b/spectree/plugins/starlette_plugin.py @@ -88,7 +88,7 @@ async def validate( model = resp.find_model(response.status_code) if model: try: - model.validate(json_loads(response.body)) + model.parse_obj(json_loads(response.body)) except ValidationError as err: resp_validation_error = err response = JSONResponse(err.errors(), 500) From b0299352560782f08a4414606ce395096add7e38 Mon Sep 17 00:00:00 2001 From: keming Date: Sat, 12 Dec 2020 00:57:51 +0800 Subject: [PATCH 2/3] add __root__ test --- tests/common.py | 6 +++++- tests/test_plugin_falcon.py | 3 ++- tests/test_plugin_flask.py | 4 ++-- tests/test_plugin_flask_blueprint.py | 4 ++-- tests/test_plugin_starlette.py | 9 +++++++-- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/tests/common.py b/tests/common.py index d5213b86..bbb96e10 100644 --- a/tests/common.py +++ b/tests/common.py @@ -1,5 +1,5 @@ from enum import Enum, IntEnum -from typing import List +from typing import Dict, List from pydantic import BaseModel, Field, root_validator @@ -18,6 +18,10 @@ class JSON(BaseModel): limit: int +class StrDict(BaseModel): + __root__: Dict[str, str] + + class Resp(BaseModel): name: str score: List[int] diff --git a/tests/test_plugin_falcon.py b/tests/test_plugin_falcon.py index 3fe7ae53..4b9c550e 100644 --- a/tests/test_plugin_falcon.py +++ b/tests/test_plugin_falcon.py @@ -6,7 +6,7 @@ from spectree import Response, SpecTree -from .common import JSON, Cookies, Headers, Query, Resp +from .common import JSON, Cookies, Headers, Query, Resp, StrDict def before_handler(req, resp, err, instance): @@ -40,6 +40,7 @@ class UserScore: def extra_method(self): pass + @api.validate(resp=Response(HTTP_200=StrDict)) def on_get(self, req, resp, name): self.extra_method() resp.media = {"name": name} diff --git a/tests/test_plugin_flask.py b/tests/test_plugin_flask.py index cea4150f..4e057d71 100644 --- a/tests/test_plugin_flask.py +++ b/tests/test_plugin_flask.py @@ -6,7 +6,7 @@ from spectree import Response, SpecTree -from .common import JSON, Cookies, Headers, Query, Resp +from .common import JSON, Cookies, Headers, Query, Resp, StrDict def before_handler(req, resp, err, _): @@ -27,7 +27,7 @@ def api_after_handler(req, resp, err, _): @app.route("/ping") -@api.validate(headers=Headers, tags=["test", "health"]) +@api.validate(headers=Headers, resp=Response(HTTP_200=StrDict), tags=["test", "health"]) def ping(): """summary description""" diff --git a/tests/test_plugin_flask_blueprint.py b/tests/test_plugin_flask_blueprint.py index c6b05fa8..6fe93836 100644 --- a/tests/test_plugin_flask_blueprint.py +++ b/tests/test_plugin_flask_blueprint.py @@ -6,7 +6,7 @@ from spectree import Response, SpecTree -from .common import JSON, Cookies, Headers, Query, Resp +from .common import JSON, Cookies, Headers, Query, Resp, StrDict def before_handler(req, resp, err, _): @@ -27,7 +27,7 @@ def api_after_handler(req, resp, err, _): @app.route("/ping") -@api.validate(headers=Headers, tags=["test", "health"]) +@api.validate(headers=Headers, resp=Response(HTTP_200=StrDict), tags=["test", "health"]) def ping(): """summary description""" diff --git a/tests/test_plugin_starlette.py b/tests/test_plugin_starlette.py index 3d341213..d506c080 100644 --- a/tests/test_plugin_starlette.py +++ b/tests/test_plugin_starlette.py @@ -10,7 +10,7 @@ from spectree import Response, SpecTree -from .common import JSON, Cookies, Headers, Query, Resp +from .common import JSON, Cookies, Headers, Query, Resp, StrDict def before_handler(req, resp, err, instance): @@ -32,7 +32,12 @@ def method_handler(req, resp, err, instance): class Ping(HTTPEndpoint): name = "Ping" - @api.validate(headers=Headers, tags=["test", "health"], after=method_handler) + @api.validate( + headers=Headers, + resp=Response(HTTP_200=StrDict), + tags=["test", "health"], + after=method_handler, + ) def get(self, request): """summary description""" From b62f4fa4bd6f6d2493b6331cef841893a6aa9d4e Mon Sep 17 00:00:00 2001 From: keming Date: Sat, 12 Dec 2020 00:58:08 +0800 Subject: [PATCH 3/3] release v0.3.16 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 00cab197..90c93e0a 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ setup( name="spectree", - version="0.3.15", + version="0.3.16", author="Keming Yang", author_email="kemingy94@gmail.com", description=(