Openapi-core is a Python library that adds client-side and server-side support for the OpenAPI Specification v3.0.0.
Recommended way (via pip):
$ pip install openapi-core
Alternatively you can download the code and install from the repository:
$ pip install -e git+https://github.com/p1c2u/openapi-core.git#egg=openapi_coreFirstly create your specification:
fromopenapi_coreimportcreate_specspec=create_spec(spec_dict)Now you can use it to validate requests
fromopenapi_core.validatorsimportRequestValidatorvalidator=RequestValidator(spec)
result=validator.validate(request)
# raise errors if request invalidresult.raise_for_errors()
# get list of errorserrors=result.errorsand unmarshal request data from validation result
# get parameters dictionary with path, query, cookies and headers parametersvalidated_params=result.parameters# get bodyvalidated_body=result.bodyor use shortcuts for simple validation
fromopenapi_coreimportvalidate_parameters, validate_bodyvalidated_params=validate_parameters(spec, request)
validated_body=validate_body(spec, request)Request object should implement BaseOpenAPIRequest interface. You can use FlaskOpenAPIRequest a Flask/Werkzeug request wrapper implementation:
fromopenapi_core.validatorsimportRequestValidatorfromopenapi_core.wrappersimportFlaskOpenAPIRequestopenapi_request=FlaskOpenAPIRequest(flask_request)
validator=RequestValidator(spec)
result=validator.validate(openapi_request)or specify request wrapper class for shortcuts
fromopenapi_coreimportvalidate_parameters, validate_bodyvalidated_params=validate_parameters(
spec, request, wrapper_class=FlaskOpenAPIRequest)
validated_body=validate_body(
spec, request, wrapper_class=FlaskOpenAPIRequest)You can also validate responses
fromopenapi_core.validatorsimportResponseValidatorvalidator=ResponseValidator(spec)
result=validator.validate(request, response)
# raise errors if response invalidresult.raise_for_errors()
# get list of errorserrors=result.errorsand unmarshal response data from validation result
# get headersvalidated_headers=result.headers# get datavalidated_data=result.dataor use shortcuts for simple validation
fromopenapi_coreimportvalidate_datavalidated_data=validate_data(spec, request, response)Response object should implement BaseOpenAPIResponse interface. You can use FlaskOpenAPIResponse a Flask/Werkzeug response wrapper implementation:
fromopenapi_core.validatorsimportResponseValidatorfromopenapi_core.wrappersimportFlaskOpenAPIResponseopenapi_response=FlaskOpenAPIResponse(flask_response)
validator=ResponseValidator(spec)
result=validator.validate(openapi_request, openapi_response)or specify response wrapper class for shortcuts
fromopenapi_coreimportvalidate_parameters, validate_bodyvalidated_data=validate_data(
spec, request, response, response_wrapper_class=FlaskOpenAPIResponse)