/flask-marshmallow-openapi

Generate OpenAPI docs from Flask application

Primary LanguagePythonMIT LicenseMIT

Overview

PyPI Status license python_versions documentation

Provides OpenAPI documentation generated from code for Flask APIs built around marshmallow schemas.

This hackish and organically grown ™ package was created because no other similar projects worked exactly the way I wanted them.

Similar projects:

Installation

pip install flask-marshmallow-openapi

Documentation

Read the Docs

What does it do?

Searches your codebase for marshmallow schemas and 🎖️ decorated 🎖️ Flask routes.

It then produces swagger.json and injects it into self-hosted ReDoc and SwaggerUI documentation viewers.

api = flask.Blueprint("my_api", __name__)


class BookSchema(ma.Schema):
    id = ma.fields.Integer(as_string=True)
    title = ma.fields.String(allow_none=False)
    publisher = ma.fields.String(allow_none=False)
    isbn = ma.fields.String(allow_none=False)


@open_api.get_list(BookSchema)
@api.route("/books", methods=["GET"])
def books_list():
    return "<p>Hello, World!</p>"


app = flask.Flask(__name__)
app.register_blueprint(api, url_prefix="/v1")


conf = OpenAPISettings(
    api_version="v1", api_name="My API", app_package_name="my_api", mounted_at="/v1"
)
docs = OpenAPI(config=conf)
docs.init_app(app)

New app routes:

$ flask routes

Endpoint               Methods  Rule
---------------------  -------  -------------------------------
# ...
open_api.re_doc        GET      /v1/docs/re_doc
open_api.static        GET      /v1/docs/static/<path:filename>
open_api.swagger_json  GET      /v1/docs/static/swagger.json
open_api.swagger_ui    GET      /v1/docs/swagger_ui
open_api.swagger_yaml  GET      /v1/docs/static/swagger.yaml
# ...