Chalice plugin for the apispec (fka Swagger) generation library.
From PyPi:
$ pip install apispec-chalice
from apispec import APISpec from chalice import Chalice from marshmallow import Schema, fields import apispec_chalice # Create an APISpec spec = APISpec( title='Swagger Petstore', version='1.0.0', plugins=[ 'apispec_chalice', 'apispec.ext.marshmallow', ], ) # Optional marshmallow support class CategorySchema(Schema): id = fields.Int() name = fields.Str(required=True) class PetSchema(Schema): category = fields.Nested(CategorySchema, many=True) name = fields.Str() class ErrorSchema(Schema): status_code = fields.Int(required=True) message = fields.Str() app = Chalice(__name__) @app.route('/pets', methods=['GET', 'POST']) def pets(): ''' --- get: responses: 200: schema: type: array items: PetSchema 404: schema: ErrorSchema post: responses: 201: headers: Location: description: 'URI of new pet' type: string 400: schema: ErrorSchema ''' pass @app.route('/pets/{pet_name}', methods=['GET', 'PUT', 'DELETE']) def pet(pet_name): ''' --- get: responses: 200: schema: PetSchema 404: schema: ErrorSchema delete: responses: 204: description: 'deleted pet' 404: schema: ErrorSchema put: responses: 204: description: 'deleted pet' 400: schema: ErrorSchema ''' pass # Register entities and paths spec.definition('Category', schema=CategorySchema) spec.definition('Pet', schema=PetSchema) spec.definition('Error', schema=ErrorSchema) spec.add_path(app=app, view=pets) spec.add_path(app=app, view=pet)spec.to_dict() #{ # 'info':{ # 'title':'Swagger Petstore', # 'version':'1.0.0' # }, # 'paths':{ # '/pets':{ # 'get':{ # 'responses':{ # '200':{ # 'schema':{ # 'type':'array', # 'items':{ # '$ref':'#/definitions/Pet' # } # } # }, # '404':{ # 'schema':{ # '$ref':'#/definitions/Error' # } # } # } # }, # 'post':{ # 'responses':{ # '201':{ # 'headers':{ # 'Location':{ # 'description':'URI of new pet', # 'type':'string' # } # } # }, # '400':{ # 'schema':{ # '$ref':'#/definitions/Error' # } # } # } # } # }, # '/pets/{pet_name}':{ # 'get':{ # 'responses':{ # '200':{ # 'schema':{ # '$ref':'#/definitions/Pet' # } # }, # '404':{ # 'schema':{ # '$ref':'#/definitions/Error' # } # } # } # }, # 'delete':{ # 'responses':{ # '204':{ # 'description':'deleted pet' # }, # '404':{ # 'schema':{ # '$ref':'#/definitions/Error' # } # } # } # }, # 'put':{ # 'responses':{ # '204':{ # 'description':'deleted pet' # }, # '400':{ # 'schema':{ # '$ref':'#/definitions/Error' # } # } # } # } # } # }, # 'tags':[ # # ], # 'swagger':'2.0', # 'definitions':{ # 'Category':{ # 'type':'object', # 'properties':{ # 'name':{ # 'type':'string' # }, # 'id':{ # 'type':'integer', # 'format':'int32' # } # }, # 'required':[ # 'name' # ] # }, # 'Pet':{ # 'type':'object', # 'properties':{ # 'name':{ # 'type':'string' # }, # 'category':{ # 'type':'array', # 'items':{ # '$ref':'#/definitions/Category' # } # } # } # }, # 'Error':{ # 'type':'object', # 'properties':{ # 'message':{ # 'type':'string' # }, # 'status_code':{ # 'type':'integer', # 'format':'int32' # } # }, # 'required':[ # 'status_code' # ] # } # }, # 'parameters':{ # # } #}MIT licensed. See the bundled LICENSE file for more details.