Запуск swagger_server через uWSGI

Мой сгенерированный swagger_server отлично работает при запуске с: python3 -m swagger_server

#!/usr/bin/env python3

import connexion

from swagger_server import encoder


def main():
    app = connexion.App(__name__, specification_dir='./swagger/')
    app.app.json_encoder = encoder.JSONEncoder
    app.add_api('swagger.yaml', arguments={'title': 'API'}, pythonic_params=True)
    app.run(port=8080)


if __name__ == '__main__':
    main()

Проблема в том, что я не могу найти синтаксис для вызова wsgi.py сервера swagger_server, поскольку он был построен как модуль.

Возникла такая проблема, помогите пожалуйста написать wsgi.py

P.S. если вам нужна еще какая-то дополнительная информация для решения этой проблемы, напишите я предоставлю.

UPD. Решение: Поменял __main__.py на:

#!/usr/bin/env python3

import connexion

from swagger_server import encoder



app = connexion.App(__name__, specification_dir='./swagger/')
app.app.json_encoder = encoder.JSONEncoder
app.add_api('swagger.yaml', arguments={'title': 'API'}, pythonic_params=True)
application = app.app

и добавил wsgi.py в корневую папку:

from swagger_server.__main__ import application


if __name__ == '__main__':
    application.run()

Запустил через команду uwsgi --http-socket 127.0.0.1:3031 --wsgi-file wsgi.py --callable application --processes 4 --threads 2


Ответы (2 шт):

Автор решения: eri

connexion.App не имеет интерфейса wsgi.

Можно вытащить aiohttp( или flask) приложение по ссылке

aioapp = app.app

А дальше оборачивать это в wsgi

→ Ссылка
Автор решения: hedgehogues

Одно из решений -- отказ от flask в пользу fastapi. Затраты на переход минимальные. В замен Вы получите из коробки:

  • uvicorn
  • swagger
  • pydantic

Пример

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

Запуск

uvicorn main:app --reload --workers=5 --host=0.0.0.0 --port=8080

введите сюда описание изображения введите сюда описание изображения

→ Ссылка