Skip to main content

No project description provided

Project description

https://img.shields.io/pypi/v/openapi-core.svg https://travis-ci.org/p1c2u/openapi-core.svg?branch=master https://img.shields.io/codecov/c/github/p1c2u/openapi-core/master.svg?style=flat https://img.shields.io/pypi/pyversions/openapi-core.svg https://img.shields.io/pypi/format/openapi-core.svg https://img.shields.io/pypi/status/openapi-core.svg

About

Openapi-core is a Python library that adds client-side and server-side support for the OpenAPI Specification v3.0.0.

Installation

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_core

Usage

Firstly create your specification:

from openapi_core import create_spec

spec = create_spec(spec_dict)

Request

Now you can use it to validate requests

from openapi_core.validation.request.validators import RequestValidator

validator = RequestValidator(spec)
result = validator.validate(request)

# raise errors if request invalid
result.raise_for_errors()

# get list of errors
errors = result.errors

and unmarshal request data from validation result

# get parameters object with path, query, cookies and headers parameters
validated_params = result.parameters
# or specific parameters
validated_path_params = result.parameters.path

# get body
validated_body = result.body

# get security data
validated_security = result.security

Request object should be instance of OpenAPIRequest class (See Integrations).

Response

You can also validate responses

from openapi_core.validation.response.validators import ResponseValidator

validator = ResponseValidator(spec)
result = validator.validate(request, response)

# raise errors if response invalid
result.raise_for_errors()

# get list of errors
errors = result.errors

and unmarshal response data from validation result

# get headers
validated_headers = result.headers

# get data
validated_data = result.data

Response object should be instance of OpenAPIResponse class (See Integrations).

Security

openapi-core supports security for authentication and authorization process. Security data for security schemas are accessible from security attribute of RequestValidationResult object.

For given security specification:

security:
  - BasicAuth: []
  - ApiKeyAuth: []
components:
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key

you can access your security data the following:

result = validator.validate(request)

# get basic auth decoded credentials
result.security['BasicAuth']

# get api key
result.security['ApiKeyAuth']

Supported security types:

  • http – for Basic and Bearer HTTP authentications schemes

  • apiKey – for API keys and cookie authentication

Customizations

Deserializers

Pass custom defined media type deserializers dictionary with supported mimetypes as a key to RequestValidator or ResponseValidator constructor:

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)

Integrations

Django

For Django 2.2 you can use DjangoOpenAPIRequest a Django request factory:

from openapi_core.validation.request.validators import RequestValidator
from openapi_core.contrib.django import DjangoOpenAPIRequest

openapi_request = DjangoOpenAPIRequest(django_request)
validator = RequestValidator(spec)
result = validator.validate(openapi_request)

You can use DjangoOpenAPIResponse as a Django response factory:

from openapi_core.validation.response.validators import ResponseValidator
from openapi_core.contrib.django import DjangoOpenAPIResponse

openapi_response = DjangoOpenAPIResponse(django_response)
validator = ResponseValidator(spec)
result = validator.validate(openapi_request, openapi_response)

Falcon

This section describes integration with Falcon web framework.

Middleware

Falcon API can be integrated by FalconOpenAPIMiddleware middleware.

from openapi_core.contrib.falcon.middlewares import FalconOpenAPIMiddleware

openapi_middleware = FalconOpenAPIMiddleware.from_spec(spec)
api = falcon.API(middleware=[openapi_middleware])

Low level

For Falcon you can use FalconOpenAPIRequest a Falcon request factory:

from openapi_core.validation.request.validators import RequestValidator
from openapi_core.contrib.falcon import FalconOpenAPIRequest

openapi_request = FalconOpenAPIRequest(falcon_request)
validator = RequestValidator(spec)
result = validator.validate(openapi_request)

You can use FalconOpenAPIResponse as a Falcon response factory:

from openapi_core.validation.response.validators import ResponseValidator
from openapi_core.contrib.falcon import FalconOpenAPIResponse

openapi_response = FalconOpenAPIResponse(falcon_response)
validator = ResponseValidator(spec)
result = validator.validate(openapi_request, openapi_response)

Flask

Decorator

Flask views can be integrated by FlaskOpenAPIViewDecorator decorator.

from openapi_core.contrib.flask.decorators import FlaskOpenAPIViewDecorator

openapi = FlaskOpenAPIViewDecorator.from_spec(spec)

@app.route('/home')
@openapi
def home():
    pass

