Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


Bravado is a python client library for Swagger 2.0 services

Subscribe to updates I use bravado

Statistics on bravado

Number of watchers on Github 290
Number of open issues 57
Average time to close an issue 7 days
Main language Python
Average time to merge a PR 2 days
Open pull requests 8+
Closed pull requests 16+
Last commit over 2 years ago
Repo Created about 6 years ago
Repo Last Updated over 2 years ago
Size 1.47 MB
Organization / Authoryelp
Latest Releasev0.7.8
Page Updated
Do you use bravado? Leave a review!
View open issues (57)
View bravado activity
View on github
Book a Mock Interview With Me (Silicon Valley Engineering Leader, 100s of interviews conducted)
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating bravado for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

.. image:: https://img.shields.io/travis/Yelp/bravado.svg :target: https://travis-ci.org/Yelp/bravado?branch=master

.. image:: https://img.shields.io/coveralls/Yelp/bravado.svg :target: https://coveralls.io/r/Yelp/bravado

.. image:: https://img.shields.io/pypi/v/bravado.svg :target: https://pypi.python.org/pypi/bravado/ :alt: PyPi version

.. image:: https://img.shields.io/pypi/pyversions/bravado.svg :target: https://pypi.python.org/pypi/bravado/ :alt: Supported Python versions



Bravado is a Yelp maintained fork of digium/swagger-py <https://github.com/digium/swagger-py/>__ for use with OpenAPI Specification version 2.0 <https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md>__ (previously known as Swagger).

From the OpenAPI Specification project:

The goal of The OpenAPI Specification is to define a standard,
language-agnostic interface to REST APIs which allows both humans and
computers to discover and understand the capabilities of the service
without access to source code, documentation, or through network traffic

Client libraries can automatically be generated from the OpenAPI specification, however Bravado aims to be a complete replacement for code generation (swagger-codegen <https://github.com/wordnik/swagger-codegen>__).

Example Usage

.. code-block:: Python

from bravado.client import SwaggerClient
client = SwaggerClient.from_url('http://petstore.swagger.io/v2/swagger.json')
pet = client.pet.getPetById(petId=42).result()

Example with Basic Authentication

.. code-block:: python

from bravado.requests_client import RequestsClient
from bravado.client import SwaggerClient

http_client = RequestsClient()
    'username', 'password'
client = SwaggerClient.from_url(
pet = client.pet.getPetById(petId=42).result()

Example with Header Authentication

.. code-block:: python

from bravado.requests_client import RequestsClient
from bravado.client import SwaggerClient

http_client = RequestsClient()
    'api.yourhost.com', 'token',
    param_name='api_key', param_in='header'
client = SwaggerClient.from_url(
pet = client.pet.getPetById(petId=42).result()

Example with Fido Client (Async Http Client)

.. code-block:: python

# Install bravado with fido extra (``pip install bravado[fido]``)
from bravado.fido_client import FidoClient
from bravado.client import SwaggerClient

http_client = FidoClient()
client = SwaggerClient.from_url(
pet = client.pet.getPetById(petId=42).result()


More documentation is available at http://bravado.readthedocs.org


.. code-block:: bash

# To install bravado with Synchronous Http Client only.
$ pip install bravado

# To install bravado with Synchronous and Asynchronous Http Client (RequestsClient and FidoClient).
$ pip install bravado[fido]


Code is documented using Sphinx <http://sphinx-doc.org/>__.

virtualenv <http://virtualenv.readthedocs.org/en/latest/virtualenv.html>__. is recommended to keep dependencies and libraries isolated.


.. code-block:: bash

# Run tests

# Install git pre-commit hooks
tox -e pre-commit install


  1. Fork it ( http://github.com/Yelp/bravado/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Add your modifications
  4. Add short summary of your modifications on CHANGELOG-MASTER.rst
  5. Commit your changes (git commit -m "Add some feature")
  6. Push to the branch (git push origin my-new-feature)
  7. Create new Pull Request


Copyright (c) 2013, Digium, Inc. All rights reserved. Copyright (c) 2014-2015, Yelp, Inc. All rights reserved.

Bravado is licensed with a BSD 3-Clause License <http://opensource.org/licenses/BSD-3-Clause>__.

bravado open issues Ask a question     (View All Issues)
  • almost 4 years Create request without swagger.json
  • almost 4 years Non 200 codes block getting http response
  • almost 4 years Bravado tries to parse xml response as JSON
  • almost 4 years AttributeError: 'Future' object has no attribute 'wait'
  • almost 4 years FidoClient errors with TypeError: 'NoneType' object is not iterable
  • almost 4 years Bravado client hangs a lot on HTTPS connections on _lib.SSL_read
  • almost 4 years SwaggerMappingError when trying to load spec with root path.
  • about 4 years How to change host in the swagger file?
  • about 4 years Should fido / twisted / requests be optional requirements?
  • about 4 years Gracefully reraise JSONDecodeError errors
  • about 4 years Make it super easy to wrap SwaggerClient to add new features
  • over 4 years documentation does not indicate how to pass global headers
  • over 4 years Rename SwaggerClient to BravadoClient?
  • over 4 years Question: handling of $ref:s to external .yaml files
  • over 4 years OAuth2 support
  • over 4 years Passing datetime as request body throws JSON serializable error.
  • over 4 years Handle patch requirements differently
  • almost 5 years Asynchronous client is not fork-safe
  • almost 5 years Expose api to get the service `title` from the client
  • about 5 years Add capacity to set a default timeout on the client
  • about 5 years Update bravado/swaggerpy doc with current examples
  • about 5 years swagger client should not be modified by a service call.
  • about 5 years bravado should be able to parse errors as json
  • about 5 years Using 'type': 'number' for request query parameters does not work in swaggerpy
  • over 5 years Make `RequestsClient` immutable.
  • over 5 years Make a way to switch between using a sync and an async http_client
  • over 5 years Support Operation class decorators
  • over 5 years AsynchronousHttpClient mutates the passed in `api_doc_request_headers` object
  • over 5 years Ensure that crochet/twisted is not initialized at import time
bravado open pull requests (View All Pulls)
  • throwing a timeout error when the underlying crochet impl raises timeout
  • fix required fields for header
  • Add basic authentication usage example.
  • Contribution guidelines and master changelog
  • Fix for issue 222
  • Api key header
  • Add twisted errors to list of Fido timeouts
  • Add HTTP proxy support
bravado questions on Stackoverflow (View All Questions)
  • How do you set a custom http client in Bravado?
bravado list of languages used
bravado latest release notes
v0.7.8 Fix UnicodeDecodeError when POST'ing binary files

When Resources/Operations are constructed from api-docs, all fields (e.g. 'method') are unicode. In python 2.7 httplib attempts string concatenation to construct POST bodies, which means that UnicodeDecodeErrors occur if one includes binary data as a parameter. Rather than change all api-doc fields to 'str', this branch casts only fields used in httplib.

v0.7.4 v0.7.4

Encode params to utf8.

v0.7.3 Log level debug for request logging


Other projects in Python