mirror of
https://github.com/correl/openapi-core.git
synced 2024-11-25 03:00:11 +00:00
66 lines
1.8 KiB
ReStructuredText
66 lines
1.8 KiB
ReStructuredText
|
Customizations
|
||
|
==============
|
||
|
|
||
|
Spec validation
|
||
|
---------------
|
||
|
|
||
|
By default, spec dict is validated on spec creation time. Disabling the validation can improve the performance.
|
||
|
|
||
|
.. code-block:: python
|
||
|
|
||
|
from openapi_core import create_spec
|
||
|
|
||
|
spec = create_spec(spec_dict, validate_spec=False)
|
||
|
|
||
|
Deserializers
|
||
|
-------------
|
||
|
|
||
|
Pass custom defined media type deserializers dictionary with supported mimetypes as a key to `RequestValidator` or `ResponseValidator` constructor:
|
||
|
|
||
|
.. code-block:: python
|
||
|
|
||
|
def protobuf_deserializer(message):
|
||
|
feature = route_guide_pb2.Feature()
|
||
|
feature.ParseFromString(message)
|
||
|
return feature
|
||
|
|
||
|
custom_media_type_deserializers = {
|
||
|
'application/protobuf': protobuf_deserializer,
|
||
|
}
|
||
|
|
||
|
validator = ResponseValidator(
|
||
|
spec, custom_media_type_deserializers=custom_media_type_deserializers)
|
||
|
|
||
|
result = validator.validate(request, response)
|
||
|
|
||
|
Formats
|
||
|
-------
|
||
|
|
||
|
OpenAPI defines a ``format`` keyword that hints at how a value should be interpreted, e.g. a ``string`` with the type ``date`` should conform to the RFC 3339 date format.
|
||
|
|
||
|
Openapi-core comes with a set of built-in formatters, but it's also possible to add support for custom formatters for `RequestValidator` and `ResponseValidator`.
|
||
|
|
||
|
Here's how you could add support for a ``usdate`` format that handles dates of the form MM/DD/YYYY:
|
||
|
|
||
|
.. code-block:: python
|
||
|
|
||
|
from datetime import datetime
|
||
|
import re
|
||
|
|
||
|
class USDateFormatter:
|
||
|
def validate(self, value) -> bool:
|
||
|
return bool(re.match(r"^\d{1,2}/\d{1,2}/\d{4}$", value))
|
||
|
|
||
|
def unmarshal(self, value):
|
||
|
return datetime.strptime(value, "%m/%d/%y").date
|
||
|
|
||
|
|
||
|
custom_formatters = {
|
||
|
'usdate': USDateFormatter(),
|
||
|
}
|
||
|
|
||
|
validator = ResponseValidator(spec, custom_formatters=custom_formatters)
|
||
|
|
||
|
result = validator.validate(request, response)
|
||
|
|