2017-01-12 1 views
3

Я добавляю пользовательский интерфейс Swagger к моему приложению Python Flask с использованием Flasgger. Наиболее распространенные примеры в Интернете являются для основного стиля Колбы с использованием @app.route:Как использовать Flasgger с использованием фляг с помощью чертежей?

from flasgger.utils import swag_from 

@app.route('/api/<string:username>') 
@swag_from('path/to/external_file.yml') 
def get(username): 
    return jsonify({'username': username}) 

Это работает.

В моем приложении, однако, я не использую декораторы @app.route для определения конечных точек. Я использую фляжки Чертежи. Как следующее:

from flask import Flask, Blueprint 
from flask_restful import Api, Resource 
from flasgger.utils import swag_from 
... 

class TestResourceClass(Resource): 

     @swag_from('docs_test_get.yml', endpoint='test') 
     def get() : 
     print "This is the get method for GET /1.0/myapi/test endpoint" 

app = Flask(__name__) 
my_api_blueprint = Blueprint('my_api', __name__) 
my_api = Api(my_api_blueprint) 

app.register_blueprint(my_api_blueprint, url_prefix='/1.0/myapi/') 

my_api.add_resource(TestResourceClass, '/test/' 
         endpoint='test', 
         methods=['GET', 'POST', 'PUT', 'PATCH', 'DELETE']) 
.... 

Как показано выше, я использовал @swag_from декоратора на методе TestResourceClass.get() который связан с методом GET, конечной точкой. У меня также есть конечная точка = test, соответствующая в двух местах.

Но я ничего не получаю от пользовательского интерфейса Swagger, все пусто. Файл docs_test_get.yml содержит действительную разметку yaml для определения спецификации swagger.

Что мне не хватает? Как я могу получить пользовательский интерфейс Flasgger Swagger, работающий с настройкой Flask Blueprint?

+0

Я знаю, что это не помогает с вашим вопросом, но здесь идет на всякий случай. Я не использую flassger, я использую flask-swagger: https://github.com/gangverk/flask-swagger. Я создал запрос на перенос, который специально решает эту проблему: https://github.com/gangverk/flask- swagger/pull/34 Я могу только сказать вам, что колбаса теперь поддерживает чертежи – AArias

+0

Спасибо, я посмотрю. Я посмотрел на альтернативы и нашел https://github.com/rantav/flask-restful-swagger, который, похоже, намного лучше поддерживает приложения Flask с использованием BluePrints и ресурсов для определения API. –

ответ

0

Функция swag_from имеет некоторую ошибку для анализа пути к файлу. Вы можете использовать строку doc для определения api в get(). flasgger проанализирует метод MethodView() как get, post.

+0

Я тестировал, что путь к файлу не является проблемой в swag_from, когда он используется в определениях api в стиле без плана. –

2

Теперь есть пример Blueprint приложения в https://github.com/rochacbruno/flasgger/blob/master/examples/example_blueprint.py

""" 
A test to ensure routes from Blueprints are swagged as expected. 
""" 
from flask import Blueprint, Flask, jsonify 

from flasgger import Swagger 
from flasgger.utils import swag_from 

app = Flask(__name__) 

example_blueprint = Blueprint("example_blueprint", __name__) 


@example_blueprint.route('/usernames/<username>', methods=['GET', 'POST']) 
@swag_from('username_specs.yml', methods=['GET']) 
@swag_from('username_specs.yml', methods=['POST']) 
def usernames(username): 
    return jsonify({'username': username}) 


@example_blueprint.route('/usernames2/<username>', methods=['GET', 'POST']) 
def usernames2(username): 
    """ 
    This is the summary defined in yaml file 
    First line is the summary 
    All following lines until the hyphens is added to description 
    the format of the first lines until 3 hyphens will be not yaml compliant 
    but everything below the 3 hyphens should be. 
    --- 
    tags: 
     - users 
    parameters: 
     - in: path 
     name: username 
     type: string 
     required: true 
    responses: 
     200: 
     description: A single user item 
     schema: 
      id: rec_username 
      properties: 
      username: 
       type: string 
       description: The name of the user 
       default: 'steve-harris' 
    """ 
    return jsonify({'username': username}) 


app.register_blueprint(example_blueprint) 

swag = Swagger(app) 

if __name__ == "__main__": 
    app.run(debug=True) 
+0

@BaummitAugen сделано! –

0

Кажется flasgger не работает или не имеет должной поддержки для голубых определений печати стиль КОЛБУ (пока). Я использовал https://github.com/rantav/flask-restful-swagger, который отлично работал!