Swagger-пользовательский интерфейс не может найти вложенные функции Python - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь задокументировать уже существующий Python API с помощью Swagger . Я написал swagger.yaml для каждого маршрута, задокументированного с помощью их editor . Теперь я хотел бы развернуть документацию, используя connexion .

(краткий пример файла swagger.yaml)

swagger: "2.0"
info:
  description: "This is a description of the routes of the API"
  version: "1.0.0"
  title: "API"

basePath: "/api"

paths:
  /home:
    get:
     tags:
      - "API"
      summary: "Home of the application"
      operationId: home
      responses:
        200:
          description: "Success"
          schema:
            type: object
            properties:
              user_id:
                type: string
              username:
                type: string
        403:
          description: "Limit of api connections overrun"

Я изменил приложение Flask с помощью connectxion.app во время запуска сервера и смог указать файл .yaml. Но когда я пытаюсь запустить его, он мгновенно вылетает:

  File "/usr/local/lib/python2.7/dist-packages/connexion/utils.py", line 74, in get_function_from_name
raise ValueError("Empty function name")
exceptions.ValueError: Empty function name

Насколько я понимаю, связь будет основываться на функции ручного тестирования объекта идентификатор операции на каждом маршруте, который должен указывать на функцию, обрабатывающую запрос. Проблема: каждый маршрут API определяется как вложенная функция.

def add_routes(app, oauth):
@app.route('/api/home', methods=['GET'])
@oauth.require_oauth()
def home():
    user = request.oauth.user
    return jsonify(
        user_id=user.user_id,
        username=user.username
    )

Я знаю, что вложенные функции в python на самом деле вовсе не являются функциями: не могут вызываться, просто присутствуют в языке, чтобы мы, программисты, могли организовать наш код.

Я думаю, что это может быть проблемой с connectxion, он просто не способен найти эти функции и отобразить их для функции ручного тестирования, но я не уверен, как это исправить. Видите ли вы что-то, что позволило бы подключению отобразить функцию без необходимости рефакторинга всего API, чтобы не иметь вложенных функций?

Большое спасибо за любую помощь.

1 Ответ

0 голосов
/ 10 апреля 2019

Полагаю, вы не определили свою функцию-обработчик. Вам необходимо предоставить модуль + функцию, которая соответствует идентификатор операции в спецификации.

Например: У меня есть функция get_user () в файле app.py, мне нужно установить идентификатор операции для app.get_user.

operationId: app.get_user

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...