diff --git a/app.py b/app.py index 4772c92..4ba4c03 100644 --- a/app.py +++ b/app.py @@ -1,6 +1,6 @@ import os from typing import Optional -from fastapi import FastAPI, HTTPException, Security, Depends +from fastapi import FastAPI, HTTPException, Security, Depends, Request from fastapi.security import APIKeyHeader from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse @@ -27,9 +27,23 @@ import os from PyPDF2 import PdfReader from config import QUIZ_TYPES from config import Config +import logging +import time # Load environment variables load_dotenv() -API_KEY = os.getenv("API_KEY_ACCESS") +from config import Config +API_KEY = Config.API_KEY_ACCESS + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' +) +logger = logging.getLogger(__name__) + +# Also configure uvicorn logger +uvicorn_logger = logging.getLogger("uvicorn.access") +uvicorn_logger.setLevel(logging.INFO) base_path = os.path.join("data", "config_files") QUESTIONS_PATH = os.path.join(base_path, "questions.json") @@ -46,6 +60,42 @@ app = FastAPI( version="1.0.0" ) +# Add request logging middleware +@app.middleware("http") +async def log_requests(request: Request, call_next): + start_time = time.time() + + # Log incoming request (using both logger and print for visibility) + log_msg = f"🔥 INCOMING REQUEST: {request.method} {request.url}" + logger.info(log_msg) + print(log_msg) + + headers_msg = f"🔥 Headers: {dict(request.headers)}" + logger.info(headers_msg) + print(headers_msg) + + # Get request body for POST requests + if request.method == "POST": + body = await request.body() + body_msg = f"🔥 Request Body: {body.decode('utf-8') if body else 'Empty'}" + logger.info(body_msg) + print(body_msg) + + # Re-create request with body for downstream processing + async def receive(): + return {"type": "http.request", "body": body} + request._receive = receive + + response = await call_next(request) + + # Log response + process_time = time.time() - start_time + response_msg = f"🔥 RESPONSE: {response.status_code} - Time: {process_time:.4f}s" + logger.info(response_msg) + print(response_msg) + + return response + # Add CORS middleware app.add_middleware( CORSMiddleware, @@ -288,7 +338,7 @@ async def generate_pdf_endpoint( if request.form_id: print(f"Fetching form response for form_id: {request.form_id}") # Debugging print try: - x_api_key = os.getenv("BACKEND_XAPI_KEY") + x_api_key = Config.BACKEND_XAPI_KEY url = f"{backend_base_url}/v3/api/custom/theme-document/answer/{request.form_id}?x-project={x_api_key}" result = requests.get(url) result.raise_for_status() # Ensure we raise an error for bad responses