# app.py from flask import Flask, Response, request, jsonify import os app = Flask(__name__) # —————————————————————————————— # Pre-generate a 10 MiB random blob for download tests # —————————————————————————————— DOWNLOAD_SIZE_BYTES = 10 * 1024 * 1024 _blob = os.urandom(DOWNLOAD_SIZE_BYTES) # —————————————————————————————— # Route: Root – serve the HTML + JS speed‐test page # —————————————————————————————— @app.route("/") def index(): html = """
This runs entirely in your browser—download a 10 MiB file and upload random data to measure your real Internet link.
""" return Response(html, mimetype="text/html") # —————————————————————————————— # Route: /ping_test – empty 200 response (used for ping measurement) # —————————————————————————————— @app.route("/ping_test") def ping_test(): return Response(status=200) # —————————————————————————————— # Route: /download_test – serve the 10 MiB random blob # —————————————————————————————— @app.route("/download_test") def download_test(): return Response( _blob, mimetype="application/octet-stream", headers={ "Content-Disposition": f"attachment; filename=\"test_{DOWNLOAD_SIZE_BYTES}.bin\"" } ) # —————————————————————————————— # Route: /upload_test – accept upload, return JSON with received size # —————————————————————————————— @app.route("/upload_test", methods=["POST"]) def upload_test(): data = request.get_data() # read all bytes size = len(data) return jsonify({"received_bytes": size}) # —————————————————————————————— # Run the Flask app # —————————————————————————————— if __name__ == "__main__": # Bind to 0.0.0.0 so HF’s runtime can route traffic correctly app.run(host="0.0.0.0", port=7860, debug=False)