Skip to content
A Python3 OpenAPI 3 Spec Parser
Branch: master
Clone or download
Dorthu Python2 support
Backported to Python2 (turned out to be really easy) and added "Schema"
to parameter type (instead of placeholder `dict`)
Latest commit 2a885f9 Jul 10, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
openapi3 Python2 support Jul 10, 2018
.gitignore Updated .gitignore for generated directories Jun 25, 2018
.pylintrc
.travis.yml
README.rst
setup.py

README.rst

openapi3

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

https://travis-ci.org/Dorthu/openapi3.svg?branch=master

NOTE

This is a work in progress, and may change significantly in the future. Many features are presently absent, and many common cases may not be implemented.

Validation Mode

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

python3 -m openapi /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

# 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.securtiySchemes
api.authenticate('personalAccessToken', my_token)

# call an operation that requires authentication
linodes  = api.call_getLinodeInstances()

# call an opertaion 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

Roadmap

The following still needs to be done:

  • Request body models, creation, and validation.
  • Parameters interface with validation and explicit typing.
  • Support for more authentication types.
  • Support for non-json request/response content.
  • Full support for all objects defined in the specification.
You can’t perform that action at this time.