Skip to content

Commit 58b9820

Browse files
larsderidderp1c2u
authored andcommitted
Falcon OpenAPI request and response factories
1 parent 43bf9a6 commit 58b9820

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

openapi_core/contrib/falcon/__init__.py

Whitespace-only changes.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""OpenAPI core contrib falcon responses module"""
2+
from openapi_core.validation.request.datatypes import OpenAPIRequest, RequestParameters
3+
4+
5+
class FalconOpenAPIRequestFactory:
6+
@classmethod
7+
def create(cls, req, route_params):
8+
"""
9+
Create OpenAPIRequest from falcon Request and route params.
10+
"""
11+
method = req.method.lower()
12+
13+
# Convert keys to lowercase as that's what the OpenAPIRequest expects.
14+
headers = {key.lower(): value for key, value in req.headers.items()}
15+
16+
parameters = RequestParameters(
17+
path=route_params, query=req.params, header=headers, cookie=req.cookies
18+
)
19+
return OpenAPIRequest(
20+
host_url=req.host,
21+
path=req.path,
22+
path_pattern=req.uri_template,
23+
method=method,
24+
parameters=parameters,
25+
body=req.bounded_stream.read(),
26+
mimetype=req.content_type.partition(";")[0] if req.content_type else "",
27+
)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
"""OpenAPI core contrib falcon responses module"""
2+
from openapi_core.validation.response.datatypes import OpenAPIResponse
3+
4+
5+
class FalconOpenAPIResponseFactory(object):
6+
@classmethod
7+
def create(cls, resp):
8+
return OpenAPIResponse(
9+
data=resp.body,
10+
status_code=resp.status[:3],
11+
mimetype=resp.content_type.partition(";")[0] if resp.content_type else '',
12+
)

0 commit comments

Comments
 (0)