mirror of
https://github.com/trushildhokiya/allininx-2.git
synced 2025-03-15 14:28:39 +00:00
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
from importlib import metadata
|
|
import logging
|
|
|
|
from fastapi import FastAPI,Request
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import UJSONResponse
|
|
|
|
from reworkd_platform.logging import configure_logging
|
|
from reworkd_platform.settings import settings
|
|
from reworkd_platform.web.api.error_handling import platformatic_exception_handler
|
|
from reworkd_platform.web.api.errors import PlatformaticError
|
|
from reworkd_platform.web.api.router import api_router
|
|
from reworkd_platform.web.lifetime import (
|
|
register_shutdown_event,
|
|
register_startup_event,
|
|
)
|
|
import time
|
|
|
|
|
|
def get_app() -> FastAPI:
|
|
"""
|
|
Get FastAPI application.
|
|
|
|
This is the main constructor of an application.
|
|
|
|
:return: application.
|
|
"""
|
|
configure_logging()
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
logger.info("Starting FastAPI application")
|
|
logger.debug(f"Frontend URL: {settings.frontend_url}")
|
|
logger.debug(f"Allowed Origins Regex: {settings.allowed_origins_regex}")
|
|
|
|
app = FastAPI(
|
|
title="Reworkd Platform API",
|
|
version=metadata.version("reworkd_platform"),
|
|
docs_url="/api/docs",
|
|
redoc_url="/api/redoc",
|
|
openapi_url="/api/openapi.json",
|
|
default_response_class=UJSONResponse,
|
|
)
|
|
|
|
# Middleware to log requests
|
|
@app.middleware("http")
|
|
async def log_requests(request: Request, call_next):
|
|
start_time = time.time()
|
|
logger.info(f"Request: {request.method} {request.url}")
|
|
response = await call_next(request)
|
|
process_time = time.time() - start_time
|
|
logger.info(f"Completed: {request.method} {request.url} in {process_time:.2f} sec with status {response.status_code}")
|
|
return response
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["https://allinix.ai"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
# Adds startup and shutdown events.
|
|
register_startup_event(app)
|
|
register_shutdown_event(app)
|
|
|
|
# Main router for the API.
|
|
app.include_router(router=api_router, prefix="/api")
|
|
|
|
app.exception_handler(PlatformaticError)(platformatic_exception_handler)
|
|
|
|
return app
|