85 lines
2.2 KiB
Python
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)
|