Skip to content

Commit 523284b

Browse files
authored
Update data-persist for latest RC (#19)
Fix data-json-signals to allow filtering
1 parent 8a95815 commit 523284b

File tree

1 file changed

+26
-26
lines changed

1 file changed

+26
-26
lines changed

src/datastar_py/attributes.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ def view_transition(self, expression: str) -> BaseAttr:
285285
@property
286286
def json_signals(self) -> BaseAttr:
287287
"""Create a signal that contains the JSON representation of the signals."""
288-
return BaseAttr("json-signals", alias=self._alias)
288+
return JsonSignalsAttr(alias=self._alias)
289289

290290
@property
291291
def ignore_morph(self) -> BaseAttr:
@@ -529,13 +529,16 @@ def trust(self) -> Self:
529529
class PersistAttr(BaseAttr):
530530
_attr = "persist"
531531

532-
def __call__(self, signal_names: str | Iterable[str] | None = None) -> Self:
533-
if not signal_names:
534-
return self
535-
if isinstance(signal_names, str):
536-
self._value = signal_names
537-
else:
538-
self._value = " ".join(signal_names)
532+
def __call__(
533+
self,
534+
storage_key: str | None = None,
535+
include: str | None = None,
536+
exclude: str | None = None,
537+
) -> Self:
538+
if storage_key:
539+
self._key = storage_key
540+
if include or exclude:
541+
self._value = json.dumps(_filter_dict(include=include, exclude=exclude))
539542
return self
540543

541544
@property
@@ -550,12 +553,7 @@ class JsonSignalsAttr(BaseAttr):
550553

551554
def __call__(self, include: str | None = None, exclude: str | None = None) -> Self:
552555
if include or exclude:
553-
filter_object = {}
554-
if include:
555-
filter_object["include"] = include
556-
if exclude:
557-
filter_object["exclude"] = exclude
558-
self._value = json.dumps(filter_object)
556+
self._value = json.dumps(_filter_dict(include=include, exclude=exclude))
559557
return self
560558

561559
@property
@@ -694,13 +692,11 @@ class OnSignalPatchAttr(BaseAttr, TimingMod, DelayMod):
694692
def filter(self, include: str | None = None, exclude: str | None = None) -> Self:
695693
"""Filter the signal patch events."""
696694
if include or exclude:
697-
filter_object = {}
698-
if include:
699-
filter_object["include"] = include
700-
if exclude:
701-
filter_object["exclude"] = exclude
702695
self._other_attrs = [
703-
BaseAttr("on-signal-patch-filter", value=json.dumps(filter_object))
696+
BaseAttr(
697+
"on-signal-patch-filter",
698+
value=json.dumps(_filter_dict(include=include, exclude=exclude)),
699+
)
704700
]
705701
return self
706702

@@ -714,12 +710,7 @@ class QueryStringAttr(BaseAttr):
714710

715711
def __call__(self, include: str | None = None, exclude: str | None = None) -> Self:
716712
if include or exclude:
717-
filter_object = {}
718-
if include:
719-
filter_object["include"] = include
720-
if exclude:
721-
filter_object["exclude"] = exclude
722-
self._value = json.dumps(filter_object)
713+
self._value = json.dumps(_filter_dict(include=include, exclude=exclude))
723714
return self
724715

725716
@property
@@ -738,6 +729,15 @@ def _escape(s: str) -> str:
738729
)
739730

740731

732+
def _filter_dict(include: str | None = None, exclude: str | None = None) -> dict:
733+
filter_dict = {}
734+
if include:
735+
filter_dict["include"] = include
736+
if exclude:
737+
filter_dict["exclude"] = exclude
738+
return filter_dict
739+
740+
741741
def _js_object(obj: dict) -> str:
742742
"""Create a JS object where the values are expressions rather than strings."""
743743
return (

0 commit comments

Comments
 (0)