reflex 0.5.10a2__py3-none-any.whl → 0.6.0__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.

Files changed (303) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +2 -2
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -4
  4. reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
  5. reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
  6. reflex/.templates/web/utils/state.js +3 -1
  7. reflex/__init__.py +10 -3
  8. reflex/__init__.pyi +3 -2
  9. reflex/app.py +47 -11
  10. reflex/app_module_for_backend.py +1 -1
  11. reflex/base.py +3 -2
  12. reflex/compiler/compiler.py +5 -5
  13. reflex/compiler/utils.py +5 -3
  14. reflex/components/base/app_wrap.py +2 -4
  15. reflex/components/base/app_wrap.pyi +16 -26
  16. reflex/components/base/bare.py +6 -4
  17. reflex/components/base/body.pyi +16 -26
  18. reflex/components/base/document.pyi +76 -126
  19. reflex/components/base/error_boundary.py +9 -8
  20. reflex/components/base/error_boundary.pyi +18 -30
  21. reflex/components/base/fragment.pyi +16 -26
  22. reflex/components/base/head.pyi +31 -51
  23. reflex/components/base/link.py +1 -1
  24. reflex/components/base/link.pyi +31 -51
  25. reflex/components/base/meta.pyi +61 -101
  26. reflex/components/base/script.py +2 -2
  27. reflex/components/base/script.pyi +20 -36
  28. reflex/components/component.py +107 -130
  29. reflex/components/core/banner.py +61 -66
  30. reflex/components/core/banner.pyi +129 -230
  31. reflex/components/core/client_side_routing.py +2 -2
  32. reflex/components/core/client_side_routing.pyi +31 -51
  33. reflex/components/core/clipboard.py +4 -3
  34. reflex/components/core/clipboard.pyi +19 -31
  35. reflex/components/core/cond.py +21 -44
  36. reflex/components/core/debounce.py +7 -9
  37. reflex/components/core/debounce.pyi +19 -31
  38. reflex/components/core/foreach.py +4 -14
  39. reflex/components/core/html.py +1 -1
  40. reflex/components/core/html.pyi +34 -44
  41. reflex/components/core/match.py +36 -43
  42. reflex/components/core/upload.py +27 -26
  43. reflex/components/core/upload.pyi +81 -116
  44. reflex/components/datadisplay/code.py +55 -29
  45. reflex/components/datadisplay/code.pyi +303 -410
  46. reflex/components/datadisplay/dataeditor.py +13 -9
  47. reflex/components/datadisplay/dataeditor.pyi +39 -51
  48. reflex/components/el/__init__.py +0 -1
  49. reflex/components/el/__init__.pyi +0 -11
  50. reflex/components/el/element.pyi +16 -26
  51. reflex/components/el/elements/__init__.py +1 -7
  52. reflex/components/el/elements/__init__.pyi +1 -15
  53. reflex/components/el/elements/base.py +1 -1
  54. reflex/components/el/elements/base.pyi +33 -43
  55. reflex/components/el/elements/forms.py +26 -33
  56. reflex/components/el/elements/forms.pyi +542 -694
  57. reflex/components/el/elements/inline.py +1 -1
  58. reflex/components/el/elements/inline.pyi +909 -1189
  59. reflex/components/el/elements/media.py +1 -22
  60. reflex/components/el/elements/media.pyi +765 -975
  61. reflex/components/el/elements/metadata.py +3 -5
  62. reflex/components/el/elements/metadata.pyi +175 -235
  63. reflex/components/el/elements/other.py +1 -1
  64. reflex/components/el/elements/other.pyi +228 -298
  65. reflex/components/el/elements/scripts.py +1 -1
  66. reflex/components/el/elements/scripts.pyi +106 -136
  67. reflex/components/el/elements/sectioning.py +0 -2
  68. reflex/components/el/elements/sectioning.pyi +481 -631
  69. reflex/components/el/elements/tables.py +1 -1
  70. reflex/components/el/elements/tables.pyi +341 -441
  71. reflex/components/el/elements/typography.py +1 -1
  72. reflex/components/el/elements/typography.pyi +491 -641
  73. reflex/components/gridjs/datatable.py +9 -13
  74. reflex/components/gridjs/datatable.pyi +33 -53
  75. reflex/components/lucide/icon.py +3 -127
  76. reflex/components/lucide/icon.pyi +31 -160
  77. reflex/components/markdown/markdown.py +32 -42
  78. reflex/components/markdown/markdown.pyi +28 -41
  79. reflex/components/moment/moment.py +13 -12
  80. reflex/components/moment/moment.pyi +22 -33
  81. reflex/components/next/base.pyi +16 -26
  82. reflex/components/next/image.py +1 -5
  83. reflex/components/next/image.pyi +21 -35
  84. reflex/components/next/link.py +1 -1
  85. reflex/components/next/link.pyi +16 -26
  86. reflex/components/next/video.py +1 -1
  87. reflex/components/next/video.pyi +16 -26
  88. reflex/components/plotly/plotly.py +17 -30
  89. reflex/components/plotly/plotly.pyi +38 -52
  90. reflex/components/props.py +21 -10
  91. reflex/components/radix/__init__.pyi +2 -1
  92. reflex/components/radix/primitives/accordion.py +6 -7
  93. reflex/components/radix/primitives/accordion.pyi +415 -485
  94. reflex/components/radix/primitives/base.py +1 -1
  95. reflex/components/radix/primitives/base.pyi +31 -51
  96. reflex/components/radix/primitives/drawer.py +1 -1
  97. reflex/components/radix/primitives/drawer.pyi +162 -262
  98. reflex/components/radix/primitives/form.py +1 -1
  99. reflex/components/radix/primitives/form.pyi +247 -353
  100. reflex/components/radix/primitives/progress.py +1 -1
  101. reflex/components/radix/primitives/progress.pyi +226 -276
  102. reflex/components/radix/primitives/slider.py +1 -1
  103. reflex/components/radix/primitives/slider.pyi +82 -132
  104. reflex/components/radix/themes/base.py +8 -25
  105. reflex/components/radix/themes/base.pyi +171 -242
  106. reflex/components/radix/themes/color_mode.py +11 -20
  107. reflex/components/radix/themes/color_mode.pyi +198 -231
  108. reflex/components/radix/themes/components/__init__.pyi +1 -0
  109. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  110. reflex/components/radix/themes/components/alert_dialog.pyi +129 -199
  111. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  112. reflex/components/radix/themes/components/aspect_ratio.pyi +16 -26
  113. reflex/components/radix/themes/components/avatar.py +1 -1
  114. reflex/components/radix/themes/components/avatar.pyi +69 -79
  115. reflex/components/radix/themes/components/badge.py +1 -1
  116. reflex/components/radix/themes/components/badge.pyi +87 -97
  117. reflex/components/radix/themes/components/button.py +1 -1
  118. reflex/components/radix/themes/components/button.pyi +97 -107
  119. reflex/components/radix/themes/components/callout.py +1 -1
  120. reflex/components/radix/themes/components/callout.pyi +317 -367
  121. reflex/components/radix/themes/components/card.py +1 -1
  122. reflex/components/radix/themes/components/card.pyi +37 -47
  123. reflex/components/radix/themes/components/checkbox.py +2 -4
  124. reflex/components/radix/themes/components/checkbox.pyi +205 -241
  125. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  126. reflex/components/radix/themes/components/checkbox_cards.pyi +92 -112
  127. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  128. reflex/components/radix/themes/components/checkbox_group.pyi +84 -104
  129. reflex/components/radix/themes/components/context_menu.py +1 -1
  130. reflex/components/radix/themes/components/context_menu.pyi +230 -310
  131. reflex/components/radix/themes/components/data_list.py +6 -1
  132. reflex/components/radix/themes/components/data_list.pyi +131 -166
  133. reflex/components/radix/themes/components/dialog.py +1 -1
  134. reflex/components/radix/themes/components/dialog.pyi +132 -202
  135. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  136. reflex/components/radix/themes/components/dropdown_menu.pyi +241 -323
  137. reflex/components/radix/themes/components/hover_card.py +1 -1
  138. reflex/components/radix/themes/components/hover_card.pyi +86 -126
  139. reflex/components/radix/themes/components/icon_button.py +1 -1
  140. reflex/components/radix/themes/components/icon_button.pyi +97 -107
  141. reflex/components/radix/themes/components/inset.py +1 -1
  142. reflex/components/radix/themes/components/inset.pyi +46 -56
  143. reflex/components/radix/themes/components/popover.py +1 -1
  144. reflex/components/radix/themes/components/popover.pyi +91 -131
  145. reflex/components/radix/themes/components/progress.py +1 -1
  146. reflex/components/radix/themes/components/progress.pyi +70 -80
  147. reflex/components/radix/themes/components/radio.py +1 -1
  148. reflex/components/radix/themes/components/radio.pyi +68 -78
  149. reflex/components/radix/themes/components/radio_cards.py +1 -1
  150. reflex/components/radix/themes/components/radio_cards.pyi +96 -116
  151. reflex/components/radix/themes/components/radio_group.py +32 -31
  152. reflex/components/radix/themes/components/radio_group.pyi +230 -266
  153. reflex/components/radix/themes/components/scroll_area.py +1 -1
  154. reflex/components/radix/themes/components/scroll_area.pyi +20 -30
  155. reflex/components/radix/themes/components/segmented_control.py +1 -1
  156. reflex/components/radix/themes/components/segmented_control.pyi +88 -110
  157. reflex/components/radix/themes/components/select.py +1 -1
  158. reflex/components/radix/themes/components/select.pyi +365 -461
  159. reflex/components/radix/themes/components/separator.py +2 -4
  160. reflex/components/radix/themes/components/separator.pyi +68 -78
  161. reflex/components/radix/themes/components/skeleton.py +1 -1
  162. reflex/components/radix/themes/components/skeleton.pyi +22 -32
  163. reflex/components/radix/themes/components/slider.py +1 -1
  164. reflex/components/radix/themes/components/slider.pyi +74 -86
  165. reflex/components/radix/themes/components/spinner.py +1 -1
  166. reflex/components/radix/themes/components/spinner.pyi +18 -28
  167. reflex/components/radix/themes/components/switch.py +1 -1
  168. reflex/components/radix/themes/components/switch.pyi +70 -82
  169. reflex/components/radix/themes/components/table.py +1 -1
  170. reflex/components/radix/themes/components/table.pyi +254 -324
  171. reflex/components/radix/themes/components/tabs.py +1 -1
  172. reflex/components/radix/themes/components/tabs.pyi +134 -188
  173. reflex/components/radix/themes/components/text_area.py +1 -1
  174. reflex/components/radix/themes/components/text_area.pyi +95 -109
  175. reflex/components/radix/themes/components/text_field.py +1 -80
  176. reflex/components/radix/themes/components/text_field.pyi +245 -290
  177. reflex/components/radix/themes/components/tooltip.py +1 -1
  178. reflex/components/radix/themes/components/tooltip.pyi +25 -35
  179. reflex/components/radix/themes/layout/__init__.pyi +1 -0
  180. reflex/components/radix/themes/layout/base.py +1 -1
  181. reflex/components/radix/themes/layout/base.pyi +55 -65
  182. reflex/components/radix/themes/layout/box.pyi +33 -43
  183. reflex/components/radix/themes/layout/center.pyi +55 -65
  184. reflex/components/radix/themes/layout/container.py +2 -4
  185. reflex/components/radix/themes/layout/container.pyi +35 -45
  186. reflex/components/radix/themes/layout/flex.py +1 -1
  187. reflex/components/radix/themes/layout/flex.pyi +55 -65
  188. reflex/components/radix/themes/layout/grid.py +1 -1
  189. reflex/components/radix/themes/layout/grid.pyi +63 -73
  190. reflex/components/radix/themes/layout/list.py +1 -1
  191. reflex/components/radix/themes/layout/list.pyi +188 -238
  192. reflex/components/radix/themes/layout/section.py +2 -4
  193. reflex/components/radix/themes/layout/section.pyi +35 -45
  194. reflex/components/radix/themes/layout/spacer.pyi +55 -65
  195. reflex/components/radix/themes/layout/stack.py +1 -1
  196. reflex/components/radix/themes/layout/stack.pyi +125 -155
  197. reflex/components/radix/themes/typography/blockquote.py +1 -1
  198. reflex/components/radix/themes/typography/blockquote.pyi +88 -98
  199. reflex/components/radix/themes/typography/code.py +1 -1
  200. reflex/components/radix/themes/typography/code.pyi +89 -99
  201. reflex/components/radix/themes/typography/heading.py +1 -1
  202. reflex/components/radix/themes/typography/heading.pyi +95 -105
  203. reflex/components/radix/themes/typography/link.py +1 -1
  204. reflex/components/radix/themes/typography/link.pyi +101 -111
  205. reflex/components/radix/themes/typography/text.py +1 -1
  206. reflex/components/radix/themes/typography/text.pyi +494 -564
  207. reflex/components/react_player/audio.pyi +32 -58
  208. reflex/components/react_player/react_player.py +1 -1
  209. reflex/components/react_player/react_player.pyi +32 -58
  210. reflex/components/react_player/video.pyi +32 -58
  211. reflex/components/recharts/cartesian.py +22 -19
  212. reflex/components/recharts/cartesian.pyi +658 -840
  213. reflex/components/recharts/charts.py +3 -3
  214. reflex/components/recharts/charts.pyi +238 -342
  215. reflex/components/recharts/general.py +8 -8
  216. reflex/components/recharts/general.pyi +175 -225
  217. reflex/components/recharts/polar.py +11 -11
  218. reflex/components/recharts/polar.pyi +135 -171
  219. reflex/components/recharts/recharts.pyi +31 -51
  220. reflex/components/sonner/toast.py +27 -31
  221. reflex/components/sonner/toast.pyi +36 -45
  222. reflex/components/suneditor/editor.py +1 -1
  223. reflex/components/suneditor/editor.pyi +54 -76
  224. reflex/components/tags/cond_tag.py +6 -4
  225. reflex/components/tags/iter_tag.py +37 -25
  226. reflex/components/tags/match_tag.py +6 -4
  227. reflex/components/tags/tag.py +43 -28
  228. reflex/constants/base.py +3 -1
  229. reflex/constants/event.py +1 -0
  230. reflex/custom_components/custom_components.py +3 -1
  231. reflex/event.py +166 -108
  232. reflex/experimental/__init__.py +25 -6
  233. reflex/experimental/client_state.py +34 -57
  234. reflex/experimental/hooks.py +12 -17
  235. reflex/experimental/layout.py +4 -4
  236. reflex/experimental/layout.pyi +130 -180
  237. reflex/middleware/hydrate_middleware.py +2 -0
  238. reflex/middleware/middleware.py +3 -3
  239. reflex/model.py +22 -0
  240. reflex/reflex.py +4 -0
  241. reflex/state.py +491 -110
  242. reflex/style.py +56 -39
  243. reflex/testing.py +8 -3
  244. reflex/utils/exceptions.py +32 -0
  245. reflex/utils/exec.py +0 -14
  246. reflex/utils/format.py +80 -209
  247. reflex/utils/imports.py +16 -73
  248. reflex/utils/net.py +43 -0
  249. reflex/utils/path_ops.py +13 -1
  250. reflex/utils/prerequisites.py +81 -41
  251. reflex/utils/pyi_generator.py +12 -6
  252. reflex/utils/serializers.py +13 -41
  253. reflex/utils/telemetry.py +3 -2
  254. reflex/utils/types.py +47 -7
  255. reflex/{experimental/vars → vars}/__init__.py +6 -3
  256. reflex/vars/base.py +2563 -0
  257. reflex/vars/function.py +196 -0
  258. reflex/vars/number.py +1158 -0
  259. reflex/vars/object.py +562 -0
  260. reflex/vars/sequence.py +1604 -0
  261. {reflex-0.5.10a2.dist-info → reflex-0.6.0.dist-info}/METADATA +6 -9
  262. reflex-0.6.0.dist-info/RECORD +382 -0
  263. reflex/.templates/apps/demo/.gitignore +0 -4
  264. reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  265. reflex/.templates/apps/demo/assets/github.svg +0 -10
  266. reflex/.templates/apps/demo/assets/icon.svg +0 -37
  267. reflex/.templates/apps/demo/assets/logo.svg +0 -68
  268. reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
  269. reflex/.templates/apps/demo/code/__init__.py +0 -1
  270. reflex/.templates/apps/demo/code/demo.py +0 -127
  271. reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
  272. reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
  273. reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
  274. reflex/.templates/apps/demo/code/pages/forms.py +0 -257
  275. reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
  276. reflex/.templates/apps/demo/code/pages/home.py +0 -56
  277. reflex/.templates/apps/demo/code/sidebar.py +0 -178
  278. reflex/.templates/apps/demo/code/state.py +0 -22
  279. reflex/.templates/apps/demo/code/states/form_state.py +0 -40
  280. reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
  281. reflex/.templates/apps/demo/code/styles.py +0 -68
  282. reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  283. reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
  284. reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
  285. reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
  286. reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
  287. reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
  288. reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
  289. reflex/.templates/apps/demo/code/webui/state.py +0 -146
  290. reflex/.templates/apps/demo/code/webui/styles.py +0 -88
  291. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -36
  292. reflex/experimental/vars/base.py +0 -583
  293. reflex/experimental/vars/function.py +0 -290
  294. reflex/experimental/vars/number.py +0 -1458
  295. reflex/experimental/vars/object.py +0 -804
  296. reflex/experimental/vars/sequence.py +0 -1764
  297. reflex/utils/watch.py +0 -96
  298. reflex/vars.py +0 -2604
  299. reflex/vars.pyi +0 -218
  300. reflex-0.5.10a2.dist-info/RECORD +0 -413
  301. {reflex-0.5.10a2.dist-info → reflex-0.6.0.dist-info}/LICENSE +0 -0
  302. {reflex-0.5.10a2.dist-info → reflex-0.6.0.dist-info}/WHEEL +0 -0
  303. {reflex-0.5.10a2.dist-info → reflex-0.6.0.dist-info}/entry_points.txt +0 -0
@@ -1,290 +0,0 @@
1
- """Immutable function vars."""
2
-
3
- from __future__ import annotations
4
-
5
- import dataclasses
6
- import sys
7
- from functools import cached_property
8
- from typing import Any, Callable, Optional, Tuple, Type, Union
9
-
10
- from reflex.experimental.vars.base import ImmutableVar, LiteralVar
11
- from reflex.vars import ImmutableVarData, Var, VarData
12
-
13
-
14
- class FunctionVar(ImmutableVar[Callable]):
15
- """Base class for immutable function vars."""
16
-
17
- def __call__(self, *args: Var | Any) -> ArgsFunctionOperation:
18
- """Call the function with the given arguments.
19
-
20
- Args:
21
- *args: The arguments to call the function with.
22
-
23
- Returns:
24
- The function call operation.
25
- """
26
- return ArgsFunctionOperation(
27
- ("...args",),
28
- VarOperationCall(self, *args, ImmutableVar.create_safe("...args")),
29
- )
30
-
31
- def call(self, *args: Var | Any) -> VarOperationCall:
32
- """Call the function with the given arguments.
33
-
34
- Args:
35
- *args: The arguments to call the function with.
36
-
37
- Returns:
38
- The function call operation.
39
- """
40
- return VarOperationCall(self, *args)
41
-
42
-
43
- class FunctionStringVar(FunctionVar):
44
- """Base class for immutable function vars from a string."""
45
-
46
- def __init__(self, func: str, _var_data: VarData | None = None) -> None:
47
- """Initialize the function var.
48
-
49
- Args:
50
- func: The function to call.
51
- _var_data: Additional hooks and imports associated with the Var.
52
- """
53
- super(FunctionVar, self).__init__(
54
- _var_name=func,
55
- _var_type=Callable,
56
- _var_data=ImmutableVarData.merge(_var_data),
57
- )
58
-
59
-
60
- @dataclasses.dataclass(
61
- eq=False,
62
- frozen=True,
63
- **{"slots": True} if sys.version_info >= (3, 10) else {},
64
- )
65
- class VarOperationCall(ImmutableVar):
66
- """Base class for immutable vars that are the result of a function call."""
67
-
68
- _func: Optional[FunctionVar] = dataclasses.field(default=None)
69
- _args: Tuple[Union[Var, Any], ...] = dataclasses.field(default_factory=tuple)
70
-
71
- def __init__(
72
- self, func: FunctionVar, *args: Var | Any, _var_data: VarData | None = None
73
- ):
74
- """Initialize the function call var.
75
-
76
- Args:
77
- func: The function to call.
78
- *args: The arguments to call the function with.
79
- _var_data: Additional hooks and imports associated with the Var.
80
- """
81
- super(VarOperationCall, self).__init__(
82
- _var_name="",
83
- _var_type=Any,
84
- _var_data=ImmutableVarData.merge(_var_data),
85
- )
86
- object.__setattr__(self, "_func", func)
87
- object.__setattr__(self, "_args", args)
88
- object.__delattr__(self, "_var_name")
89
-
90
- def __getattr__(self, name):
91
- """Get an attribute of the var.
92
-
93
- Args:
94
- name: The name of the attribute.
95
-
96
- Returns:
97
- The attribute of the var.
98
- """
99
- if name == "_var_name":
100
- return self._cached_var_name
101
- return super(type(self), self).__getattr__(name)
102
-
103
- @cached_property
104
- def _cached_var_name(self) -> str:
105
- """The name of the var.
106
-
107
- Returns:
108
- The name of the var.
109
- """
110
- return f"({str(self._func)}({', '.join([str(LiteralVar.create(arg)) for arg in self._args])}))"
111
-
112
- @cached_property
113
- def _cached_get_all_var_data(self) -> ImmutableVarData | None:
114
- """Get all VarData associated with the Var.
115
-
116
- Returns:
117
- The VarData of the components and all of its children.
118
- """
119
- return ImmutableVarData.merge(
120
- self._func._get_all_var_data() if self._func is not None else None,
121
- *[var._get_all_var_data() for var in self._args],
122
- self._var_data,
123
- )
124
-
125
- def _get_all_var_data(self) -> ImmutableVarData | None:
126
- """Wrapper method for cached property.
127
-
128
- Returns:
129
- The VarData of the components and all of its children.
130
- """
131
- return self._cached_get_all_var_data
132
-
133
- def __post_init__(self):
134
- """Post-initialize the var."""
135
- pass
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(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[Var, Any] = dataclasses.field(default=None)
148
-
149
- def __init__(
150
- self,
151
- args_names: Tuple[str, ...],
152
- return_expr: Var | Any,
153
- _var_data: VarData | None = None,
154
- ) -> None:
155
- """Initialize the function with arguments var.
156
-
157
- Args:
158
- args_names: The names of the arguments.
159
- return_expr: The return expression of the function.
160
- _var_data: Additional hooks and imports associated with the Var.
161
- """
162
- super(ArgsFunctionOperation, self).__init__(
163
- _var_name=f"",
164
- _var_type=Callable,
165
- _var_data=ImmutableVarData.merge(_var_data),
166
- )
167
- object.__setattr__(self, "_args_names", args_names)
168
- object.__setattr__(self, "_return_expr", return_expr)
169
- object.__delattr__(self, "_var_name")
170
-
171
- def __getattr__(self, name):
172
- """Get an attribute of the var.
173
-
174
- Args:
175
- name: The name of the attribute.
176
-
177
- Returns:
178
- The attribute of the var.
179
- """
180
- if name == "_var_name":
181
- return self._cached_var_name
182
- return super(type(self), self).__getattr__(name)
183
-
184
- @cached_property
185
- def _cached_var_name(self) -> str:
186
- """The name of the var.
187
-
188
- Returns:
189
- The name of the var.
190
- """
191
- return f"(({', '.join(self._args_names)}) => ({str(LiteralVar.create(self._return_expr))}))"
192
-
193
- @cached_property
194
- def _cached_get_all_var_data(self) -> ImmutableVarData | None:
195
- """Get all VarData associated with the Var.
196
-
197
- Returns:
198
- The VarData of the components and all of its children.
199
- """
200
- return ImmutableVarData.merge(
201
- self._return_expr._get_all_var_data(),
202
- self._var_data,
203
- )
204
-
205
- def _get_all_var_data(self) -> ImmutableVarData | None:
206
- """Wrapper method for cached property.
207
-
208
- Returns:
209
- The VarData of the components and all of its children.
210
- """
211
- return self._cached_get_all_var_data
212
-
213
- def __post_init__(self):
214
- """Post-initialize the var."""
215
-
216
-
217
- @dataclasses.dataclass(
218
- eq=False,
219
- frozen=True,
220
- **{"slots": True} if sys.version_info >= (3, 10) else {},
221
- )
222
- class ToFunctionOperation(FunctionVar):
223
- """Base class of converting a var to a function."""
224
-
225
- _original_var: Var = dataclasses.field(
226
- default_factory=lambda: LiteralVar.create(None)
227
- )
228
-
229
- def __init__(
230
- self,
231
- original_var: Var,
232
- _var_type: Type[Callable] = Callable,
233
- _var_data: VarData | None = None,
234
- ) -> None:
235
- """Initialize the function with arguments var.
236
-
237
- Args:
238
- original_var: The original var to convert to a function.
239
- _var_type: The type of the function.
240
- _var_data: Additional hooks and imports associated with the Var.
241
- """
242
- super(ToFunctionOperation, self).__init__(
243
- _var_name=f"",
244
- _var_type=_var_type,
245
- _var_data=ImmutableVarData.merge(_var_data),
246
- )
247
- object.__setattr__(self, "_original_var", original_var)
248
- object.__delattr__(self, "_var_name")
249
-
250
- def __getattr__(self, name):
251
- """Get an attribute of the var.
252
-
253
- Args:
254
- name: The name of the attribute.
255
-
256
- Returns:
257
- The attribute of the var.
258
- """
259
- if name == "_var_name":
260
- return self._cached_var_name
261
- return super(type(self), self).__getattr__(name)
262
-
263
- @cached_property
264
- def _cached_var_name(self) -> str:
265
- """The name of the var.
266
-
267
- Returns:
268
- The name of the var.
269
- """
270
- return str(self._original_var)
271
-
272
- @cached_property
273
- def _cached_get_all_var_data(self) -> ImmutableVarData | None:
274
- """Get all VarData associated with the Var.
275
-
276
- Returns:
277
- The VarData of the components and all of its children.
278
- """
279
- return ImmutableVarData.merge(
280
- self._original_var._get_all_var_data(),
281
- self._var_data,
282
- )
283
-
284
- def _get_all_var_data(self) -> ImmutableVarData | None:
285
- """Wrapper method for cached property.
286
-
287
- Returns:
288
- The VarData of the components and all of its children.
289
- """
290
- return self._cached_get_all_var_data