Files
ytdlp/app/main.py
T

45 lines
1.6 KiB
Python
Raw Normal View History

2026-08-12 18:42:03 +03:00
from pathlib import Path
from fastapi import FastAPI
from fastapi import HTTPException
2026-08-12 18:42:03 +03:00
from fastapi import Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from starlette.concurrency import run_in_threadpool
from app.inspection import InspectionError, UnsafeUrlError, inspect_url
from app.models import InspectionRequest, InspectionResponse
app = FastAPI(
title="Media Ingest",
description="Private broadcast media-ingest service.",
version="0.1.0",
)
2026-08-12 18:42:03 +03:00
app_directory = Path(__file__).resolve().parent
templates = Jinja2Templates(directory=app_directory / "templates")
app.mount("/static", StaticFiles(directory=app_directory / "static"), name="static")
2026-08-12 18:42:03 +03:00
@app.get("/", response_class=HTMLResponse, include_in_schema=False)
def index(request: Request) -> HTMLResponse:
return templates.TemplateResponse(request=request, name="index.html")
@app.get("/health", tags=["system"])
def health() -> dict[str, str]:
"""Report whether the application process can serve requests."""
return {"status": "healthy"}
@app.post("/api/inspect", response_model=InspectionResponse, tags=["inspection"])
async def inspect_source(request: InspectionRequest) -> dict[str, object]:
"""Inspect a public video URL without downloading media."""
try:
return await run_in_threadpool(inspect_url, request.url)
except UnsafeUrlError as error:
raise HTTPException(status_code=400, detail=str(error)) from error
except InspectionError as error:
raise HTTPException(status_code=422, detail=str(error)) from error