| import logging |
|
|
| import gradio as gr |
| from fastapi import FastAPI, Request |
| from fastapi.middleware.cors import CORSMiddleware |
| from fastapi.responses import JSONResponse |
| from slowapi import _rate_limit_exceeded_handler |
| from slowapi.errors import RateLimitExceeded |
| from slowapi.middleware import SlowAPIMiddleware |
|
|
| from app.config import DEMO_MODE |
| from app.middleware.rate_limit import auth_limiter, account_limiter |
| from app.routes import auth_routes, generate, brand_voice, history, account, payments, bulk |
| from app.legal import pages as legal_pages |
| from app.ui import build_ui |
|
|
| logging.basicConfig(level=logging.INFO) |
| logger = logging.getLogger("etsy_optimizer") |
|
|
| app = FastAPI(title="Etsy Listing Optimizer API") |
|
|
| |
| |
| |
| |
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=[], |
| allow_credentials=True, |
| allow_methods=["GET", "POST", "DELETE"], |
| allow_headers=["Authorization", "Content-Type"], |
| ) |
|
|
| |
| app.state.limiter = auth_limiter |
| |
| |
| app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) |
| app.add_middleware(SlowAPIMiddleware) |
|
|
|
|
| @app.exception_handler(Exception) |
| async def friendly_error_handler(request: Request, exc: Exception): |
| |
| logger.exception("Unhandled error on %s", request.url.path) |
| return JSONResponse(status_code=500, content={"detail": "Something went wrong. Please try again."}) |
|
|
|
|
| app.include_router(auth_routes.router, tags=["auth"]) |
| app.include_router(generate.router, tags=["generate"]) |
| app.include_router(brand_voice.router, tags=["brand-voice"]) |
| app.include_router(history.router, tags=["history"]) |
| app.include_router(account.router, tags=["account"]) |
| app.include_router(payments.router, tags=["billing"]) |
| app.include_router(bulk.router, tags=["bulk"]) |
| app.include_router(legal_pages.router, tags=["legal"]) |
|
|
|
|
| @app.get("/health") |
| async def health(): |
| return {"status": "ok", "demo_mode": DEMO_MODE} |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| gradio_ui = build_ui(app) |
| app = gr.mount_gradio_app(app, gradio_ui, path="/") |