ballagb19's picture
Upload captcha_solver/main.py with huggingface_hub
791a0e2 verified
Raw
History Blame Contribute Delete
1.8 kB
"""FastAPI app entrypoint."""
from __future__ import annotations
import logging
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from captcha_solver.api.routes import router
from captcha_solver.config import get_settings
def create_app() -> FastAPI:
s = get_settings()
logging.basicConfig(
level=getattr(logging, s.log_level.upper(), logging.INFO),
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
)
app = FastAPI(
title="captcha-solver-api",
description="Free local AI CAPTCHA solving API. No 2captcha. No pay-per-solve.",
version="0.1.0",
docs_url="/docs",
redoc_url="/redoc",
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(router)
@app.on_event("startup")
async def warm_engines() -> None:
from captcha_solver.api.routes import get_state
get_state()
logging.getLogger(__name__).info("engines warmed, ready")
return app
app = create_app()
def main() -> None:
import sys
import uvicorn
s = get_settings()
port = s.port
# Accept --port from command line (HF Spaces sets PORT env var)
args = sys.argv[1:]
for i, arg in enumerate(args):
if arg == "--port" and i + 1 < len(args):
try:
port = int(args[i + 1])
except ValueError:
pass
# Also respect PORT env var
import os
port = int(os.environ.get("PORT", port))
uvicorn.run(
"captcha_solver.main:app",
host=s.host,
port=port,
log_level=s.log_level,
workers=s.workers,
)
if __name__ == "__main__":
main()