@@ -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:
529529class 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+
741741def _js_object (obj : dict ) -> str :
742742 """Create a JS object where the values are expressions rather than strings."""
743743 return (
0 commit comments