Falcon OpenAPI request and response factories

This commit is contained in:
Lars de Ridder 2019-11-21 23:50:57 +01:00 committed by Artur Maciag
parent 43bf9a6e8d
commit 58b98205c7
3 changed files with 39 additions and 0 deletions

View file

View file

@ -0,0 +1,27 @@
"""OpenAPI core contrib falcon responses module"""
from openapi_core.validation.request.datatypes import OpenAPIRequest, RequestParameters
class FalconOpenAPIRequestFactory:
@classmethod
def create(cls, req, route_params):
"""
Create OpenAPIRequest from falcon Request and route params.
"""
method = req.method.lower()
# Convert keys to lowercase as that's what the OpenAPIRequest expects.
headers = {key.lower(): value for key, value in req.headers.items()}
parameters = RequestParameters(
path=route_params, query=req.params, header=headers, cookie=req.cookies
)
return OpenAPIRequest(
host_url=req.host,
path=req.path,
path_pattern=req.uri_template,
method=method,
parameters=parameters,
body=req.bounded_stream.read(),
mimetype=req.content_type.partition(";")[0] if req.content_type else "",
)

View file

@ -0,0 +1,12 @@
"""OpenAPI core contrib falcon responses module"""
from openapi_core.validation.response.datatypes import OpenAPIResponse
class FalconOpenAPIResponseFactory(object):
@classmethod
def create(cls, resp):
return OpenAPIResponse(
data=resp.body,
status_code=resp.status[:3],
mimetype=resp.content_type.partition(";")[0] if resp.content_type else '',
)