import os import time import gradio as gr from starlette.requests import Request from starlette.responses import JSONResponse, Response DOWNLOAD_SIZE_BYTES = 10 * 1024 * 1024 _RANDOM_BLOB = os.urandom(DOWNLOAD_SIZE_BYTES) NO_CACHE_HEADERS = { "Cache-Control": "no-store, no-cache, must-revalidate, max-age=0", "Pragma": "no-cache", "Expires": "0", } def register_backend_routes(blocks: gr.Blocks) -> None: """Attach REST endpoints to the underlying Gradio server once it exists.""" server_app = getattr(blocks, "server_app", None) if server_app is None: return if getattr(server_app.state, "speedtest_routes_installed", False): return server_app.state.speedtest_routes_installed = True async def ping_test() -> Response: headers = {**NO_CACHE_HEADERS, "Content-Length": "4", "X-Server-Timestamp": str(time.time())} return Response(content="pong", media_type="text/plain", headers=headers) async def download_test() -> Response: headers = { **NO_CACHE_HEADERS, "Content-Length": str(DOWNLOAD_SIZE_BYTES), "Content-Disposition": f'attachment; filename="speedtest_{DOWNLOAD_SIZE_BYTES}.bin"', } return Response(content=_RANDOM_BLOB, media_type="application/octet-stream", headers=headers) async def upload_test(request: Request) -> JSONResponse: payload = await request.body() headers = dict(NO_CACHE_HEADERS) return JSONResponse({"received_bytes": len(payload)}, headers=headers) server_app.add_api_route("/ping_test", ping_test, methods=["GET"]) server_app.add_api_route("/download_test", download_test, methods=["GET"]) server_app.add_api_route("/upload_test", upload_test, methods=["POST"]) with gr.Blocks(fill_height=True) as demo: gr.HTML(value="""
Run a download, upload, and latency check right from your browser. Results reflect the real connection between this device and Hugging Face Spaces.