@@ -285,7 +285,7 @@ def view_transition(self, expression: str) -> BaseAttr:
285
285
@property
286
286
def json_signals (self ) -> BaseAttr :
287
287
"""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 )
289
289
290
290
@property
291
291
def ignore_morph (self ) -> BaseAttr :
@@ -529,13 +529,16 @@ def trust(self) -> Self:
529
529
class PersistAttr (BaseAttr ):
530
530
_attr = "persist"
531
531
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 ))
539
542
return self
540
543
541
544
@property
@@ -550,12 +553,7 @@ class JsonSignalsAttr(BaseAttr):
550
553
551
554
def __call__ (self , include : str | None = None , exclude : str | None = None ) -> Self :
552
555
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 ))
559
557
return self
560
558
561
559
@property
@@ -694,13 +692,11 @@ class OnSignalPatchAttr(BaseAttr, TimingMod, DelayMod):
694
692
def filter (self , include : str | None = None , exclude : str | None = None ) -> Self :
695
693
"""Filter the signal patch events."""
696
694
if include or exclude :
697
- filter_object = {}
698
- if include :
699
- filter_object ["include" ] = include
700
- if exclude :
701
- filter_object ["exclude" ] = exclude
702
695
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
+ )
704
700
]
705
701
return self
706
702
@@ -714,12 +710,7 @@ class QueryStringAttr(BaseAttr):
714
710
715
711
def __call__ (self , include : str | None = None , exclude : str | None = None ) -> Self :
716
712
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 ))
723
714
return self
724
715
725
716
@property
@@ -738,6 +729,15 @@ def _escape(s: str) -> str:
738
729
)
739
730
740
731
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
+
741
741
def _js_object (obj : dict ) -> str :
742
742
"""Create a JS object where the values are expressions rather than strings."""
743
743
return (
0 commit comments