import logging import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from config import settings from routes import router from routes_sentiment import router as sentiment_router from routes_macro import router as macro_router from routes_technical import router as technical_router logging.basicConfig( level=settings.log_level.upper(), format="%(asctime)s %(levelname)s %(name)s: %(message)s", ) app = FastAPI( title="OpenBB Investment Analysis API", version="0.1.0", description="REST API for stock data and rule-based investment analysis, powered by OpenBB SDK.", ) app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origins, allow_credentials=False, allow_methods=["GET", "POST"], allow_headers=["Content-Type", "Authorization"], ) app.include_router(router) app.include_router(sentiment_router) app.include_router(macro_router) app.include_router(technical_router) @app.get("/health", response_model=dict[str, str]) async def health() -> dict[str, str]: return {"status": "ok"} if __name__ == "__main__": uvicorn.run( "main:app", host=settings.host, port=settings.port, reload=settings.debug, )