Dorthu / openapi3

A Python3 OpenAPI 3 Spec Parser
BSD 3-Clause "New" or "Revised" License
118 stars 47 forks source link

openapi3

A Python OpenAPI 3 Specification_ client and validator for Python 3.

.. image:: https://github.com/Dorthu/openapi3/actions/workflows/main.yml/badge.svg :alt: GitHub Actions Build Badge

.. image:: https://badge.fury.io/py/openapi3.svg :target: https://badge.fury.io/py/openapi3

Validation Mode

This module can be run against a spec file to validate it like so::

python3 -m openapi3 /path/to/spec

Usage as a Client

This library also functions as an interactive client for arbitrary OpenAPI 3 specs. For example, using Linode's OpenAPI 3 Specification_ for reference::

from openapi3 import OpenAPI import yaml

load the spec file and read the yaml

with open('openapi.yaml') as f: spec = yaml.safe_load(f.read())

parse the spec into python - this will raise if the spec is invalid

api = OpenAPI(spec)

call operations and receive result models

regions = api.call_getRegions()

authenticate using a securityScheme defined in the spec's components.securitySchemes

api.authenticate('personalAccessToken', my_token)

call an operation that requires authentication

linodes = api.call_getLinodeInstances()

call an operation with parameters

linode = api.call_getLinodeInstance(parameters={"linodeId": 123})

the models returns are all of the same (generated) type

print(type(linode)) # openapi.schemas.Linode type(linode) == type(linodes.data[0]) # True

call an operation with a request body

new_linode = api.call_createLinodeInstance(data={"region":"us-east","type":"g6-standard-2"})

the returned models is still of the correct type

type(new_linode) == type(linode) # True

HTTP basic authentication and HTTP digest authentication works like this::

authenticate using a securityScheme defined in the spec's components.securitySchemes

Tuple with (username, password) as second argument

api.authenticate('basicAuth', ('username', 'password'))

Running Tests

This project includes a test suite, run via pytest. To run the test suite, ensure that you've installed the dependencies and then run pytest in the root of this project.

Roadmap

The following features are planned for the future:

.. _OpenAPI 3 Specification: https://openapis.org .. _Linode's OpenAPI 3 Specification: https://developers.linode.com/api/v4