Skip to content

Commit 0405f65

Browse files
committed
Add the OpenAPI definitions to the validation schema for resolving JSON pointers
1 parent f1eeaa0 commit 0405f65

File tree

3 files changed

+14
-16
lines changed

3 files changed

+14
-16
lines changed

flask_restx/api.py

-9
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
from flask.signals import got_request_exception
1818

19-
from jsonschema import RefResolver
20-
2119
from werkzeug.utils import cached_property
2220
from werkzeug.datastructures import Headers
2321
from werkzeug.exceptions import (
@@ -162,7 +160,6 @@ def __init__(
162160
)
163161
self._schema = None
164162
self.models = {}
165-
self._refresolver = None
166163
self.format_checker = format_checker
167164
self.namespaces = []
168165
self.default_swagger_filename = default_swagger_filename
@@ -822,12 +819,6 @@ def payload(self):
822819
"""Store the input payload in the current request context"""
823820
return request.get_json()
824821

825-
@property
826-
def refresolver(self):
827-
if not self._refresolver:
828-
self._refresolver = RefResolver.from_schema(self.__schema__)
829-
return self._refresolver
830-
831822
@staticmethod
832823
def _blueprint_setup_add_url_rule_patch(
833824
blueprint_setup, rule, endpoint=None, view_func=None, **options

flask_restx/model.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
from .utils import not_none
1717
from ._http import HTTPStatus
1818

19-
2019
RE_REQUIRED = re.compile(r"u?\'(?P<name>.*)\' is a required property", re.I | re.U)
2120

2221

@@ -88,10 +87,10 @@ def inherit(cls, name, *parents):
8887
model.__parents__ = parents[:-1]
8988
return model
9089

91-
def validate(self, data, resolver=None, format_checker=None):
92-
validator = Draft4Validator(
93-
self.__schema__, resolver=resolver, format_checker=format_checker
94-
)
90+
def validate(self, data, format_checker=None, definitions=None):
91+
schema = self.__schema__
92+
schema["definitions"] = definitions or {}
93+
validator = Draft4Validator(schema, format_checker=format_checker)
9594
try:
9695
validator.validate(data)
9796
except ValidationError:

flask_restx/resource.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,17 @@ def __validate_payload(self, expect, collection=False):
6565
if collection:
6666
data = data if isinstance(data, list) else [data]
6767
for obj in data:
68-
expect.validate(obj, self.api.refresolver, self.api.format_checker)
68+
expect.validate(
69+
obj,
70+
self.api.format_checker,
71+
definitions=self.api.__schema__["definitions"],
72+
)
6973
else:
70-
expect.validate(data, self.api.refresolver, self.api.format_checker)
74+
expect.validate(
75+
data,
76+
self.api.format_checker,
77+
definitions=self.api.__schema__["definitions"],
78+
)
7179

7280
def validate_payload(self, func):
7381
"""Perform a payload validation on expected model if necessary"""

0 commit comments

Comments
 (0)