If you want to decorate class based view you can use the decorators attribute:

class MyView(View):
    decorators = [openapi]

View

As an alternative to the decorator-based integration, Flask method based views can be integrated by inheritance from FlaskOpenAPIView class.

from openapi_core.contrib.flask.views import FlaskOpenAPIView

class MyView(FlaskOpenAPIView):
    pass

app.add_url_rule('/home', view_func=MyView.as_view('home', spec))

Request parameters

In Flask, all unmarshalled request data are provided as Flask request object’s openapi.parameters attribute

from flask.globals import request

@app.route('/browse/<id>/')
@openapi
def home():
    browse_id = request.openapi.parameters.path['id']
    page = request.openapi.parameters.query.get('page', 1)

Low level

You can use FlaskOpenAPIRequest a Flask/Werkzeug request factory:

from openapi_core.validation.request.validators import RequestValidator
from openapi_core.contrib.flask import FlaskOpenAPIRequest

openapi_request = FlaskOpenAPIRequest(flask_request)
validator = RequestValidator(spec)
result = validator.validate(openapi_request)

You can use FlaskOpenAPIResponse as a Flask/Werkzeug response factory:

from openapi_core.validation.response.validators import ResponseValidator
from openapi_core.contrib.flask import FlaskOpenAPIResponse

openapi_response = FlaskOpenAPIResponse(flask_response)
validator = ResponseValidator(spec)
result = validator.validate(openapi_request, openapi_response)

Pyramid

See pyramid_openapi3 project.

Requests

This section describes integration with Requests library.

Low level

For Requests you can use RequestsOpenAPIRequest a Requests request factory:

from openapi_core.validation.request.validators import RequestValidator
from openapi_core.contrib.requests import RequestsOpenAPIRequest

openapi_request = RequestsOpenAPIRequest(requests_request)
validator = RequestValidator(spec)
result = validator.validate(openapi_request)

You can use RequestsOpenAPIResponse as a Requests response factory:

from openapi_core.validation.response.validators import ResponseValidator
from openapi_core.contrib.requests import RequestsOpenAPIResponse

openapi_response = RequestsOpenAPIResponse(requests_response)
validator = ResponseValidator(spec)
result = validator.validate(openapi_request, openapi_response)

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openapi-core-0.13.3.tar.gz (35.4 kB view details)

Uploaded Source

Built Distributions

openapi_core-0.13.3-py3-none-any.whl (80.1 kB view details)

Uploaded Python 3

openapi_core-0.13.3-py2-none-any.whl (80.1 kB view details)

Uploaded Python 2

File details

Details for the file openapi-core-0.13.3.tar.gz.

File metadata

  • Download URL: openapi-core-0.13.3.tar.gz
  • Upload date:
  • Size: 35.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/2.7.15

File hashes

Hashes for openapi-core-0.13.3.tar.gz
Algorithm Hash digest
SHA256 57973b7383214a529012cf65ddac8c22b25a4df497366e588e88c627581c2928
MD5 a84e65f9a7a68c96a93b8a432bab3fe2
BLAKE2b-256 7b987dbe35b0fe15f4456b088cd90e8869a3aa8a5936d2dae26f9435a8797997

See more details on using hashes here.

File details

Details for the file openapi_core-0.13.3-py3-none-any.whl.

File metadata

  • Download URL: openapi_core-0.13.3-py3-none-any.whl
  • Upload date:
  • Size: 80.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.7

File hashes

Hashes for openapi_core-0.13.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8c5e2053c51f8d43d241b54d322f6c1c32adf1a20617490d361d9c0d5a123448
MD5 67580d19c09a0080173d8422d2d19d8f
BLAKE2b-256 10d808868c10de7e8412033774dab167e5e9d38d3dd786b357e0750e06f4798a

See more details on using hashes here.

File details

Details for the file openapi_core-0.13.3-py2-none-any.whl.

File metadata

  • Download URL: openapi_core-0.13.3-py2-none-any.whl
  • Upload date:
  • Size: 80.1 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/2.7.15

File hashes

Hashes for openapi_core-0.13.3-py2-none-any.whl
Algorithm Hash digest
SHA256 df53cc8b9d217616bbde4e6ef943c9213af810a01cd74f62e7885756c6080af4
MD5 9f4dc34c40ae5d469f5ae1871ef14f35
BLAKE2b-256 8fddc5086f7c1157803a01d228a9ced561ec5703e18165706b4ee59755251843

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page