OpenAPI core
Find a file
2019-10-20 13:25:21 +01:00
openapi_core Schema validate exceptions refactor 2019-10-20 13:25:21 +01:00
tests Schema validate exceptions refactor 2019-10-20 13:25:21 +01:00
.bumpversion.cfg bumpversion config 2019-09-21 20:29:44 +01:00
.gitignore .pytest_cache added to .gitignore 2018-07-15 23:46:16 +02:00
.travis.yml End of Python 3.4 support 2019-05-22 08:57:27 +01:00
LICENSE Initial commit 2017-09-20 11:25:36 +01:00
Makefile Makefile added 2019-10-16 20:29:46 +01:00
MANIFEST.in MANIFEST py27 fix 2018-10-29 10:18:51 +00:00
README.rst Django 2.2 for python3 setup 2019-10-20 03:06:56 +01:00
requirements.txt Get rid of schema validation in unmarshal 2019-09-13 01:55:22 +01:00
requirements_2.7.txt Merge branch 'master' into date-time-rfc3339 2018-09-13 20:42:32 +01:00
requirements_dev.txt Django 2.2 for python3 setup 2019-10-20 03:06:56 +01:00
setup.cfg Django 2.2 for python3 setup 2019-10-20 03:06:56 +01:00
setup.py Setup config refactor 2019-10-16 20:28:37 +01:00

************
openapi-core
************

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

About
#####

Openapi-core is a Python library that adds client-side and server-side support
for the `OpenAPI Specification v3.0.0 <https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md>`__.

Installation
############

Recommended way (via pip):

::

    $ pip install openapi-core

Alternatively you can download the code and install from the repository:

.. code-block:: bash

   $ pip install -e git+https://github.com/p1c2u/openapi-core.git#egg=openapi_core


Usage
#####

Firstly create your specification:

.. code-block:: python

   from openapi_core import create_spec

   spec = create_spec(spec_dict)

Request
*******

Now you can use it to validate requests

.. code-block:: python

   from openapi_core.shortcuts 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

.. code-block:: python

   # 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

or use shortcuts for simple validation

.. code-block:: python

   from openapi_core import validate_parameters, validate_body

   validated_params = validate_parameters(spec, request)
   validated_body = validate_body(spec, request)

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

Response
********

You can also validate responses

.. code-block:: python

   from openapi_core.shortcuts 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

.. code-block:: python

   # get headers
   validated_headers = result.headers

   # get data
   validated_data = result.data

or use shortcuts for simple validation

.. code-block:: python

   from openapi_core import validate_data

   validated_data = validate_data(spec, request, response)

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


Integrations
############

Django
******

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

.. code-block:: python

   from openapi_core.shortcuts import RequestValidator
   from openapi_core.contrib.django import DjangoOpenAPIRequest

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

or simply specify request factory for shortcuts

.. code-block:: python

   from openapi_core import validate_parameters, validate_body

   validated_params = validate_parameters(
       spec, request, request_factory=DjangoOpenAPIRequest)
   validated_body = validate_body(
       spec, request, request_factory=DjangoOpenAPIRequest)

You can use DjangoOpenAPIResponse as a Django response factory:

.. code-block:: python

   from openapi_core.shortcuts import ResponseValidator
   from openapi_core.contrib.django import DjangoOpenAPIResponse

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

or simply specify response factory for shortcuts

.. code-block:: python

   from openapi_core import validate_parameters, validate_body

   validated_data = validate_data(
       spec, request, response,
       request_factory=DjangoOpenAPIRequest,
       response_factory=DjangoOpenAPIResponse)

Flask
*****

You can use FlaskOpenAPIRequest a Flask/Werkzeug request factory:

.. code-block:: python

   from openapi_core.shortcuts import RequestValidator
   from openapi_core.contrib.flask import FlaskOpenAPIRequest

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

or simply specify request factory for shortcuts

.. code-block:: python

   from openapi_core import validate_parameters, validate_body

   validated_params = validate_parameters(
       spec, request, request_factory=FlaskOpenAPIRequest)
   validated_body = validate_body(
       spec, request, request_factory=FlaskOpenAPIRequest)

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

.. code-block:: python

   from openapi_core.shortcuts import ResponseValidator
   from openapi_core.contrib.flask import FlaskOpenAPIResponse

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

or simply specify response factory for shortcuts

.. code-block:: python

   from openapi_core import validate_parameters, validate_body

   validated_data = validate_data(
       spec, request, response,
       request_factory=FlaskOpenAPIRequest,
       response_factory=FlaskOpenAPIResponse)

Pyramid
*******

See `pyramid_openapi3  <https://github.com/niteoweb/pyramid_openapi3>`_ project.

Related projects
################
* `openapi-spec-validator <https://github.com/p1c2u/openapi-spec-validator>`__
* `pyramid_openapi3 <https://github.com/niteoweb/pyramid_openapi3>`__