Skip to main content

Flask-Rebar combines flask, marshmallow, and swagger for robust REST services.

Project description

Documentation Status CI Status PyPI status Code style Code of Conduct

Flask-Rebar combines flask, marshmallow, and swagger for robust REST services.

Features

  • Request and Response Validation - Flask-Rebar relies on schemas from the popular Marshmallow package to validate incoming requests and marshal outgoing responses.

  • Automatic Swagger Generation - The same schemas used for validation and marshaling are used to automatically generate OpenAPI specifications (a.k.a. Swagger). This also means automatic documentation via Swagger UI.

  • Error Handling - Uncaught exceptions from Flask-Rebar are converted to appropriate HTTP errors.

Example

from flask import Flask
from flask_rebar import errors, Rebar
from marshmallow import fields, Schema

from my_app import database


rebar = Rebar()

# All handler URL rules will be prefixed by '/v1'
registry = rebar.create_handler_registry(prefix='/v1')

class TodoSchema(Schema):
    id = fields.Integer()
    complete = fields.Boolean()
    description = fields.String()

# This schema will validate the incoming request's query string
class GetTodosQueryStringSchema(Schema):
    complete = fields.Boolean()

# This schema will marshal the outgoing response
class GetTodosResponseSchema(Schema):
    data = fields.Nested(TodoSchema, many=True)


@registry.handles(
    rule='/todos',
    method='GET',
    query_string_schema=GetTodosQueryStringSchema(),
    response_body_schema=GetTodosResponseSchema(), # for versions <= 1.7.0, use marshal_schema
)
def get_todos():
    """
    This docstring will be rendered as the operation's description in
    the auto-generated OpenAPI specification.
    """
    # The query string has already been validated by `query_string_schema`
    complete = rebar.validated_args.get('complete')

    ...

    # Errors are converted to appropriate HTTP errors
    raise errors.Forbidden()

    ...

    # The response will be marshaled by `marshal_schema`
    return {'data': []}


def create_app(name):
    app = Flask(name)
    rebar.init_app(app)
    return app


if __name__ == '__main__':
    create_app(__name__).run()

For a more complete example, check out the example app at examples/todo.py. Some example requests to this example app can be found at examples/todo_output.md.

Installation

pip install flask-rebar

Replacing static swagger-ui files

If you’d like to replace swagger-ui’s static files (flask_rebar/swagger_ui/static) with those of the latest release, run the following from the root of the project.

curl -L https://api.github.com/repos/swagger-api/swagger-ui/tarball | tar -xv --directory=flask_rebar/swagger_ui/static --strip-components=2 "*/dist/"

Documentation

More extensive documentation can be found here.

Extensions

Flask-Rebar is extensible! Here are some open source extensions:

Contributing

There is still work to be done, and contributions are encouraged! Check out the contribution guide for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_rebar-3.3.2.tar.gz (3.2 MB view details)

Uploaded Source

Built Distribution

flask_rebar-3.3.2-py2.py3-none-any.whl (3.2 MB view details)

Uploaded Python 2 Python 3

File details

Details for the file flask_rebar-3.3.2.tar.gz.

File metadata

  • Download URL: flask_rebar-3.3.2.tar.gz
  • Upload date:
  • Size: 3.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for flask_rebar-3.3.2.tar.gz
Algorithm Hash digest
SHA256 d5f4fe890d7b91780fbae52c62c2cf6a9f2869cf1d23fbf32a8335393c980cab
MD5 73957d8ad184f29d6da4c7c801df64c7
BLAKE2b-256 fb6b0ed6e48d50db99f82b4d03c5e41c19837c074edd9ce08794e1e1aa46266d

See more details on using hashes here.

File details

Details for the file flask_rebar-3.3.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for flask_rebar-3.3.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4dae1d12088fae73ef9b4293a69805a71d8c97197413887e24beb0c3d4edee20
MD5 a22944adce8fd1643fe64ae25b6f4eca
BLAKE2b-256 20d0ce3623f6026969887ef66acb59612678d55493560258269327b40d430570

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page