Spaces:
Sleeping
Sleeping
# app.py (Server) | |
from fastapi import FastAPI, Request | |
from fastapi.responses import StreamingResponse, HTMLResponse | |
from fastapi.staticfiles import StaticFiles | |
from fastapi.middleware.cors import CORSMiddleware | |
import asyncio | |
import time # Missing import causing NameError | |
app = FastAPI() | |
# CORS Configuration | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=["*"], | |
allow_methods=["*"], | |
allow_headers=["*"], | |
) | |
# Streamable HTTP Endpoint | |
async def data_streamer(): | |
"""Generates real-time data chunks""" | |
for i in range(1, 11): | |
await asyncio.sleep(1) | |
yield f"data: Chunk {i} - {time.ctime()}\n\n" | |
async def stream_data(): | |
return StreamingResponse( | |
data_streamer(), | |
media_type="text/event-stream", | |
headers={"Cache-Control": "no-cache"} | |
) | |
# SPA Client Endpoint | |
async def get_spa(): | |
return """ | |
<html> | |
<head> | |
<title>Stream Demo</title> | |
<style> | |
body { font-family: sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; } | |
#output { border: 1px solid #ccc; padding: 20px; margin-top: 20px; } | |
</style> | |
</head> | |
<body> | |
<h1>Real-time Stream Demo</h1> | |
<button onclick="startStream()">Start Stream</button> | |
<div id="output"></div> | |
<script> | |
async function startStream() { | |
const output = document.getElementById('output'); | |
try { | |
const response = await fetch('/stream'); | |
const reader = response.body.getReader(); | |
const decoder = new TextDecoder(); | |
while(true) { | |
const { done, value } = await reader.read(); | |
if(done) break; | |
const chunk = decoder.decode(value); | |
output.innerHTML += chunk + '<br>'; | |
} | |
} catch(error) { | |
output.innerHTML = 'Error: ' + error; | |
} | |
} | |
</script> | |
</body> | |
</html> | |
""" | |