Skip to content

ryanwang520/flask-swagger-plus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

flask-swagger-plus

Extract swagger spec from source code (with Form and Schema components integrated).

Install

pip install flask-swagger-plus

A Simple Example

from flask import Flask, jsonify
from flask.views import MethodView
from flask_swagger_plus import Form, SwaggerResponse, StringField, form, swagger
from marshmallow import Schema, fields

class ParamsForm(Form):
    email = StringField()
    name = StringField()

class AddressSchema(Schema):
    street = fields.Str()
    state = fields.Str()
    country = fields.Str()

class UserAPI(MethodView):

    @ParamsForm
    @SwaggerResponse(AddressSchema)
    def post(self):
        """
        create a new user
        ---
        """
        print(form.email)
        print(form.name)
        return {
            'street': 'street',
            'state': 'state',
            'country': 'country'
        }


app = Flask(__name__)

app.add_url_rule('/users/', view_func=UserAPI.as_view('show_users'))


@app.route('/swagger.json')
def spec():
    return jsonify(swagger(app))

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

docstring with --- is required as we can thus know if you want to export an api to swagger spec. It's also available if you prefer to using decorator style router registry.

@app.route('/post_user')
@ParamsForm
@SwaggerResponse(AddressSchema)
def post_user():
    """
    create user
    ---
    """
    return {}

The json result from /swagger.json would like

{
  "definitions": {
    "__main__post:AddressSchema": {
      "properties": {
        "country": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "street": {
          "type": "string"
        }
      }
    }
  },
  "info": {
    "title": "Cool product name",
    "version": "0.0.0"
  },
  "paths": {
    "/users/": {
      "post": {
        "description": "",
        "parameters": [
          {
            "description": "",
            "in": "formData",
            "name": "email",
            "type": "string"
          },
          {
            "description": "",
            "in": "formData",
            "name": "name",
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "api result",
            "schema": {
              "$ref": "#/definitions/__main__post:AddressSchema"
            }
          }
        },
        "security": [],
        "summary": "create a new user",
        "tags": [
          "__main__"
        ]
      }
    }
  },
  "swagger": "2.0"
}

Hope you enjoy it!

About

Powerful swagger spec extractor

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages