reflex 0.5.10a3__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/web/pages/utils.js.jinja2 +4 -4
- reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
- reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
- reflex/__init__.py +3 -2
- reflex/__init__.pyi +2 -2
- reflex/app.py +43 -9
- reflex/base.py +3 -2
- reflex/compiler/compiler.py +6 -6
- reflex/compiler/utils.py +5 -3
- reflex/components/base/app_wrap.py +2 -4
- reflex/components/base/app_wrap.pyi +17 -17
- reflex/components/base/bare.py +7 -4
- reflex/components/base/body.pyi +17 -17
- reflex/components/base/document.pyi +81 -81
- reflex/components/base/error_boundary.py +10 -8
- reflex/components/base/error_boundary.pyi +20 -19
- reflex/components/base/fragment.pyi +17 -17
- reflex/components/base/head.pyi +33 -33
- reflex/components/base/link.pyi +34 -33
- reflex/components/base/meta.pyi +65 -65
- reflex/components/base/script.py +2 -1
- reflex/components/base/script.pyi +21 -20
- reflex/components/component.py +116 -145
- reflex/components/core/banner.py +59 -60
- reflex/components/core/banner.pyi +86 -150
- reflex/components/core/client_side_routing.py +2 -1
- reflex/components/core/client_side_routing.pyi +34 -33
- reflex/components/core/clipboard.py +2 -2
- reflex/components/core/clipboard.pyi +19 -18
- reflex/components/core/cond.py +21 -44
- reflex/components/core/debounce.py +6 -8
- reflex/components/core/debounce.pyi +19 -18
- reflex/components/core/foreach.py +5 -14
- reflex/components/core/html.pyi +18 -17
- reflex/components/core/match.py +36 -43
- reflex/components/core/upload.py +32 -25
- reflex/components/core/upload.pyi +84 -73
- reflex/components/datadisplay/code.py +55 -28
- reflex/components/datadisplay/code.pyi +20 -17
- reflex/components/datadisplay/dataeditor.py +17 -11
- reflex/components/datadisplay/dataeditor.pyi +34 -33
- reflex/components/el/__init__.py +0 -1
- reflex/components/el/__init__.pyi +0 -11
- reflex/components/el/element.pyi +17 -17
- reflex/components/el/elements/__init__.py +1 -7
- reflex/components/el/elements/__init__.pyi +1 -15
- reflex/components/el/elements/base.pyi +18 -17
- reflex/components/el/elements/forms.py +24 -31
- reflex/components/el/elements/forms.pyi +237 -236
- reflex/components/el/elements/inline.pyi +450 -449
- reflex/components/el/elements/media.py +0 -21
- reflex/components/el/elements/media.pyi +338 -337
- reflex/components/el/elements/metadata.py +3 -2
- reflex/components/el/elements/metadata.pyi +98 -97
- reflex/components/el/elements/other.pyi +114 -113
- reflex/components/el/elements/scripts.pyi +50 -49
- reflex/components/el/elements/sectioning.pyi +242 -241
- reflex/components/el/elements/tables.pyi +162 -161
- reflex/components/el/elements/typography.pyi +242 -241
- reflex/components/gridjs/datatable.py +13 -14
- reflex/components/gridjs/datatable.pyi +34 -33
- reflex/components/lucide/icon.py +2 -126
- reflex/components/lucide/icon.pyi +34 -142
- reflex/components/markdown/markdown.py +30 -35
- reflex/components/markdown/markdown.pyi +29 -32
- reflex/components/moment/moment.pyi +19 -18
- reflex/components/next/base.pyi +17 -17
- reflex/components/next/image.py +0 -4
- reflex/components/next/image.pyi +20 -19
- reflex/components/next/link.pyi +18 -17
- reflex/components/next/video.pyi +18 -17
- reflex/components/plotly/plotly.py +16 -28
- reflex/components/plotly/plotly.pyi +36 -35
- reflex/components/props.py +21 -10
- reflex/components/radix/__init__.pyi +1 -1
- reflex/components/radix/primitives/__init__.pyi +0 -1
- reflex/components/radix/primitives/accordion.py +7 -8
- reflex/components/radix/primitives/accordion.pyi +117 -116
- reflex/components/radix/primitives/base.pyi +34 -33
- reflex/components/radix/primitives/drawer.pyi +169 -168
- reflex/components/radix/primitives/form.pyi +168 -167
- reflex/components/radix/primitives/progress.pyi +82 -81
- reflex/components/radix/primitives/slider.pyi +84 -83
- reflex/components/radix/themes/base.py +8 -4
- reflex/components/radix/themes/base.pyi +114 -113
- reflex/components/radix/themes/color_mode.py +12 -21
- reflex/components/radix/themes/color_mode.pyi +67 -67
- reflex/components/radix/themes/components/__init__.pyi +1 -0
- reflex/components/radix/themes/components/alert_dialog.pyi +118 -117
- reflex/components/radix/themes/components/aspect_ratio.pyi +18 -17
- reflex/components/radix/themes/components/avatar.pyi +18 -17
- reflex/components/radix/themes/components/badge.pyi +18 -17
- reflex/components/radix/themes/components/button.pyi +18 -17
- reflex/components/radix/themes/components/callout.pyi +82 -81
- reflex/components/radix/themes/components/card.pyi +18 -17
- reflex/components/radix/themes/components/checkbox.py +2 -3
- reflex/components/radix/themes/components/checkbox.pyi +53 -52
- reflex/components/radix/themes/components/checkbox_cards.pyi +34 -33
- reflex/components/radix/themes/components/checkbox_group.pyi +34 -33
- reflex/components/radix/themes/components/context_menu.pyi +140 -139
- reflex/components/radix/themes/components/data_list.py +5 -0
- reflex/components/radix/themes/components/data_list.pyi +71 -65
- reflex/components/radix/themes/components/dialog.pyi +121 -120
- reflex/components/radix/themes/components/dropdown_menu.pyi +142 -141
- reflex/components/radix/themes/components/hover_card.pyi +68 -67
- reflex/components/radix/themes/components/icon_button.py +2 -1
- reflex/components/radix/themes/components/icon_button.pyi +18 -17
- reflex/components/radix/themes/components/inset.pyi +18 -17
- reflex/components/radix/themes/components/popover.pyi +73 -72
- reflex/components/radix/themes/components/progress.pyi +18 -17
- reflex/components/radix/themes/components/radio.pyi +18 -17
- reflex/components/radix/themes/components/radio_cards.pyi +35 -34
- reflex/components/radix/themes/components/radio_group.py +35 -31
- reflex/components/radix/themes/components/radio_group.pyi +73 -66
- reflex/components/radix/themes/components/scroll_area.pyi +18 -17
- reflex/components/radix/themes/components/segmented_control.pyi +35 -34
- reflex/components/radix/themes/components/select.py +2 -1
- reflex/components/radix/themes/components/select.pyi +155 -154
- reflex/components/radix/themes/components/separator.py +2 -3
- reflex/components/radix/themes/components/separator.pyi +18 -17
- reflex/components/radix/themes/components/skeleton.pyi +18 -17
- reflex/components/radix/themes/components/slider.py +2 -1
- reflex/components/radix/themes/components/slider.pyi +20 -19
- reflex/components/radix/themes/components/spinner.pyi +18 -17
- reflex/components/radix/themes/components/switch.pyi +19 -18
- reflex/components/radix/themes/components/table.pyi +114 -113
- reflex/components/radix/themes/components/tabs.pyi +84 -83
- reflex/components/radix/themes/components/text_area.pyi +21 -20
- reflex/components/radix/themes/components/text_field.py +0 -79
- reflex/components/radix/themes/components/text_field.pyi +57 -63
- reflex/components/radix/themes/components/tooltip.pyi +21 -20
- reflex/components/radix/themes/layout/base.pyi +18 -17
- reflex/components/radix/themes/layout/box.pyi +18 -17
- reflex/components/radix/themes/layout/center.pyi +18 -17
- reflex/components/radix/themes/layout/container.py +2 -3
- reflex/components/radix/themes/layout/container.pyi +18 -17
- reflex/components/radix/themes/layout/flex.pyi +18 -17
- reflex/components/radix/themes/layout/grid.pyi +18 -17
- reflex/components/radix/themes/layout/list.py +5 -4
- reflex/components/radix/themes/layout/list.pyi +86 -85
- reflex/components/radix/themes/layout/section.py +2 -3
- reflex/components/radix/themes/layout/section.pyi +18 -17
- reflex/components/radix/themes/layout/spacer.pyi +18 -17
- reflex/components/radix/themes/layout/stack.pyi +50 -49
- reflex/components/radix/themes/typography/blockquote.pyi +18 -17
- reflex/components/radix/themes/typography/code.pyi +18 -17
- reflex/components/radix/themes/typography/heading.pyi +18 -17
- reflex/components/radix/themes/typography/link.pyi +18 -17
- reflex/components/radix/themes/typography/text.pyi +114 -113
- reflex/components/react_player/audio.pyi +34 -33
- reflex/components/react_player/react_player.pyi +34 -33
- reflex/components/react_player/video.pyi +34 -33
- reflex/components/recharts/cartesian.py +23 -19
- reflex/components/recharts/cartesian.pyi +297 -296
- reflex/components/recharts/charts.py +6 -5
- reflex/components/recharts/charts.pyi +179 -178
- reflex/components/recharts/general.py +8 -7
- reflex/components/recharts/general.pyi +82 -81
- reflex/components/recharts/polar.py +14 -13
- reflex/components/recharts/polar.pyi +76 -75
- reflex/components/recharts/recharts.pyi +33 -33
- reflex/components/sonner/toast.py +30 -33
- reflex/components/sonner/toast.pyi +27 -25
- reflex/components/suneditor/editor.py +2 -1
- reflex/components/suneditor/editor.pyi +27 -26
- reflex/components/tags/iter_tag.py +16 -16
- reflex/components/tags/tag.py +8 -10
- reflex/constants/base.py +3 -1
- reflex/constants/event.py +1 -0
- reflex/event.py +89 -79
- reflex/experimental/__init__.py +25 -6
- reflex/experimental/client_state.py +34 -58
- reflex/experimental/hooks.py +13 -18
- reflex/experimental/layout.py +5 -5
- reflex/experimental/layout.pyi +84 -83
- reflex/{experimental/vars → ivars}/__init__.py +0 -1
- reflex/ivars/base.py +2180 -0
- reflex/ivars/function.py +200 -0
- reflex/ivars/number.py +1137 -0
- reflex/ivars/object.py +564 -0
- reflex/ivars/sequence.py +1601 -0
- reflex/model.py +22 -0
- reflex/reflex.py +4 -0
- reflex/state.py +388 -73
- reflex/style.py +52 -34
- reflex/testing.py +8 -3
- reflex/utils/exceptions.py +12 -0
- reflex/utils/exec.py +0 -14
- reflex/utils/format.py +74 -223
- reflex/utils/net.py +43 -0
- reflex/utils/path_ops.py +13 -1
- reflex/utils/prerequisites.py +46 -26
- reflex/utils/pyi_generator.py +5 -4
- reflex/utils/serializers.py +13 -31
- reflex/utils/types.py +44 -9
- reflex/vars.py +127 -2230
- {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/METADATA +4 -6
- reflex-0.6.0a1.dist-info/RECORD +384 -0
- reflex/.templates/apps/demo/.gitignore +0 -4
- reflex/.templates/apps/demo/assets/favicon.ico +0 -0
- reflex/.templates/apps/demo/assets/github.svg +0 -10
- reflex/.templates/apps/demo/assets/icon.svg +0 -37
- reflex/.templates/apps/demo/assets/logo.svg +0 -68
- reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
- reflex/.templates/apps/demo/code/__init__.py +0 -1
- reflex/.templates/apps/demo/code/demo.py +0 -127
- reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
- reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
- reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
- reflex/.templates/apps/demo/code/pages/forms.py +0 -257
- reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
- reflex/.templates/apps/demo/code/pages/home.py +0 -56
- reflex/.templates/apps/demo/code/sidebar.py +0 -178
- reflex/.templates/apps/demo/code/state.py +0 -22
- reflex/.templates/apps/demo/code/states/form_state.py +0 -40
- reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
- reflex/.templates/apps/demo/code/styles.py +0 -68
- reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
- reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
- reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
- reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
- reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
- reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
- reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
- reflex/.templates/apps/demo/code/webui/state.py +0 -146
- reflex/.templates/apps/demo/code/webui/styles.py +0 -88
- reflex/experimental/vars/base.py +0 -583
- reflex/experimental/vars/function.py +0 -290
- reflex/experimental/vars/number.py +0 -1458
- reflex/experimental/vars/object.py +0 -804
- reflex/experimental/vars/sequence.py +0 -1764
- reflex/utils/watch.py +0 -96
- reflex/vars.pyi +0 -218
- reflex-0.5.10a3.dist-info/RECORD +0 -413
- {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
- {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
- {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/entry_points.txt +0 -0
reflex/ivars/function.py
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"""Immutable function vars."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import dataclasses
|
|
6
|
+
import sys
|
|
7
|
+
from typing import Any, Callable, ClassVar, Optional, Tuple, Type, Union
|
|
8
|
+
|
|
9
|
+
from reflex.utils.types import GenericType
|
|
10
|
+
from reflex.vars import VarData
|
|
11
|
+
|
|
12
|
+
from .base import (
|
|
13
|
+
CachedVarOperation,
|
|
14
|
+
ImmutableVar,
|
|
15
|
+
LiteralVar,
|
|
16
|
+
ToOperation,
|
|
17
|
+
cached_property_no_lock,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class FunctionVar(ImmutableVar[Callable]):
|
|
22
|
+
"""Base class for immutable function vars."""
|
|
23
|
+
|
|
24
|
+
def __call__(self, *args: ImmutableVar | Any) -> ArgsFunctionOperation:
|
|
25
|
+
"""Call the function with the given arguments.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
*args: The arguments to call the function with.
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
The function call operation.
|
|
32
|
+
"""
|
|
33
|
+
return ArgsFunctionOperation.create(
|
|
34
|
+
("...args",),
|
|
35
|
+
VarOperationCall.create(self, *args, ImmutableVar.create_safe("...args")),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
def call(self, *args: ImmutableVar | Any) -> VarOperationCall:
|
|
39
|
+
"""Call the function with the given arguments.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
*args: The arguments to call the function with.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
The function call operation.
|
|
46
|
+
"""
|
|
47
|
+
return VarOperationCall.create(self, *args)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class FunctionStringVar(FunctionVar):
|
|
51
|
+
"""Base class for immutable function vars from a string."""
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def create(
|
|
55
|
+
cls,
|
|
56
|
+
func: str,
|
|
57
|
+
_var_type: Type[Callable] = Callable,
|
|
58
|
+
_var_data: VarData | None = None,
|
|
59
|
+
) -> FunctionStringVar:
|
|
60
|
+
"""Create a new function var from a string.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
func: The function to call.
|
|
64
|
+
_var_data: Additional hooks and imports associated with the Var.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
The function var.
|
|
68
|
+
"""
|
|
69
|
+
return cls(
|
|
70
|
+
_var_name=func,
|
|
71
|
+
_var_type=_var_type,
|
|
72
|
+
_var_data=_var_data,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@dataclasses.dataclass(
|
|
77
|
+
eq=False,
|
|
78
|
+
frozen=True,
|
|
79
|
+
**{"slots": True} if sys.version_info >= (3, 10) else {},
|
|
80
|
+
)
|
|
81
|
+
class VarOperationCall(CachedVarOperation, ImmutableVar):
|
|
82
|
+
"""Base class for immutable vars that are the result of a function call."""
|
|
83
|
+
|
|
84
|
+
_func: Optional[FunctionVar] = dataclasses.field(default=None)
|
|
85
|
+
_args: Tuple[Union[ImmutableVar, Any], ...] = dataclasses.field(
|
|
86
|
+
default_factory=tuple
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
@cached_property_no_lock
|
|
90
|
+
def _cached_var_name(self) -> str:
|
|
91
|
+
"""The name of the var.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
The name of the var.
|
|
95
|
+
"""
|
|
96
|
+
return f"({str(self._func)}({', '.join([str(LiteralVar.create(arg)) for arg in self._args])}))"
|
|
97
|
+
|
|
98
|
+
@cached_property_no_lock
|
|
99
|
+
def _cached_get_all_var_data(self) -> VarData | None:
|
|
100
|
+
"""Get all the var data associated with the var.
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
All the var data associated with the var.
|
|
104
|
+
"""
|
|
105
|
+
return VarData.merge(
|
|
106
|
+
self._func._get_all_var_data() if self._func is not None else None,
|
|
107
|
+
*[LiteralVar.create(arg)._get_all_var_data() for arg in self._args],
|
|
108
|
+
self._var_data,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
@classmethod
|
|
112
|
+
def create(
|
|
113
|
+
cls,
|
|
114
|
+
func: FunctionVar,
|
|
115
|
+
*args: ImmutableVar | Any,
|
|
116
|
+
_var_type: GenericType = Any,
|
|
117
|
+
_var_data: VarData | None = None,
|
|
118
|
+
) -> VarOperationCall:
|
|
119
|
+
"""Create a new function call var.
|
|
120
|
+
|
|
121
|
+
Args:
|
|
122
|
+
func: The function to call.
|
|
123
|
+
*args: The arguments to call the function with.
|
|
124
|
+
_var_data: Additional hooks and imports associated with the Var.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
The function call var.
|
|
128
|
+
"""
|
|
129
|
+
return cls(
|
|
130
|
+
_var_name="",
|
|
131
|
+
_var_type=_var_type,
|
|
132
|
+
_var_data=_var_data,
|
|
133
|
+
_func=func,
|
|
134
|
+
_args=args,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
@dataclasses.dataclass(
|
|
139
|
+
eq=False,
|
|
140
|
+
frozen=True,
|
|
141
|
+
**{"slots": True} if sys.version_info >= (3, 10) else {},
|
|
142
|
+
)
|
|
143
|
+
class ArgsFunctionOperation(CachedVarOperation, FunctionVar):
|
|
144
|
+
"""Base class for immutable function defined via arguments and return expression."""
|
|
145
|
+
|
|
146
|
+
_args_names: Tuple[str, ...] = dataclasses.field(default_factory=tuple)
|
|
147
|
+
_return_expr: Union[ImmutableVar, Any] = dataclasses.field(default=None)
|
|
148
|
+
|
|
149
|
+
@cached_property_no_lock
|
|
150
|
+
def _cached_var_name(self) -> str:
|
|
151
|
+
"""The name of the var.
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
The name of the var.
|
|
155
|
+
"""
|
|
156
|
+
return f"(({', '.join(self._args_names)}) => ({str(LiteralVar.create(self._return_expr))}))"
|
|
157
|
+
|
|
158
|
+
@classmethod
|
|
159
|
+
def create(
|
|
160
|
+
cls,
|
|
161
|
+
args_names: Tuple[str, ...],
|
|
162
|
+
return_expr: ImmutableVar | Any,
|
|
163
|
+
_var_type: GenericType = Callable,
|
|
164
|
+
_var_data: VarData | None = None,
|
|
165
|
+
) -> ArgsFunctionOperation:
|
|
166
|
+
"""Create a new function var.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
args_names: The names of the arguments.
|
|
170
|
+
return_expr: The return expression of the function.
|
|
171
|
+
_var_data: Additional hooks and imports associated with the Var.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
The function var.
|
|
175
|
+
"""
|
|
176
|
+
return cls(
|
|
177
|
+
_var_name="",
|
|
178
|
+
_var_type=_var_type,
|
|
179
|
+
_var_data=_var_data,
|
|
180
|
+
_args_names=args_names,
|
|
181
|
+
_return_expr=return_expr,
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
@dataclasses.dataclass(
|
|
186
|
+
eq=False,
|
|
187
|
+
frozen=True,
|
|
188
|
+
**{"slots": True} if sys.version_info >= (3, 10) else {},
|
|
189
|
+
)
|
|
190
|
+
class ToFunctionOperation(ToOperation, FunctionVar):
|
|
191
|
+
"""Base class of converting a var to a function."""
|
|
192
|
+
|
|
193
|
+
_original: ImmutableVar = dataclasses.field(
|
|
194
|
+
default_factory=lambda: LiteralVar.create(None)
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
_default_var_type: ClassVar[GenericType] = Callable
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
JSON_STRINGIFY = FunctionStringVar.create("JSON.stringify")
|