22
33The ` datastar-py `  package provides backend helpers for the [ Datastar] ( https://data-star.dev )  JS library.
44
5- Datastar requires all backend  responses to use  SSE. This allows the backend to
6- send any number of responses , from zero to inifinity .
5+ Datastar sends  responses back  to the browser using  SSE. This allows the backend to
6+ send any number of events , from zero to infinity in response to a single request .
77
8- ` datastar-py `  helps with the formatting of these responses, while also
9- providing helper functions for the different supported responses.
8+ ` datastar-py `  has helpers for creating those responses, formatting the events,
9+ reading signals from the frontend, and generating the data-*  HTML attributes.
10+ 
11+ ## Event Generation Helpers  
1012
1113To use ` datastar-py ` , import the SSE generator in your app and then use
1214it in your route handler:
1315
1416``` python 
1517from  datastar_py import  ServerSentEventGenerator as  SSE 
1618
17- #  ... various app setup. The example below is for the Quart framework
19+ #  ... various app setup.
20+ #  The example below is for the Quart framework, and is only using the event generation helpers.
1821
1922@app.route (" /updates"  )
2023async  def  updates ():
@@ -32,7 +35,10 @@ async def updates():
3235    return  response
3336``` 
3437
35- There are also a number of custom responses/helpers for various frameworks. Currently the following frameworks are supported:
38+ ## Response Helpers  
39+ 
40+ There are also a number of custom responses/helpers for various frameworks.
41+ Currently, the following frameworks are supported:
3642
3743*  [ Django] ( https://www.djangoproject.com/ ) 
3844*  [ FastAPI] ( https://fastapi.tiangolo.com/ ) 
@@ -41,3 +47,41 @@ There are also a number of custom responses/helpers for various frameworks. Curr
4147*  [ Quart] ( https://quart.palletsprojects.com/en/stable/ ) 
4248*  [ Sanic] ( https://sanic.dev/en/ ) 
4349*  [ Starlette] ( https://www.starlette.io/ ) 
50+ 
51+ The response for the quart example above could be rewritten using the helpers:
52+ ``` python 
53+     return  await  make_datastar_response(time_updates())
54+ ``` 
55+ 
56+ ## Signal Helper  
57+ The current state of the datastar signals is included by default in every 
58+ datastar request. A helper is included to load those signals for each
59+ framework. ` read_signals ` 
60+ 
61+ ``` python 
62+ from  datastar_py.quart import  read_signals
63+ 
64+ @app.route (" /updates"  )
65+ async  def  updates ():
66+     signals =  await  read_signals()
67+ ``` 
68+ 
69+ ## Attribute Generation Helper  
70+ Datastar allows HTML generation to be done on the backend. datastar-py includes
71+ a helper to generate data-*  attributes in your HTML with IDE completion and
72+ type checking. It can be used with many different HTML generation libraries.
73+ 
74+ ``` python 
75+ from  datastar_py import  attribute_generator as  data
76+ 
77+ #  htpy
78+ button(data.on(" click"  , " console.log('clicked')"  ).debounce(1000 ).stop)[" My Button"  ]
79+ #  FastHTML
80+ Button(" My Button"  , ** data.on(" click"  , " console.log('clicked')"  ).debounce(1000 ).stop)
81+ #  After next release of FastHTML you don't have to unpack the datastar helpers e.g.
82+ Button(" My Button"  , data.on(" click"  , " console.log('clicked')"  ).debounce(1000 ).stop)
83+ #  f-strings
84+ f " <button  { data.on(" click"  , " console.log('clicked')"  ).debounce(1000 ).stop} >My Button</button> " 
85+ #  Jinja, but no editor completion :(
86+ < button {{data.on(" click"  , " console.log('clicked')"  ).debounce(1000 ).stop}}> My Button< / button> 
87+ ``` 
0 commit comments