Запуск 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 шт):
connexion.App не имеет интерфейса wsgi.
Можно вытащить aiohttp( или flask) приложение по ссылке
aioapp = app.app
А дальше оборачивать это в wsgi
Одно из решений -- отказ от 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

