patx/micropie
remove un-needed setattr in sse example
Commit 5de1bf2 · patx · 2025-07-13T22:01:26-04:00
Comments
No comments yet.
Diff
diff --git a/examples/server_sent_events/chat.py b/examples/server_sent_events/chat.py
index 5a47192..5dcdbc5 100644
--- a/examples/server_sent_events/chat.py
+++ b/examples/server_sent_events/chat.py
@@ -67,7 +67,6 @@ class ChatApp(App):
async def events(self):
async def stream():
queue = asyncio.Queue()
- setattr(stream, "_micropie_disconnect_queue", queue)
self.clients.add(queue)
try:
for msg in self.messages:
diff --git a/examples/streaming/sse/app.py b/examples/streaming/sse/app.py
deleted file mode 100644
index bd469f0..0000000
--- a/examples/streaming/sse/app.py
+++ /dev/null
@@ -1,55 +0,0 @@
-import asyncio
-import random
-from micropie import App
-
-
-class MyApp(App):
-
- async def index(self):
- return """
- <!DOCTYPE html>
- <html>
- <head>
- <title>Server-Sent Events Demo with MicroPie</title>
- </head>
- <body>
- <h1>Server-Sent Events with MicroPie</h1>
- <div id="output"></div>
- <script>
- const source = new EventSource('/events');
- source.onmessage = function(event) {
- const newElement = document.createElement("p");
- newElement.textContent = `Received: ${event.data}`;
- document.getElementById("output").appendChild(newElement);
- };
- source.onerror = function() {
- console.log("SSE error occurred");
- };
- </script>
- </body>
- </html>
- """
-
- # SSE endpoint to stream random numbers
- async def events(self):
- async def event_generator():
- try:
- while True:
- # Generate random number
- data = f"Random number: {random.randint(1, 100)}"
- # Yield SSE formatted data
- yield f"data: {data}\n\n".encode("utf-8")
- # Wait for 1 second before sending next event
- await asyncio.sleep(1)
- except asyncio.CancelledError:
- print("Client disconnected")
- pass
-
- # Return status code, async generator, and headers for SSE
- return 200, event_generator(), [("Content-Type", "text/event-stream")]
-
-app = MyApp()
-
-if __name__ == "__main__":
- import uvicorn
- uvicorn.run(app, host="0.0.0.0", port=8000)
diff --git a/examples/streaming/sse/chat.py b/examples/streaming/sse/chat.py
deleted file mode 100644
index 5a47192..0000000
--- a/examples/streaming/sse/chat.py
+++ /dev/null
@@ -1,91 +0,0 @@
-from micropie import App
-from collections import deque
-import json
-import asyncio
-
-class ChatApp(App):
- def __init__(self):
- super().__init__()
- self.messages = deque(maxlen=100)
- self.clients = set()
-
- async def index(self):
- # Inline HTML for demo purposes
- html = """
- <!doctype html>
- <title>Micropie Chat SSE</title>
- <h1>Micropie Chat SSE Demo</h1>
- <form id="chat-form">
- Name: <input id="username" value="Anonymous" size="10">
- <input id="message" autocomplete="off" size="40">
- <button>Send</button>
- </form>
- <pre id="log"></pre>
- <script>
- const log = document.getElementById('log');
- const usernameInput = document.getElementById('username');
- const messageInput = document.getElementById('message');
- const form = document.getElementById('chat-form');
-
- const evtSource = new EventSource('/events');
- evtSource.onmessage = function(event) {
- const data = JSON.parse(event.data);
- log.textContent += data.username + ": " + data.message + "\\n";
- };
-
- form.onsubmit = async function(e) {
- e.preventDefault();
- await fetch('/send', {
- method: 'POST',
- headers: {'Content-Type': 'application/json'},
- body: JSON.stringify({
- username: usernameInput.value,
- message: messageInput.value,
- })
- });
- messageInput.value = "";
- };
- </script>
- """
- return 200, html, [('Content-Type', 'text/html')]
-
- async def send(self):
- data = self.request.get_json
- username = data.get("username", "Anonymous")
- message = data.get("message", "")
- if message.strip():
- msg = {"username": username, "message": message}
- self.messages.append(msg)
- # Broadcast to all connected clients
- for client in self.clients.copy():
- try:
- await client.put(json.dumps(msg))
- except Exception:
- self.clients.discard(client)
- return 200, {"status": "success"}
-
- async def events(self):
- async def stream():
- queue = asyncio.Queue()
- setattr(stream, "_micropie_disconnect_queue", queue)
- self.clients.add(queue)
- try:
- for msg in self.messages:
- yield f"data: {json.dumps(msg)}\n\n"
- while True:
- try:
- msg = await queue.get()
- if msg is None:
- break
- yield f"data: {msg}\n\n"
- except asyncio.CancelledError:
- break
- finally:
- self.clients.discard(queue)
- return 200, stream(), [
- ('Content-Type', 'text/event-stream'),
- ('Cache-Control', 'no-cache'),
- ('Connection', 'keep-alive')
- ]
-
-app = ChatApp()