add a datastar action
This commit is contained in:
parent
33dbb143fd
commit
3fc999a69b
3 changed files with 142 additions and 2 deletions
30
repub/web.py
30
repub/web.py
|
|
@ -7,7 +7,8 @@ from contextlib import suppress
|
|||
from typing import cast
|
||||
|
||||
import htpy as h
|
||||
from datastar_py.quart import DatastarResponse
|
||||
from datastar_py import ServerSentEventGenerator as SSE
|
||||
from datastar_py.quart import DatastarResponse, read_signals
|
||||
from datastar_py.sse import DatastarEvent
|
||||
from htpy import Renderable
|
||||
from quart import Quart, Response, request, url_for
|
||||
|
|
@ -77,6 +78,16 @@ def create_app(*, enable_demo_refresh: bool = True) -> Quart:
|
|||
)
|
||||
return DatastarResponse(_unsubscribe_on_close(queue, stream, app))
|
||||
|
||||
@app.post("/demo/decrement")
|
||||
async def demo_decrement() -> DatastarResponse:
|
||||
amount, error = _validated_decrement_amount(await read_signals())
|
||||
if error is not None:
|
||||
return DatastarResponse(SSE.patch_signals({"decrementError": error}))
|
||||
|
||||
set_active_jobs(app, max(0, get_active_jobs(app) - amount))
|
||||
trigger_refresh(app)
|
||||
return DatastarResponse(SSE.patch_signals({"decrementError": ""}))
|
||||
|
||||
return app
|
||||
|
||||
|
||||
|
|
@ -115,3 +126,20 @@ async def _demo_refresh_loop(app: Quart) -> None:
|
|||
await asyncio.sleep(1)
|
||||
set_active_jobs(app, get_active_jobs(app) + 1)
|
||||
trigger_refresh(app)
|
||||
|
||||
|
||||
def _validated_decrement_amount(
|
||||
signals: dict[str, object] | None,
|
||||
) -> tuple[int, str | None]:
|
||||
raw_amount = (
|
||||
"" if signals is None else str(signals.get("decrementAmount", "")).strip()
|
||||
)
|
||||
try:
|
||||
amount = int(raw_amount)
|
||||
except ValueError:
|
||||
return 0, "Decrement amount must be an odd integer."
|
||||
|
||||
if amount < 1 or amount % 2 == 0:
|
||||
return 0, "Decrement amount must be an odd integer."
|
||||
|
||||
return amount, None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue