tornado-openapi3/tornado_openapi3/responses.py

36 lines
1.3 KiB
Python
Raw Normal View History

2020-11-26 05:05:02 +00:00
from openapi_core.validation.response.datatypes import ( # type: ignore
OpenAPIResponse,
ResponseValidationResult,
)
from openapi_core.validation.response import validators # type: ignore
from tornado.httpclient import HTTPResponse # type: ignore
from .requests import TornadoRequestFactory
from .util import parse_mimetype
2020-11-26 05:05:02 +00:00
class TornadoResponseFactory:
2021-02-26 17:03:04 +00:00
"""Factory for converting Tornado responses to OpenAPI response objects."""
2020-11-26 05:05:02 +00:00
@classmethod
def create(cls, response: HTTPResponse) -> OpenAPIResponse:
2021-02-26 17:03:04 +00:00
"""Creates an OpenAPI response from Tornado response objects."""
mimetype = parse_mimetype(response.headers.get("Content-Type", "text/html"))
2020-11-26 05:05:02 +00:00
return OpenAPIResponse(
data=response.body if response.body else b"",
2020-11-26 05:05:02 +00:00
status_code=response.code,
mimetype=mimetype,
)
class ResponseValidator(validators.ResponseValidator):
2021-02-26 17:03:04 +00:00
"""Validator for Tornado HTTP Responses."""
2020-11-26 05:05:02 +00:00
def validate(self, response: HTTPResponse) -> ResponseValidationResult:
2021-02-26 17:03:04 +00:00
"""Validate a Tornado HTTP response object."""
2020-11-26 05:05:02 +00:00
return super().validate(
TornadoRequestFactory.create(response.request),
TornadoResponseFactory.create(response),
)
__all__ = ["ResponseValidator", "TornadoResponseFactory"]