diff --git a/examples/python/django/ds/views.py b/examples/python/django/ds/views.py index 6cb2da03..e9ca9203 100644 --- a/examples/python/django/ds/views.py +++ b/examples/python/django/ds/views.py @@ -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"""{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"""{datetime.now().isoformat()}"""] ) time.sleep(0.5) - yield DatastarStreamingHttpResponse.merge_signals( + yield ServerSentEventGenerator.merge_signals( {"currentTime": f"{datetime.now().isoformat()}"} ) time.sleep(0.5) diff --git a/examples/python/fastapi/app.py b/examples/python/fastapi/app.py index 6c904801..ee38b507 100644 --- a/examples/python/fastapi/app.py +++ b/examples/python/fastapi/app.py @@ -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"""{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) diff --git a/examples/python/fasthtml/advanced.py b/examples/python/fasthtml/advanced.py index 42ad3b4f..14b4499c 100644 --- a/examples/python/fasthtml/advanced.py +++ b/examples/python/fasthtml/advanced.py @@ -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 diff --git a/examples/python/fasthtml/simple.py b/examples/python/fasthtml/simple.py index 406dd4eb..4a59bc58 100644 --- a/examples/python/fasthtml/simple.py +++ b/examples/python/fasthtml/simple.py @@ -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) diff --git a/examples/python/sanic/app.py b/examples/python/sanic/app.py index 465f9dd1..36c5c60a 100644 --- a/examples/python/sanic/app.py +++ b/examples/python/sanic/app.py @@ -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( [ """
@@ -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"""\
@@ -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"""
@@ -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) diff --git a/sdk/python/src/datastar_py/django.py b/sdk/python/src/datastar_py/django.py index eade128c..12d8597d 100644 --- a/sdk/python/src/datastar_py/django.py +++ b/sdk/python/src/datastar_py/django.py @@ -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", {})} diff --git a/sdk/python/src/datastar_py/fasthtml.py b/sdk/python/src/datastar_py/fasthtml.py index 8d2848c3..594796de 100644 --- a/sdk/python/src/datastar_py/fasthtml.py +++ b/sdk/python/src/datastar_py/fasthtml.py @@ -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): diff --git a/sdk/python/src/datastar_py/starlette.py b/sdk/python/src/datastar_py/starlette.py index 455fee25..f1a2bc76 100644 --- a/sdk/python/src/datastar_py/starlette.py +++ b/sdk/python/src/datastar_py/starlette.py @@ -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", {})}