reflex 0.6.0__py3-none-any.whl → 0.6.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of reflex might be problematic. Click here for more details.
- reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +2 -2
- reflex/.templates/jinja/web/pages/_app.js.jinja2 +1 -1
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +2 -2
- reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +36 -0
- reflex/.templates/web/utils/state.js +1 -3
- reflex/__init__.py +2 -8
- reflex/__init__.pyi +1 -2
- reflex/app.py +2 -4
- reflex/app_module_for_backend.py +1 -1
- reflex/base.py +1 -1
- reflex/compiler/compiler.py +2 -2
- reflex/compiler/utils.py +3 -3
- reflex/components/base/app_wrap.py +2 -2
- reflex/components/base/app_wrap.pyi +27 -17
- reflex/components/base/bare.py +5 -4
- reflex/components/base/body.pyi +27 -17
- reflex/components/base/document.pyi +131 -81
- reflex/components/base/error_boundary.py +7 -6
- reflex/components/base/error_boundary.pyi +33 -20
- reflex/components/base/fragment.pyi +27 -17
- reflex/components/base/head.pyi +53 -33
- reflex/components/base/link.py +1 -1
- reflex/components/base/link.pyi +54 -33
- reflex/components/base/meta.pyi +105 -65
- reflex/components/base/script.py +2 -1
- reflex/components/base/script.pyi +38 -21
- reflex/components/component.py +47 -53
- reflex/components/core/banner.py +27 -23
- reflex/components/core/banner.pyi +171 -134
- reflex/components/core/client_side_routing.py +3 -2
- reflex/components/core/client_side_routing.pyi +54 -33
- reflex/components/core/clipboard.py +1 -2
- reflex/components/core/clipboard.pyi +33 -20
- reflex/components/core/cond.py +5 -5
- reflex/components/core/debounce.py +5 -5
- reflex/components/core/debounce.pyi +33 -20
- reflex/components/core/foreach.py +4 -3
- reflex/components/core/html.py +1 -1
- reflex/components/core/html.pyi +46 -35
- reflex/components/core/match.py +17 -17
- reflex/components/core/upload.py +23 -17
- reflex/components/core/upload.pyi +124 -78
- reflex/components/datadisplay/code.py +10 -9
- reflex/components/datadisplay/code.pyi +409 -299
- reflex/components/datadisplay/dataeditor.py +10 -8
- reflex/components/datadisplay/dataeditor.pyi +53 -40
- reflex/components/el/element.pyi +27 -17
- reflex/components/el/elements/base.py +1 -1
- reflex/components/el/elements/base.pyi +45 -34
- reflex/components/el/elements/forms.py +16 -16
- reflex/components/el/elements/forms.pyi +707 -554
- reflex/components/el/elements/inline.py +1 -1
- reflex/components/el/elements/inline.pyi +1218 -937
- reflex/components/el/elements/media.py +1 -1
- reflex/components/el/elements/media.pyi +997 -786
- reflex/components/el/elements/metadata.py +6 -3
- reflex/components/el/elements/metadata.pyi +242 -181
- reflex/components/el/elements/other.py +1 -1
- reflex/components/el/elements/other.pyi +306 -235
- reflex/components/el/elements/scripts.py +1 -1
- reflex/components/el/elements/scripts.pyi +140 -109
- reflex/components/el/elements/sectioning.py +2 -0
- reflex/components/el/elements/sectioning.pyi +647 -496
- reflex/components/el/elements/tables.py +1 -1
- reflex/components/el/elements/tables.pyi +452 -351
- reflex/components/el/elements/typography.py +1 -1
- reflex/components/el/elements/typography.pyi +657 -506
- reflex/components/gridjs/datatable.py +9 -6
- reflex/components/gridjs/datatable.pyi +56 -35
- reflex/components/lucide/icon.py +1 -1
- reflex/components/lucide/icon.pyi +54 -33
- reflex/components/markdown/markdown.py +31 -26
- reflex/components/markdown/markdown.pyi +37 -27
- reflex/components/moment/moment.py +12 -13
- reflex/components/moment/moment.pyi +35 -23
- reflex/components/next/base.pyi +27 -17
- reflex/components/next/image.py +1 -1
- reflex/components/next/image.pyi +37 -22
- reflex/components/next/link.py +1 -1
- reflex/components/next/link.pyi +28 -17
- reflex/components/next/video.py +1 -1
- reflex/components/next/video.pyi +28 -17
- reflex/components/plotly/plotly.py +13 -12
- reflex/components/plotly/plotly.pyi +54 -39
- reflex/components/props.py +1 -1
- reflex/components/radix/__init__.pyi +0 -1
- reflex/components/radix/primitives/__init__.pyi +0 -1
- reflex/components/radix/primitives/accordion.py +4 -4
- reflex/components/radix/primitives/accordion.pyi +495 -424
- reflex/components/radix/primitives/base.py +1 -1
- reflex/components/radix/primitives/base.pyi +54 -33
- reflex/components/radix/primitives/drawer.py +1 -1
- reflex/components/radix/primitives/drawer.pyi +273 -172
- reflex/components/radix/primitives/form.py +1 -1
- reflex/components/radix/primitives/form.pyi +364 -257
- reflex/components/radix/primitives/progress.py +1 -1
- reflex/components/radix/primitives/progress.pyi +282 -231
- reflex/components/radix/primitives/slider.py +1 -1
- reflex/components/radix/primitives/slider.pyi +138 -87
- reflex/components/radix/themes/base.py +24 -3
- reflex/components/radix/themes/base.pyi +250 -178
- reflex/components/radix/themes/color_mode.py +5 -5
- reflex/components/radix/themes/color_mode.pyi +220 -187
- reflex/components/radix/themes/components/alert_dialog.py +1 -1
- reflex/components/radix/themes/components/alert_dialog.pyi +207 -136
- reflex/components/radix/themes/components/aspect_ratio.py +1 -1
- reflex/components/radix/themes/components/aspect_ratio.pyi +28 -17
- reflex/components/radix/themes/components/avatar.py +1 -1
- reflex/components/radix/themes/components/avatar.pyi +81 -70
- reflex/components/radix/themes/components/badge.py +1 -1
- reflex/components/radix/themes/components/badge.pyi +99 -88
- reflex/components/radix/themes/components/button.py +1 -1
- reflex/components/radix/themes/components/button.pyi +109 -98
- reflex/components/radix/themes/components/callout.py +1 -1
- reflex/components/radix/themes/components/callout.pyi +373 -322
- reflex/components/radix/themes/components/card.py +1 -1
- reflex/components/radix/themes/components/card.pyi +49 -38
- reflex/components/radix/themes/components/checkbox.py +2 -1
- reflex/components/radix/themes/components/checkbox.pyi +245 -208
- reflex/components/radix/themes/components/checkbox_cards.py +1 -1
- reflex/components/radix/themes/components/checkbox_cards.pyi +115 -94
- reflex/components/radix/themes/components/checkbox_group.py +1 -1
- reflex/components/radix/themes/components/checkbox_group.pyi +107 -86
- reflex/components/radix/themes/components/context_menu.py +1 -1
- reflex/components/radix/themes/components/context_menu.pyi +319 -238
- reflex/components/radix/themes/components/data_list.py +1 -1
- reflex/components/radix/themes/components/data_list.pyi +171 -130
- reflex/components/radix/themes/components/dialog.py +1 -1
- reflex/components/radix/themes/components/dialog.pyi +210 -139
- reflex/components/radix/themes/components/dropdown_menu.py +1 -1
- reflex/components/radix/themes/components/dropdown_menu.pyi +332 -249
- reflex/components/radix/themes/components/hover_card.py +1 -1
- reflex/components/radix/themes/components/hover_card.pyi +131 -90
- reflex/components/radix/themes/components/icon_button.py +3 -2
- reflex/components/radix/themes/components/icon_button.pyi +109 -98
- reflex/components/radix/themes/components/inset.py +1 -1
- reflex/components/radix/themes/components/inset.pyi +58 -47
- reflex/components/radix/themes/components/popover.py +1 -1
- reflex/components/radix/themes/components/popover.pyi +136 -95
- reflex/components/radix/themes/components/progress.py +1 -1
- reflex/components/radix/themes/components/progress.pyi +82 -71
- reflex/components/radix/themes/components/radio.py +1 -1
- reflex/components/radix/themes/components/radio.pyi +80 -69
- reflex/components/radix/themes/components/radio_cards.py +1 -1
- reflex/components/radix/themes/components/radio_cards.pyi +119 -98
- reflex/components/radix/themes/components/radio_group.py +11 -8
- reflex/components/radix/themes/components/radio_group.pyi +271 -228
- reflex/components/radix/themes/components/scroll_area.py +1 -1
- reflex/components/radix/themes/components/scroll_area.pyi +32 -21
- reflex/components/radix/themes/components/segmented_control.py +1 -1
- reflex/components/radix/themes/components/segmented_control.pyi +113 -90
- reflex/components/radix/themes/components/select.py +3 -2
- reflex/components/radix/themes/components/select.pyi +471 -374
- reflex/components/radix/themes/components/separator.py +2 -1
- reflex/components/radix/themes/components/separator.pyi +80 -69
- reflex/components/radix/themes/components/skeleton.py +1 -1
- reflex/components/radix/themes/components/skeleton.pyi +34 -23
- reflex/components/radix/themes/components/slider.py +3 -2
- reflex/components/radix/themes/components/slider.pyi +88 -75
- reflex/components/radix/themes/components/spinner.py +1 -1
- reflex/components/radix/themes/components/spinner.pyi +30 -19
- reflex/components/radix/themes/components/switch.py +1 -1
- reflex/components/radix/themes/components/switch.pyi +84 -71
- reflex/components/radix/themes/components/table.py +1 -1
- reflex/components/radix/themes/components/table.pyi +332 -261
- reflex/components/radix/themes/components/tabs.py +1 -1
- reflex/components/radix/themes/components/tabs.pyi +194 -139
- reflex/components/radix/themes/components/text_area.py +1 -1
- reflex/components/radix/themes/components/text_area.pyi +111 -96
- reflex/components/radix/themes/components/text_field.py +1 -1
- reflex/components/radix/themes/components/text_field.pyi +286 -247
- reflex/components/radix/themes/components/tooltip.py +1 -1
- reflex/components/radix/themes/components/tooltip.pyi +37 -26
- reflex/components/radix/themes/layout/__init__.pyi +0 -1
- reflex/components/radix/themes/layout/base.py +1 -1
- reflex/components/radix/themes/layout/base.pyi +67 -56
- reflex/components/radix/themes/layout/box.pyi +45 -34
- reflex/components/radix/themes/layout/center.pyi +67 -56
- reflex/components/radix/themes/layout/container.py +2 -1
- reflex/components/radix/themes/layout/container.pyi +47 -36
- reflex/components/radix/themes/layout/flex.py +1 -1
- reflex/components/radix/themes/layout/flex.pyi +67 -56
- reflex/components/radix/themes/layout/grid.py +1 -1
- reflex/components/radix/themes/layout/grid.pyi +75 -64
- reflex/components/radix/themes/layout/list.py +6 -5
- reflex/components/radix/themes/layout/list.pyi +244 -193
- reflex/components/radix/themes/layout/section.py +2 -1
- reflex/components/radix/themes/layout/section.pyi +47 -36
- reflex/components/radix/themes/layout/spacer.pyi +67 -56
- reflex/components/radix/themes/layout/stack.py +1 -1
- reflex/components/radix/themes/layout/stack.pyi +159 -128
- reflex/components/radix/themes/typography/blockquote.py +1 -1
- reflex/components/radix/themes/typography/blockquote.pyi +100 -89
- reflex/components/radix/themes/typography/code.py +1 -1
- reflex/components/radix/themes/typography/code.pyi +101 -90
- reflex/components/radix/themes/typography/heading.py +1 -1
- reflex/components/radix/themes/typography/heading.pyi +107 -96
- reflex/components/radix/themes/typography/link.py +1 -1
- reflex/components/radix/themes/typography/link.pyi +113 -102
- reflex/components/radix/themes/typography/text.py +1 -1
- reflex/components/radix/themes/typography/text.pyi +572 -501
- reflex/components/react_player/audio.pyi +60 -33
- reflex/components/react_player/react_player.py +1 -1
- reflex/components/react_player/react_player.pyi +60 -33
- reflex/components/react_player/video.pyi +60 -33
- reflex/components/recharts/cartesian.py +3 -2
- reflex/components/recharts/cartesian.pyi +861 -678
- reflex/components/recharts/charts.py +5 -4
- reflex/components/recharts/charts.pyi +357 -252
- reflex/components/recharts/general.py +2 -1
- reflex/components/recharts/general.pyi +231 -180
- reflex/components/recharts/polar.py +5 -4
- reflex/components/recharts/polar.pyi +181 -144
- reflex/components/recharts/recharts.pyi +53 -33
- reflex/components/sonner/toast.py +17 -16
- reflex/components/sonner/toast.pyi +47 -36
- reflex/components/suneditor/editor.py +3 -2
- reflex/components/suneditor/editor.pyi +78 -55
- reflex/components/tags/cond_tag.py +4 -6
- reflex/components/tags/iter_tag.py +16 -28
- reflex/components/tags/match_tag.py +4 -6
- reflex/components/tags/tag.py +23 -40
- reflex/custom_components/custom_components.py +1 -3
- reflex/event.py +65 -113
- reflex/experimental/client_state.py +24 -25
- reflex/experimental/hooks.py +16 -16
- reflex/experimental/layout.py +5 -5
- reflex/experimental/layout.pyi +187 -136
- reflex/{vars → ivars}/__init__.py +2 -6
- reflex/{vars → ivars}/base.py +216 -599
- reflex/{vars → ivars}/function.py +19 -15
- reflex/{vars → ivars}/number.py +20 -41
- reflex/{vars → ivars}/object.py +30 -28
- reflex/{vars → ivars}/sequence.py +50 -53
- reflex/middleware/hydrate_middleware.py +0 -2
- reflex/middleware/middleware.py +3 -3
- reflex/state.py +82 -148
- reflex/style.py +22 -21
- reflex/utils/exceptions.py +0 -20
- reflex/utils/format.py +34 -54
- reflex/utils/imports.py +73 -16
- reflex/utils/prerequisites.py +15 -35
- reflex/utils/pyi_generator.py +8 -13
- reflex/utils/serializers.py +22 -12
- reflex/utils/telemetry.py +2 -3
- reflex/utils/types.py +5 -10
- reflex/vars.py +501 -0
- {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/METADATA +5 -4
- reflex-0.6.0a1.dist-info/RECORD +384 -0
- reflex-0.6.0.dist-info/RECORD +0 -382
- {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
- {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
- {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/entry_points.txt +0 -0
|
@@ -28,19 +28,22 @@ from reflex import constants
|
|
|
28
28
|
from reflex.constants.base import REFLEX_VAR_OPENING_TAG
|
|
29
29
|
from reflex.utils.exceptions import VarTypeError
|
|
30
30
|
from reflex.utils.types import GenericType, get_origin
|
|
31
|
+
from reflex.vars import (
|
|
32
|
+
Var,
|
|
33
|
+
VarData,
|
|
34
|
+
_global_vars,
|
|
35
|
+
get_unique_variable_name,
|
|
36
|
+
)
|
|
31
37
|
|
|
32
38
|
from .base import (
|
|
33
39
|
CachedVarOperation,
|
|
34
40
|
CustomVarOperationReturn,
|
|
41
|
+
ImmutableVar,
|
|
35
42
|
LiteralNoneVar,
|
|
36
43
|
LiteralVar,
|
|
37
44
|
ToOperation,
|
|
38
|
-
Var,
|
|
39
|
-
VarData,
|
|
40
|
-
_global_vars,
|
|
41
45
|
cached_property_no_lock,
|
|
42
46
|
figure_out_type,
|
|
43
|
-
get_unique_variable_name,
|
|
44
47
|
unionize,
|
|
45
48
|
var_operation,
|
|
46
49
|
var_operation_return,
|
|
@@ -56,7 +59,7 @@ if TYPE_CHECKING:
|
|
|
56
59
|
from .object import ObjectVar
|
|
57
60
|
|
|
58
61
|
|
|
59
|
-
class StringVar(
|
|
62
|
+
class StringVar(ImmutableVar[str]):
|
|
60
63
|
"""Base class for immutable string vars."""
|
|
61
64
|
|
|
62
65
|
@overload
|
|
@@ -194,6 +197,14 @@ class StringVar(Var[str]):
|
|
|
194
197
|
"""
|
|
195
198
|
return string_strip_operation(self)
|
|
196
199
|
|
|
200
|
+
def bool(self):
|
|
201
|
+
"""Boolean conversion.
|
|
202
|
+
|
|
203
|
+
Returns:
|
|
204
|
+
The boolean value of the string.
|
|
205
|
+
"""
|
|
206
|
+
return self.length() != 0
|
|
207
|
+
|
|
197
208
|
def reversed(self) -> StringVar:
|
|
198
209
|
"""Reverse the string.
|
|
199
210
|
|
|
@@ -545,21 +556,19 @@ class LiteralStringVar(LiteralVar, StringVar):
|
|
|
545
556
|
def create(
|
|
546
557
|
cls,
|
|
547
558
|
value: str,
|
|
548
|
-
_var_type: GenericType | None = str,
|
|
549
559
|
_var_data: VarData | None = None,
|
|
550
560
|
) -> StringVar:
|
|
551
561
|
"""Create a var from a string value.
|
|
552
562
|
|
|
553
563
|
Args:
|
|
554
564
|
value: The value to create the var from.
|
|
555
|
-
_var_type: The type of the var.
|
|
556
565
|
_var_data: Additional hooks and imports associated with the Var.
|
|
557
566
|
|
|
558
567
|
Returns:
|
|
559
568
|
The var.
|
|
560
569
|
"""
|
|
561
570
|
if REFLEX_VAR_OPENING_TAG in value:
|
|
562
|
-
strings_and_vals: list[
|
|
571
|
+
strings_and_vals: list[ImmutableVar | str] = []
|
|
563
572
|
offset = 0
|
|
564
573
|
|
|
565
574
|
# Find all tags
|
|
@@ -576,36 +585,27 @@ class LiteralStringVar(LiteralVar, StringVar):
|
|
|
576
585
|
# This is a global immutable var.
|
|
577
586
|
var = _global_vars[int(serialized_data)]
|
|
578
587
|
strings_and_vals.append(var)
|
|
579
|
-
value = value[(end + len(var.
|
|
588
|
+
value = value[(end + len(var._var_name)) :]
|
|
580
589
|
|
|
581
590
|
offset += end - start
|
|
582
591
|
|
|
583
592
|
strings_and_vals.append(value)
|
|
584
593
|
|
|
585
594
|
filtered_strings_and_vals = [
|
|
586
|
-
s for s in strings_and_vals if isinstance(s,
|
|
595
|
+
s for s in strings_and_vals if isinstance(s, ImmutableVar) or s
|
|
587
596
|
]
|
|
597
|
+
|
|
588
598
|
if len(filtered_strings_and_vals) == 1:
|
|
589
|
-
|
|
590
|
-
if isinstance(only_string, str):
|
|
591
|
-
return LiteralVar.create(only_string).to(StringVar, _var_type)
|
|
592
|
-
else:
|
|
593
|
-
return only_string.to(StringVar, only_string._var_type)
|
|
599
|
+
return LiteralVar.create(filtered_strings_and_vals[0]).to(StringVar)
|
|
594
600
|
|
|
595
|
-
|
|
601
|
+
return ConcatVarOperation.create(
|
|
596
602
|
*filtered_strings_and_vals,
|
|
597
603
|
_var_data=_var_data,
|
|
598
604
|
)
|
|
599
605
|
|
|
600
|
-
return (
|
|
601
|
-
concat_result
|
|
602
|
-
if _var_type is str
|
|
603
|
-
else concat_result.to(StringVar, _var_type)
|
|
604
|
-
)
|
|
605
|
-
|
|
606
606
|
return LiteralStringVar(
|
|
607
|
-
|
|
608
|
-
_var_type=
|
|
607
|
+
_var_name=json.dumps(value),
|
|
608
|
+
_var_type=str,
|
|
609
609
|
_var_data=_var_data,
|
|
610
610
|
_var_value=value,
|
|
611
611
|
)
|
|
@@ -635,7 +635,7 @@ class LiteralStringVar(LiteralVar, StringVar):
|
|
|
635
635
|
class ConcatVarOperation(CachedVarOperation, StringVar):
|
|
636
636
|
"""Representing a concatenation of literal string vars."""
|
|
637
637
|
|
|
638
|
-
_var_value: Tuple[
|
|
638
|
+
_var_value: Tuple[ImmutableVar, ...] = dataclasses.field(default_factory=tuple)
|
|
639
639
|
|
|
640
640
|
@cached_property_no_lock
|
|
641
641
|
def _cached_var_name(self) -> str:
|
|
@@ -644,7 +644,7 @@ class ConcatVarOperation(CachedVarOperation, StringVar):
|
|
|
644
644
|
Returns:
|
|
645
645
|
The name of the var.
|
|
646
646
|
"""
|
|
647
|
-
list_of_strs: List[Union[str,
|
|
647
|
+
list_of_strs: List[Union[str, ImmutableVar]] = []
|
|
648
648
|
last_string = ""
|
|
649
649
|
for var in self._var_value:
|
|
650
650
|
if isinstance(var, LiteralStringVar):
|
|
@@ -659,7 +659,9 @@ class ConcatVarOperation(CachedVarOperation, StringVar):
|
|
|
659
659
|
list_of_strs.append(last_string)
|
|
660
660
|
|
|
661
661
|
list_of_strs_filtered = [
|
|
662
|
-
str(LiteralVar.create(s))
|
|
662
|
+
str(LiteralVar.create(s))
|
|
663
|
+
for s in list_of_strs
|
|
664
|
+
if isinstance(s, ImmutableVar) or s
|
|
663
665
|
]
|
|
664
666
|
|
|
665
667
|
if len(list_of_strs_filtered) == 1:
|
|
@@ -678,7 +680,7 @@ class ConcatVarOperation(CachedVarOperation, StringVar):
|
|
|
678
680
|
*[
|
|
679
681
|
var._get_all_var_data()
|
|
680
682
|
for var in self._var_value
|
|
681
|
-
if isinstance(var,
|
|
683
|
+
if isinstance(var, ImmutableVar)
|
|
682
684
|
],
|
|
683
685
|
self._var_data,
|
|
684
686
|
)
|
|
@@ -699,7 +701,7 @@ class ConcatVarOperation(CachedVarOperation, StringVar):
|
|
|
699
701
|
The var.
|
|
700
702
|
"""
|
|
701
703
|
return cls(
|
|
702
|
-
|
|
704
|
+
_var_name="",
|
|
703
705
|
_var_type=str,
|
|
704
706
|
_var_data=_var_data,
|
|
705
707
|
_var_value=tuple(map(LiteralVar.create, value)),
|
|
@@ -716,7 +718,7 @@ KEY_TYPE = TypeVar("KEY_TYPE")
|
|
|
716
718
|
VALUE_TYPE = TypeVar("VALUE_TYPE")
|
|
717
719
|
|
|
718
720
|
|
|
719
|
-
class ArrayVar(
|
|
721
|
+
class ArrayVar(ImmutableVar[ARRAY_VAR_TYPE]):
|
|
720
722
|
"""Base class for immutable array vars."""
|
|
721
723
|
|
|
722
724
|
@overload
|
|
@@ -854,9 +856,9 @@ class ArrayVar(Var[ARRAY_VAR_TYPE]):
|
|
|
854
856
|
) -> ObjectVar[Dict[KEY_TYPE, VALUE_TYPE]]: ...
|
|
855
857
|
|
|
856
858
|
@overload
|
|
857
|
-
def __getitem__(self, i: int | NumberVar) ->
|
|
859
|
+
def __getitem__(self, i: int | NumberVar) -> ImmutableVar: ...
|
|
858
860
|
|
|
859
|
-
def __getitem__(self, i: Any) -> ArrayVar[ARRAY_VAR_TYPE] |
|
|
861
|
+
def __getitem__(self, i: Any) -> ArrayVar[ARRAY_VAR_TYPE] | ImmutableVar:
|
|
860
862
|
"""Get a slice of the array.
|
|
861
863
|
|
|
862
864
|
Args:
|
|
@@ -895,15 +897,6 @@ class ArrayVar(Var[ARRAY_VAR_TYPE]):
|
|
|
895
897
|
/,
|
|
896
898
|
) -> ArrayVar[List[int]]: ...
|
|
897
899
|
|
|
898
|
-
@overload
|
|
899
|
-
@classmethod
|
|
900
|
-
def range(
|
|
901
|
-
cls,
|
|
902
|
-
first_endpoint: int | NumberVar,
|
|
903
|
-
second_endpoint: int | NumberVar | None = None,
|
|
904
|
-
step: int | NumberVar | None = None,
|
|
905
|
-
) -> ArrayVar[List[int]]: ...
|
|
906
|
-
|
|
907
900
|
@classmethod
|
|
908
901
|
def range(
|
|
909
902
|
cls,
|
|
@@ -1103,15 +1096,15 @@ class ArrayVar(Var[ARRAY_VAR_TYPE]):
|
|
|
1103
1096
|
function_var = ArgsFunctionOperation.create(tuple(), return_value)
|
|
1104
1097
|
else:
|
|
1105
1098
|
# generic number var
|
|
1106
|
-
number_var =
|
|
1099
|
+
number_var = ImmutableVar("").to(NumberVar)
|
|
1107
1100
|
|
|
1108
1101
|
first_arg_type = self[number_var]._var_type
|
|
1109
1102
|
|
|
1110
1103
|
arg_name = get_unique_variable_name()
|
|
1111
1104
|
|
|
1112
1105
|
# get first argument type
|
|
1113
|
-
first_arg =
|
|
1114
|
-
|
|
1106
|
+
first_arg = ImmutableVar(
|
|
1107
|
+
_var_name=arg_name,
|
|
1115
1108
|
_var_type=first_arg_type,
|
|
1116
1109
|
).guess_type()
|
|
1117
1110
|
|
|
@@ -1138,9 +1131,9 @@ class LiteralArrayVar(CachedVarOperation, LiteralVar, ArrayVar[ARRAY_VAR_TYPE]):
|
|
|
1138
1131
|
"""Base class for immutable literal array vars."""
|
|
1139
1132
|
|
|
1140
1133
|
_var_value: Union[
|
|
1141
|
-
List[Union[
|
|
1142
|
-
Set[Union[
|
|
1143
|
-
Tuple[Union[
|
|
1134
|
+
List[Union[ImmutableVar, Any]],
|
|
1135
|
+
Set[Union[ImmutableVar, Any]],
|
|
1136
|
+
Tuple[Union[ImmutableVar, Any], ...],
|
|
1144
1137
|
] = dataclasses.field(default_factory=list)
|
|
1145
1138
|
|
|
1146
1139
|
@cached_property_no_lock
|
|
@@ -1179,7 +1172,7 @@ class LiteralArrayVar(CachedVarOperation, LiteralVar, ArrayVar[ARRAY_VAR_TYPE]):
|
|
|
1179
1172
|
Returns:
|
|
1180
1173
|
The hash of the var.
|
|
1181
1174
|
"""
|
|
1182
|
-
return hash((self.__class__.__name__, self.
|
|
1175
|
+
return hash((self.__class__.__name__, self._var_name))
|
|
1183
1176
|
|
|
1184
1177
|
def json(self) -> str:
|
|
1185
1178
|
"""Get the JSON representation of the var.
|
|
@@ -1212,7 +1205,7 @@ class LiteralArrayVar(CachedVarOperation, LiteralVar, ArrayVar[ARRAY_VAR_TYPE]):
|
|
|
1212
1205
|
The var.
|
|
1213
1206
|
"""
|
|
1214
1207
|
return cls(
|
|
1215
|
-
|
|
1208
|
+
_var_name="",
|
|
1216
1209
|
_var_type=figure_out_type(value) if _var_type is None else _var_type,
|
|
1217
1210
|
_var_data=_var_data,
|
|
1218
1211
|
_var_value=value,
|
|
@@ -1263,14 +1256,18 @@ class ArraySliceOperation(CachedVarOperation, ArrayVar):
|
|
|
1263
1256
|
start, end, step = self._start, self._stop, self._step
|
|
1264
1257
|
|
|
1265
1258
|
normalized_start = (
|
|
1266
|
-
LiteralVar.create(start)
|
|
1259
|
+
LiteralVar.create(start)
|
|
1260
|
+
if start is not None
|
|
1261
|
+
else ImmutableVar.create_safe("undefined")
|
|
1267
1262
|
)
|
|
1268
1263
|
normalized_end = (
|
|
1269
|
-
LiteralVar.create(end)
|
|
1264
|
+
LiteralVar.create(end)
|
|
1265
|
+
if end is not None
|
|
1266
|
+
else ImmutableVar.create_safe("undefined")
|
|
1270
1267
|
)
|
|
1271
1268
|
if step is None:
|
|
1272
1269
|
return f"{str(self._array)}.slice({str(normalized_start)}, {str(normalized_end)})"
|
|
1273
|
-
if not isinstance(step,
|
|
1270
|
+
if not isinstance(step, ImmutableVar):
|
|
1274
1271
|
if step < 0:
|
|
1275
1272
|
actual_start = end + 1 if end is not None else 0
|
|
1276
1273
|
actual_end = start + 1 if start is not None else self._array.length()
|
|
@@ -1302,7 +1299,7 @@ class ArraySliceOperation(CachedVarOperation, ArrayVar):
|
|
|
1302
1299
|
The var.
|
|
1303
1300
|
"""
|
|
1304
1301
|
return cls(
|
|
1305
|
-
|
|
1302
|
+
_var_name="",
|
|
1306
1303
|
_var_type=array._var_type,
|
|
1307
1304
|
_var_data=_var_data,
|
|
1308
1305
|
_array=array,
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import dataclasses
|
|
6
5
|
from typing import TYPE_CHECKING, Optional
|
|
7
6
|
|
|
8
7
|
from reflex import constants
|
|
@@ -15,7 +14,6 @@ if TYPE_CHECKING:
|
|
|
15
14
|
from reflex.app import App
|
|
16
15
|
|
|
17
16
|
|
|
18
|
-
@dataclasses.dataclass(init=True)
|
|
19
17
|
class HydrateMiddleware(Middleware):
|
|
20
18
|
"""Middleware to handle initial app hydration."""
|
|
21
19
|
|
reflex/middleware/middleware.py
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from abc import ABC
|
|
5
|
+
from abc import ABC
|
|
6
6
|
from typing import TYPE_CHECKING, Optional
|
|
7
7
|
|
|
8
|
+
from reflex.base import Base
|
|
8
9
|
from reflex.event import Event
|
|
9
10
|
from reflex.state import BaseState, StateUpdate
|
|
10
11
|
|
|
@@ -12,10 +13,9 @@ if TYPE_CHECKING:
|
|
|
12
13
|
from reflex.app import App
|
|
13
14
|
|
|
14
15
|
|
|
15
|
-
class Middleware(ABC):
|
|
16
|
+
class Middleware(Base, ABC):
|
|
16
17
|
"""Middleware to preprocess and postprocess requests."""
|
|
17
18
|
|
|
18
|
-
@abstractmethod
|
|
19
19
|
async def preprocess(
|
|
20
20
|
self, app: App, state: BaseState, event: Event
|
|
21
21
|
) -> Optional[StateUpdate]:
|