Source code for core_apis.api
# -*- coding: utf-8 -*-
"""
FastAPI application factory and configuration.
This module provides the main application factory function for creating
configured FastAPI instances with routing, middleware, and health checks.
"""
from typing import Optional
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from .config import AppConfig
from .cors import CorsConfig
from .routers import routers
from .routers.health import health_router
__all__ = [
"AppConfig",
"create_application",
"CorsConfig",
]
[docs]
def create_application(
app_config: Optional[AppConfig] = None,
**kwargs,
) -> FastAPI:
"""
It creates the FastAPI application. Remember to inject the routers before
creating the application like:
.. code-block:: python
from fastapi import APIRouter
from core_apis.api import server
from core_apis.api.routers import add_router
router = APIRouter()
add_router(router)
@router.get(path="/server_status")
def new_router():
return {"status": "OK"}
server.run()
..
:param app_config:
Application configuration. Pass an :class:`AppConfig` instance
to customize name, version, CORS, debug mode, and more.
Defaults to :class:`AppConfig` with all default values.
:param kwargs: Additional keyword arguments passed directly to :class:`FastAPI`.
:return: Returns the FastAPI application.
"""
_config = app_config or AppConfig()
application = FastAPI(
title=_config.name,
description=_config.description,
version=_config.version,
debug=_config.debug,
**kwargs,
)
if _config.cors_config and _config.cors_config.enabled:
application.add_middleware(
CORSMiddleware, # type: ignore[arg-type]
allow_origins=_config.cors_config.origins,
allow_methods=_config.cors_config.methods,
allow_headers=_config.cors_config.headers,
)
for router in [*routers, health_router]:
application.include_router(
router=router,
prefix=_config.base_path,
)
return application