Buck_Tracker / api /main.py
codewithRiz's picture
fix filter label
21e8ee7
# main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
import logging
from pathlib import Path
from dotenv import load_dotenv
import os
# Load .env
load_dotenv()
# ----------------- Import Routers -----------------
from .detection import router as detection_router
from .auth import router as auth_router
from .camera import router as camera_router
from .config import UPLOAD_DIR
from .analytics import router as analytics_router
from .view_image import router as view_images_router
# ---------------- Logging Setup -----------------
logger = logging.getLogger("ServerLogger")
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s"
)
# Ensure UPLOAD_DIR exists
Path(UPLOAD_DIR).mkdir(parents=True, exist_ok=True)
# ---------------- CORS Config -----------------
raw_origins = os.getenv("ALLOWED_ORIGINS", "")
# Clean + split safely
allowed_origins = [origin.strip() for origin in raw_origins.split(",") if origin.strip()]
print("CORS Origins:", allowed_origins)
# ---------------- Create App -----------------
def create_app() -> FastAPI:
app = FastAPI(title="Wildlife Detection & Camera API Server")
app.add_middleware(
CORSMiddleware,
allow_origins=allowed_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# ---- Static Files ----
app.mount("/user_data", StaticFiles(directory=UPLOAD_DIR), name="user_data")
logger.info(f"Static folder mounted at /user_data -> {UPLOAD_DIR}")
# ---- Routers ----
app.include_router(auth_router, prefix="/auth", tags=["Auth"])
app.include_router(camera_router, prefix="/api", tags=["Camera"])
app.include_router(detection_router, prefix="/api/detection", tags=["Detection"])
app.include_router(analytics_router, prefix="/api", tags=["Analytics"])
app.include_router(view_images_router, prefix="/api", tags=["Images"])
# ---- Startup ----
@app.on_event("startup")
async def startup_check():
logger.info("Server started successfully. All routers are active.")
# ---- Root ----
@app.get("/")
def root():
return {
"message": "Wildlife Detection & Camera API Server is Running",
"routes": {
"auth": "/auth/...",
"camera": "/api/camera/...",
"detection": "/api/detection/...",
"analytics": "/api/analytics/..."
}
}
return app
app = create_app()