connect/api/api/__main__.py

85 lines
2.2 KiB
Python

import sys
import logging
import loguru
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from uvicorn import run
from api.config import get_settings, DefaultSettings
from api.endpoints import list_of_routes
from api.utils.common import get_hostname
from api.services.middleware import MiddlewareAccessTokenValidadtion
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
def bind_routes(application: FastAPI, setting: DefaultSettings) -> None:
"""Bind all routes to application."""
for route in list_of_routes:
application.include_router(route, prefix=setting.PATH_PREFIX)
def get_app() -> FastAPI:
"""Creates application and all dependable objects."""
loguru.logger.remove()
loguru.logger.add(sys.stderr, level="WARNING")
loguru.logger.add(sys.stdout, level="DEBUG")
description = "Эндпоинты"
application = FastAPI(
title="Connect API",
description=description,
docs_url="/swagger",
openapi_url="/openapi",
version="0.0.2",
)
settings = get_settings()
bind_routes(application, settings)
application.state.settings = settings
return application
app = get_app()
dev_origins = [
"http://localhost:3000",
"http://127.0.0.1:64775",
]
prod_origins = [""]
origins = dev_origins if get_settings().ENV == "local" else prod_origins
if __name__ == "__main__":
settings_for_application = get_settings()
if settings_for_application.ENV == "prod":
run(
"api.__main__:app",
host=get_hostname(settings_for_application.APP_HOST),
port=settings_for_application.APP_PORT,
reload=False,
log_level="info",
)
else:
run(
"api.__main__:app",
host=get_hostname(settings_for_application.APP_HOST),
port=settings_for_application.APP_PORT,
reload=True,
reload_dirs=["api", "tests"],
log_level="info",
)
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["GET", "POST", "OPTIONS", "DELETE", "PUT"],
allow_headers=["*"],
)
app.add_middleware(MiddlewareAccessTokenValidadtion)