Skip to main content

extract swagger spec from source code and docstring for a flask app

Project description

# flask-swagger-plus
Extract swagger spec from source code (with `Form` and `Schema` components integrated).


A Simple Example
```python
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.
```python
@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!

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-swagger-plus-0.0.3.tar.gz (8.4 kB view hashes)

Uploaded Source

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