Skip to content

Commit 2c86459

Browse files
committed
Falcon compat module
1 parent ffa54aa commit 2c86459

File tree

4 files changed

+31
-15
lines changed

4 files changed

+31
-15
lines changed

openapi_core/contrib/falcon/compat.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""OpenAPI core contrib falcon compat module"""
2+
try:
3+
from falcon import App # noqa: F401
4+
HAS_FALCON3 = True
5+
except ImportError:
6+
HAS_FALCON3 = False
7+
8+
9+
def get_request_media(req, default=None):
10+
# in falcon 3 media is deprecated
11+
return req.get_media(default_when_empty=default) if HAS_FALCON3 else \
12+
(req.media if req.media else default)
13+
14+
15+
def get_response_text(resp):
16+
# in falcon 3 body is deprecated
17+
return getattr(resp, 'text') if HAS_FALCON3 else \
18+
getattr(resp, 'body')
19+
20+
21+
def set_response_text(resp, text):
22+
# in falcon 3 body is deprecated
23+
setattr(resp, 'text', text) if HAS_FALCON3 else \
24+
setattr(resp, 'body', text)

openapi_core/contrib/falcon/handlers.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from falcon.status_codes import (
66
HTTP_400, HTTP_404, HTTP_405, HTTP_415,
77
)
8+
9+
from openapi_core.contrib.falcon.compat import set_response_text
810
from openapi_core.templating.media_types.exceptions import MediaTypeNotFound
911
from openapi_core.templating.paths.exceptions import (
1012
ServerNotFound, OperationNotFound, PathNotFound,
@@ -41,11 +43,7 @@ def handle(cls, req, resp, errors):
4143
resp.content_type = MEDIA_JSON
4244
resp.status = cls.FALCON_STATUS_CODES.get(
4345
data_error_max['status'], HTTP_400)
44-
# in falcon 3 body is deprecated
45-
if hasattr(resp, 'text'):
46-
resp.text = data_str
47-
else:
48-
resp.body = data_str
46+
set_response_text(resp, data_str)
4947
resp.complete = True
5048

5149
@classmethod

openapi_core/contrib/falcon/requests.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from werkzeug.datastructures import ImmutableMultiDict
55

6+
from openapi_core.contrib.falcon.compat import get_request_media
67
from openapi_core.validation.request.datatypes import (
78
OpenAPIRequest, RequestParameters,
89
)
@@ -21,11 +22,7 @@ def create(cls, request, default_when_empty={}):
2122
# gets deduced by path finder against spec
2223
path = {}
2324

24-
# in falcon 3 we must hadle empty media or an exception will be raised
25-
if hasattr(request, "get_media"):
26-
media = request.get_media(default_when_empty=default)
27-
else:
28-
media = request.media if request.media else default
25+
media = get_request_media(request, default=default)
2926
# Support falcon-jsonify.
3027
body = (
3128
dumps(getattr(request, "json", media))

openapi_core/contrib/falcon/responses.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"""OpenAPI core contrib falcon responses module"""
2+
from openapi_core.contrib.falcon.compat import get_response_text
23
from openapi_core.validation.response.datatypes import OpenAPIResponse
34

45

@@ -13,11 +14,7 @@ def create(cls, response):
1314
else:
1415
mimetype = response.options.default_media_type
1516

16-
# in falcon 3 body is deprecated
17-
if hasattr(response, "text"):
18-
data = response.text
19-
else:
20-
data = response.body
17+
data = get_response_text(response)
2118

2219
return OpenAPIResponse(
2320
data=data,

0 commit comments

Comments
 (0)