This commit is contained in:
Chase Sterling 2025-04-09 12:50:22 +02:00 committed by GitHub
commit 6d042afd0a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 30 additions and 32 deletions

View File

@ -4,7 +4,7 @@ from datetime import datetime
from django.http import HttpResponse
from datastar_py.django import DatastarStreamingHttpResponse
from datastar_py.django import DatastarStreamingHttpResponse, ServerSentEventGenerator
# ASGI Example
@ -51,11 +51,11 @@ async def home_asgi(request):
async def updates_asgi(request):
async def time_updates():
while True:
yield DatastarStreamingHttpResponse.merge_fragments(
yield ServerSentEventGenerator.merge_fragments(
[f"""<span id="currentTime">{datetime.now().isoformat()}"""]
)
await asyncio.sleep(1)
yield DatastarStreamingHttpResponse.merge_signals(
yield ServerSentEventGenerator.merge_signals(
{"currentTime": f"{datetime.now().isoformat()}"}
)
await asyncio.sleep(1)
@ -109,11 +109,11 @@ def home_wsgi(request):
def updates_wsgi(request):
def time_updates():
while True:
yield DatastarStreamingHttpResponse.merge_fragments(
yield ServerSentEventGenerator.merge_fragments(
[f"""<span id="currentTime">{datetime.now().isoformat()}"""]
)
time.sleep(0.5)
yield DatastarStreamingHttpResponse.merge_signals(
yield ServerSentEventGenerator.merge_signals(
{"currentTime": f"{datetime.now().isoformat()}"}
)
time.sleep(0.5)

View File

@ -4,7 +4,7 @@ from datetime import datetime
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from datastar_py.fastapi import DatastarStreamingResponse
from datastar_py.fastapi import DatastarStreamingResponse, ServerSentEventGenerator
app = FastAPI()
@ -53,11 +53,11 @@ async def read_root():
async def time_updates():
while True:
yield DatastarStreamingResponse.merge_fragments(
yield ServerSentEventGenerator.merge_fragments(
[f"""<span id="currentTime">{datetime.now().isoformat()}"""]
)
await asyncio.sleep(1)
yield DatastarStreamingResponse.merge_signals({"currentTime": f"{datetime.now().isoformat()}"})
yield ServerSentEventGenerator.merge_signals({"currentTime": f"{datetime.now().isoformat()}"})
await asyncio.sleep(1)

View File

@ -20,7 +20,7 @@ from fasthtml.common import *
from great_tables import GT, html
from great_tables.data import reactions
from datastar_py.fasthtml import DatastarStreamingResponse
from datastar_py.fasthtml import DatastarStreamingResponse, ServerSentEventGenerator
######################################################################################################
# This demo shows how FastHTML can be integrated with Datastar for server-driven interaction with a #
@ -93,7 +93,7 @@ def GreatTable(pattern=default_pattern):
@app.post
async def table(filter: str):
async def _():
yield DatastarStreamingResponse.merge_fragments([GreatTable(filter)])
yield ServerSentEventGenerator.merge_fragments([GreatTable(filter)])
return DatastarStreamingResponse(_())
@ -151,7 +151,7 @@ def index():
async def clock():
while True:
now = datetime.isoformat(datetime.now())
yield DatastarStreamingResponse.merge_fragments([Span(id="currentTime")(now)])
yield ServerSentEventGenerator.merge_fragments([Span(id="currentTime")(now)])
await asyncio.sleep(1)
@ -165,7 +165,7 @@ async def hello():
async def _():
# Simulate load time
await asyncio.sleep(1)
yield DatastarStreamingResponse.merge_fragments([HELLO_BUTTON])
yield ServerSentEventGenerator.merge_fragments([HELLO_BUTTON])
return DatastarStreamingResponse(_())
@ -183,11 +183,11 @@ async def reset():
Div("Hello!"),
)
async def _(sse):
async def _():
await asyncio.sleep(1)
yield sse.merge_fragments([reset_and_hello])
yield ServerSentEventGenerator.merge_fragments([reset_and_hello])
return DatastarFastHTMLResponse(_)
return DatastarStreamingResponse(_())
# Define the button once so that it can be used in the index response

View File

@ -1,11 +1,10 @@
import asyncio
import json
from datetime import datetime
from pathlib import Path
from fasthtml.common import *
from datastar_py.fasthtml import DatastarStreamingResponse
from datastar_py.fasthtml import DatastarStreamingResponse, ServerSentEventGenerator
repo_root = next(p for p in Path(__file__).parents if (p / ".git").exists())
@ -46,9 +45,9 @@ async def index():
async def clock():
while True:
now = datetime.isoformat(datetime.now())
yield DatastarStreamingResponse.merge_fragments([Span(id="currentTime")(now)])
yield ServerSentEventGenerator.merge_fragments([Span(id="currentTime")(now)])
await asyncio.sleep(1)
yield DatastarStreamingResponse.merge_signals({"currentTime": f"{now}"})
yield ServerSentEventGenerator.merge_signals({"currentTime": f"{now}"})
await asyncio.sleep(1)

View File

@ -4,9 +4,8 @@ from datetime import datetime
from sanic import Sanic
from sanic.response import html
from datastar_py import ServerSentEventGenerator as SSE
from datastar_py.consts import FragmentMergeMode
from datastar_py.sanic import datastar_respond
from datastar_py.sanic import datastar_respond, ServerSentEventGenerator
app = Sanic("DataStarApp")
@ -57,7 +56,7 @@ async def add_signal(request):
response = await datastar_respond(request)
await response.send(
SSE.merge_fragments(
ServerSentEventGenerator.merge_fragments(
[
"""
<div class="time signal">
@ -66,7 +65,7 @@ async def add_signal(request):
"""
],
selector="#timers",
merge_mode=FragmentMergeMode.FragmentMergeModeAppend,
merge_mode=FragmentMergeMode.APPEND,
)
)
@ -78,7 +77,7 @@ async def add_fragment(request):
response = await datastar_respond(request)
await response.send(
SSE.merge_fragments(
ServerSentEventGenerator.merge_fragments(
[
f"""\
<div class="time fragment">
@ -87,7 +86,7 @@ async def add_fragment(request):
"""
],
selector="#timers",
merge_mode=FragmentMergeMode.FragmentMergeModeAppend,
merge_mode=FragmentMergeMode.APPEND,
)
)
@ -100,7 +99,7 @@ async def updates(request):
while True:
await response.send(
SSE.merge_fragments(
ServerSentEventGenerator.merge_fragments(
[
f"""
<div class="time fragment" >
@ -113,6 +112,6 @@ async def updates(request):
)
await asyncio.sleep(1)
await response.send(
SSE.merge_signals({"currentTime": f"{datetime.now().isoformat()}"})
ServerSentEventGenerator.merge_signals({"currentTime": f"{datetime.now().isoformat()}"})
)
await asyncio.sleep(1)

View File

@ -5,7 +5,7 @@ from django.http import StreamingHttpResponse as _StreamingHttpResponse
from .sse import SSE_HEADERS, ServerSentEventGenerator
class DatastarStreamingHttpResponse(_StreamingHttpResponse, ServerSentEventGenerator):
class DatastarStreamingHttpResponse(_StreamingHttpResponse):
@wraps(_StreamingHttpResponse.__init__)
def __init__(self, *args, **kwargs):
kwargs["headers"] = {**SSE_HEADERS, **kwargs.get("headers", {})}

View File

@ -2,11 +2,11 @@ from typing import override
from fastcore.xml import to_xml
from .sse import SSE_HEADERS, ServerSentEventGenerator
from .starlette import DatastarStreamingResponse as _DatastarStreamingResponse
from .sse import SSE_HEADERS, ServerSentEventGenerator as _ServerSentEventGenerator
from .starlette import DatastarStreamingResponse
class DatastarStreamingResponse(_DatastarStreamingResponse):
class ServerSentEventGenerator(_ServerSentEventGenerator):
@classmethod
@override
def merge_fragments(cls, fragments, *args, **kwargs):

View File

@ -5,7 +5,7 @@ from starlette.responses import StreamingResponse as _StreamingResponse
from .sse import SSE_HEADERS, ServerSentEventGenerator
class DatastarStreamingResponse(_StreamingResponse, ServerSentEventGenerator):
class DatastarStreamingResponse(_StreamingResponse):
@wraps(_StreamingResponse.__init__)
def __init__(self, *args, **kwargs):
kwargs["headers"] = {**SSE_HEADERS, **kwargs.get("headers", {})}