import os import json import logging import yaml from pathlib import Path from dotenv import load_dotenv from redis import Redis from contextlib import asynccontextmanager from pydantic import BaseModel, ValidationError, SecretStr, AnyHttpUrl from typing import Optional, Literal, List, Union from fastapi import FastAPI from database import setup_db_conn, get_inventory_from_redis, get_config_from_db from src.initialize import initialize_config from utils import setup_logging @asynccontextmanager async def lifespan(app: FastAPI): ''' make loading it async''' log = logging.getLogger('uvicorn') cfg_init_result = initialize_config() shared_redis_conn = setup_db_conn(os.getenv('redis_host'), os.getenv('redis_port')) if not shared_redis_conn: log.error("Cannot connect to Redis DB. Exiting...") exit(1) inv_check = get_config_from_db(shared_redis_conn) log.info(f"[DEBUG] Data validity healthcheck (DEVELOPER MODE): {inv_check}") if not cfg_init_result: log.error("Configuration initialization failed. Exiting...") # exit(1) yield log.info("Shutting down FastAPI app...") setup_logging() log = logging.getLogger('uvicorn') log.info("Starting FastAPI app...") app = FastAPI(lifespan=lifespan)