Skip to main content

Helpers, syntaxic sugar and Swagger documentation for Flask-Restful

Project description

Flask-RestPlus provide syntaxic suger, helpers and automatically generated Swagger documentation on top of Flask-Restful.

Compatibility

Flask-RestPlus requires Python 2.7+.

Installation

You can install Flask-Restplus with pip:

$ pip install flask-restplus

or with easy_install:

$ easy_install flask-restplus

Quick start

With Flask-Restplus, you only import the api instance to route and document your endpoints.

from flask import Flask
from flask.ext.restplus import Api, Resource, fields

app = Flask(__name__)
api = Api(app, version='1.0', title='Todo API',
    description='A simple TODO API extracted from the original flask-restful example',
)

ns = api.namespace('todos', description='TODO operations')

TODOS = {
    'todo1': {'task': 'build an API'},
    'todo2': {'task': '?????'},
    'todo3': {'task': 'profit!'},
}

todo = api.model('Todo', {
    'task': fields.String(required=True, description='The task details')
})

listed_todo = api.model('ListedTodo', {
    'id': fields.String(required=True, description='The todo ID'),
    'todo': fields.Nested(todo, description='The Todo')
})


def abort_if_todo_doesnt_exist(todo_id):
    if todo_id not in TODOS:
        api.abort(404, "Todo {} doesn't exist".format(todo_id))

parser = api.parser()
parser.add_argument('task', type=str, required=True, help='The task details', location='form')


@ns.route('/<string:todo_id>')
@api.doc(responses={404: 'Todo not found'}, params={'todo_id': 'The Todo ID'})
class Todo(Resource):
    '''Show a single todo item and lets you delete them'''
    @api.doc(description='todo_id should be in {0}'.format(', '.join(TODOS.keys())))
    @api.marshal_with(todo)
    def get(self, todo_id):
        '''Fetch a given resource'''
        abort_if_todo_doesnt_exist(todo_id)
        return TODOS[todo_id]

    @api.doc(responses={204: 'Todo deleted'})
    def delete(self, todo_id):
        '''Delete a given resource'''
        abort_if_todo_doesnt_exist(todo_id)
        del TODOS[todo_id]
        return '', 204

    @api.doc(parser=parser)
    @api.marshal_with(todo)
    def put(self, todo_id):
        '''Update a given resource'''
        args = parser.parse_args()
        task = {'task': args['task']}
        TODOS[todo_id] = task
        return task


@ns.route('/')
class TodoList(Resource):
    '''Shows a list of all todos, and lets you POST to add new tasks'''
    @api.marshal_list_with(listed_todo)
    def get(self):
        '''List all todos'''
        return [{'id': id, 'todo': todo} for id, todo in TODOS.items()]

    @api.doc(parser=parser)
    @api.marshal_with(todo, code=201)
    def post(self):
        '''Create a todo'''
        args = parser.parse_args()
        todo_id = 'todo%d' % (len(TODOS) + 1)
        TODOS[todo_id] = {'task': args['task']}
        return TODOS[todo_id], 201


if __name__ == '__main__':
    app.run(debug=True)

Documentation

The documentation is hosted on Read the Docs

Changelog

0.4.1

  • Added SWAGGER_VALIDATOR_URL config parameter

  • Added readonly field parameter

  • Upgraded to latest version of Swagger UI

0.4.0

  • Port to Flask-Restful 0.3+

  • Use the default Blueprint/App mecanism

  • Allow to hide some ressources or methods using @api.doc(False) or @api.hide

  • Allow to globally customize the default operationId with the default_id callable parameter

0.3.0

  • Switch to Swagger 2.0 (Major breakage)
    • notes documentation is now description

    • nickname documentation is now id

    • new responses declaration format

  • Added missing body parameter to document body input

  • Last release before Flask-Restful 0.3+ compatibility switch

0.2.4

  • Handle description and required attributes on fields.List

0.2.3

  • Fix custom fields registeration

0.2.2

  • Fix model list in declaration

0.2.1

  • Allow to type custom fields with Api.model

  • Handle custom fields into fieds.List

0.2

  • Upgraded to SwaggerUI 0.2.22

  • Support additional field documentation attributes: required, description, enum, min, max and default

  • Initial support for model in RequestParser

0.1.3

  • Fix Api.marshal() shortcut

0.1.2

  • Added Api.marshal_with() and Api.marshal_list_with() decorators

  • Added Api.marshal() shortcut

0.1.1

  • Use zip_safe=False for proper packaging.

0.1

  • Initial release

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-restplus-0.4.1.tar.gz (428.6 kB view details)

Uploaded Source

Built Distribution

flask_restplus-0.4.1-py2.py3-none-any.whl (435.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file flask-restplus-0.4.1.tar.gz.

File metadata

File hashes

Hashes for flask-restplus-0.4.1.tar.gz
Algorithm Hash digest
SHA256 498b67e64fa040cce8cc0b790273b7d3dd840a1fbf13aa1e64816b7be396d518
MD5 095c4adde6cd5dc46b5c3d5263b4e103
BLAKE2b-256 bc4f1f19ec5bbe2260979d625fd210d94aee7eff6e89c012e9fb8ac0ea1c2b4c

See more details on using hashes here.

Provenance

File details

Details for the file flask_restplus-0.4.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for flask_restplus-0.4.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e6b440bfa93e33fc55eec09594376e06546bc74c910b493e2dbc5e9c342091a9
MD5 996ab4062cc48b7a5a046f0925a6cd14
BLAKE2b-256 589bb016d572c75eaec3255980a02b0025703f1023b87164b017de33464cc597

See more details on using hashes here.

Provenance

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