1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
"""
In this example `openapi` version is used instead of `swagger` version.
"""
from flask import Flask
from flasgger import Swagger
app = Flask(__name__)
swagger_config = {
"headers": [],
"openapi": "3.0.2",
"components": {
"securitySchemes": {
"oAuthSample": {
"type": "oauth2",
"flows": {
"clientCredentials": {
"tokenUrl": "https://api.pgsmartshopassistant.com/o/token/",
}
}
}
},
},
"servers": [
{
"url": "https://api.example.com/v1",
"description": "Production server (uses live data)"
},
{
"url": "https://sandbox-api.example.com:8443/v1",
"description": "Sandbox server (uses test data)"
}
],
"specs": [
{
"endpoint": "swagger",
"route": "/characteristics/swagger.json",
"rule_filter": lambda rule: True, # all in
"model_filter": lambda tag: True, # all in
}
],
"title": "Product Characteristics API",
"version": '',
"termsOfService": "",
"static_url_path": "/characteristics/static",
"swagger_ui": True,
"specs_route": "/characteristics/swagger/",
"description": "",
}
colors_spec = {
"tags": [
"colors"
],
"parameters": [
{
"name": "palette",
"in": "path",
"type": "string",
"enum": [
"all",
"rgb",
"cmyk"
],
"required": True,
"default": "all",
"description": "Which palette to filter?"
}
],
"operationId": "get_colors",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"security": {
"colors_auth": [
"write:colors",
"read:colors"
]
},
"schemes": [
"http",
"https"
],
"deprecated": False,
"externalDocs": {
"description": "Project repository",
"url": "http://github.com/rochacbruno/flasgger"
},
"definitions": {
"Palette": {
"type": "object",
"properties": {
"palette_name": {
"type": "array",
"items": {
"$ref": "#/definitions/Color"
}
}
}
},
"Color": {
"type": "string"
}
},
"responses": {
"200": {
"description": "A list of colors (may be filtered by palette)",
"schema": {
"$ref": "#/definitions/Palette"
},
"examples": {
"rgb": [
"red",
"green",
"blue"
]
}
}
}
}
swag = Swagger(app, config=swagger_config)
def test_swag(client, specs_data):
"""
This test is runs automatically in Travis CI
:param client: Flask app test client
:param specs_data: {'url': {swag_specs}} for every spec in app
"""
for spec in specs_data.values():
assert 'openapi' in spec
assert '3.0.2' == spec['openapi']
assert 'swagger' not in spec
assert 'components' in spec
assert 'securitySchemes' in spec['components']
assert 'oAuthSample' in spec['components']['securitySchemes']
assert 'servers' in spec # See issue #366
if __name__ == '__main__':
app.run(debug=True)
|