openapi-core/openapi_core/validation/validators.py

62 lines
2.3 KiB
Python
Raw Normal View History

2020-02-21 16:08:13 +00:00
"""OpenAPI core validation validators module"""
2021-02-13 01:10:16 +00:00
from openapi_core.unmarshalling.schemas.util import build_format_checker
2020-02-21 16:08:13 +00:00
class BaseValidator(object):
def __init__(
self, spec,
2020-02-21 16:33:45 +00:00
base_url=None,
2020-02-21 16:08:13 +00:00
custom_formatters=None, custom_media_type_deserializers=None,
):
self.spec = spec
2020-02-21 16:33:45 +00:00
self.base_url = base_url
2021-02-13 01:10:16 +00:00
self.custom_formatters = custom_formatters or {}
2020-02-21 16:08:13 +00:00
self.custom_media_type_deserializers = custom_media_type_deserializers
2021-02-13 01:10:16 +00:00
self.format_checker = build_format_checker(**self.custom_formatters)
2020-02-21 16:08:13 +00:00
def _find_path(self, request):
from openapi_core.templating.paths.finders import PathFinder
2020-02-21 16:33:45 +00:00
finder = PathFinder(self.spec, base_url=self.base_url)
return finder.find(request)
2020-02-21 16:08:13 +00:00
2021-03-30 12:09:39 +00:00
def _get_media_type(self, content, request_or_response):
from openapi_core.templating.media_types.finders import MediaTypeFinder
finder = MediaTypeFinder(content)
return finder.find(request_or_response)
2020-02-21 16:08:13 +00:00
def _deserialise_media_type(self, media_type, value):
from openapi_core.deserializing.media_types.factories import (
MediaTypeDeserializersFactory,
)
deserializers_factory = MediaTypeDeserializersFactory(
self.custom_media_type_deserializers)
deserializer = deserializers_factory.create(media_type)
return deserializer(value)
def _cast(self, param_or_media_type, value):
# return param_or_media_type.cast(value)
if not param_or_media_type.schema:
return value
from openapi_core.casting.schemas.factories import SchemaCastersFactory
casters_factory = SchemaCastersFactory()
caster = casters_factory.create(param_or_media_type.schema)
return caster(value)
def _unmarshal(self, param_or_media_type, value, context):
if not param_or_media_type.schema:
return value
from openapi_core.unmarshalling.schemas.factories import (
SchemaUnmarshallersFactory,
)
unmarshallers_factory = SchemaUnmarshallersFactory(
2021-02-13 01:10:16 +00:00
self.spec._resolver, self.format_checker,
self.custom_formatters, context=context,
2020-02-21 16:08:13 +00:00
)
unmarshaller = unmarshallers_factory.create(
param_or_media_type.schema)
return unmarshaller(value)