reflex 0.6.0a2__py3-none-any.whl → 0.6.0a4__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/web/utils/state.js +3 -1
- reflex/app_module_for_backend.py +1 -1
- reflex/components/component.py +9 -4
- reflex/custom_components/custom_components.py +3 -1
- reflex/experimental/client_state.py +7 -6
- reflex/utils/exceptions.py +4 -0
- reflex/utils/format.py +32 -0
- reflex/utils/prerequisites.py +20 -7
- reflex/utils/telemetry.py +1 -1
- reflex/vars/base.py +41 -19
- reflex/vars/number.py +26 -3
- reflex/vars/sequence.py +0 -8
- {reflex-0.6.0a2.dist-info → reflex-0.6.0a4.dist-info}/METADATA +3 -4
- {reflex-0.6.0a2.dist-info → reflex-0.6.0a4.dist-info}/RECORD +18 -18
- {reflex-0.6.0a2.dist-info → reflex-0.6.0a4.dist-info}/LICENSE +0 -0
- {reflex-0.6.0a2.dist-info → reflex-0.6.0a4.dist-info}/WHEEL +0 -0
- {reflex-0.6.0a2.dist-info → reflex-0.6.0a4.dist-info}/entry_points.txt +0 -0
|
@@ -8,11 +8,11 @@ version = "0.0.1"
|
|
|
8
8
|
description = "Reflex custom component {{ module_name }}"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "Apache-2.0" }
|
|
11
|
-
requires-python = ">=3.
|
|
11
|
+
requires-python = ">=3.9"
|
|
12
12
|
authors = [{ name = "", email = "YOUREMAIL@domain.com" }]
|
|
13
13
|
keywords = ["reflex","reflex-custom-components"]
|
|
14
14
|
|
|
15
|
-
dependencies = ["reflex>=
|
|
15
|
+
dependencies = ["reflex>={{ reflex_version }}"]
|
|
16
16
|
|
|
17
17
|
classifiers = ["Development Status :: 4 - Beta"]
|
|
18
18
|
|
|
@@ -805,7 +805,9 @@ export const useEventLoop = (
|
|
|
805
805
|
* @returns True if the value is truthy, false otherwise.
|
|
806
806
|
*/
|
|
807
807
|
export const isTrue = (val) => {
|
|
808
|
-
|
|
808
|
+
if (Array.isArray(val)) return val.length > 0;
|
|
809
|
+
if (val === Object(val)) return Object.keys(val).length > 0;
|
|
810
|
+
return Boolean(val);
|
|
809
811
|
};
|
|
810
812
|
|
|
811
813
|
/**
|
reflex/app_module_for_backend.py
CHANGED
|
@@ -15,7 +15,7 @@ if constants.CompileVars.APP != "app":
|
|
|
15
15
|
telemetry.send("compile")
|
|
16
16
|
app_module = get_app(reload=False)
|
|
17
17
|
app = getattr(app_module, constants.CompileVars.APP)
|
|
18
|
-
# For py3.
|
|
18
|
+
# For py3.9 compatibility when redis is used, we MUST add any decorator pages
|
|
19
19
|
# before compiling the app in a thread to avoid event loop error (REF-2172).
|
|
20
20
|
app._apply_decorated_pages()
|
|
21
21
|
compile_future = ThreadPoolExecutor(max_workers=1).submit(app._compile)
|
reflex/components/component.py
CHANGED
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import copy
|
|
6
6
|
import typing
|
|
7
|
-
import warnings
|
|
8
7
|
from abc import ABC, abstractmethod
|
|
9
8
|
from functools import lru_cache, wraps
|
|
10
9
|
from hashlib import md5
|
|
@@ -170,8 +169,6 @@ ComponentStyle = Dict[
|
|
|
170
169
|
]
|
|
171
170
|
ComponentChild = Union[types.PrimitiveType, Var, BaseComponent]
|
|
172
171
|
|
|
173
|
-
warnings.filterwarnings("ignore", message="fields may not start with an underscore")
|
|
174
|
-
|
|
175
172
|
|
|
176
173
|
class Component(BaseComponent, ABC):
|
|
177
174
|
"""A component with style, event trigger and other props."""
|
|
@@ -451,8 +448,16 @@ class Component(BaseComponent, ABC):
|
|
|
451
448
|
and not types._issubclass(passed_type, expected_type, value)
|
|
452
449
|
):
|
|
453
450
|
value_name = value._js_expr if isinstance(value, Var) else value
|
|
451
|
+
|
|
452
|
+
additional_info = (
|
|
453
|
+
" You can call `.bool()` on the value to convert it to a boolean."
|
|
454
|
+
if expected_type is bool and isinstance(value, Var)
|
|
455
|
+
else ""
|
|
456
|
+
)
|
|
457
|
+
|
|
454
458
|
raise TypeError(
|
|
455
|
-
f"Invalid var passed for prop {type(self).__name__}.{key}, expected type {expected_type}, got value {value_name} of type {
|
|
459
|
+
f"Invalid var passed for prop {type(self).__name__}.{key}, expected type {expected_type}, got value {value_name} of type {passed_type}."
|
|
460
|
+
+ additional_info
|
|
456
461
|
)
|
|
457
462
|
# Check if the key is an event trigger.
|
|
458
463
|
if key in component_specific_triggers:
|
|
@@ -65,7 +65,9 @@ def _create_package_config(module_name: str, package_name: str):
|
|
|
65
65
|
with open(CustomComponents.PYPROJECT_TOML, "w") as f:
|
|
66
66
|
f.write(
|
|
67
67
|
templates.CUSTOM_COMPONENTS_PYPROJECT_TOML.render(
|
|
68
|
-
module_name=module_name,
|
|
68
|
+
module_name=module_name,
|
|
69
|
+
package_name=package_name,
|
|
70
|
+
reflex_version=constants.Reflex.VERSION,
|
|
69
71
|
)
|
|
70
72
|
)
|
|
71
73
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import dataclasses
|
|
6
|
+
import re
|
|
6
7
|
import sys
|
|
7
8
|
from typing import Any, Callable, Union
|
|
8
9
|
|
|
@@ -174,15 +175,15 @@ class ClientStateVar(Var):
|
|
|
174
175
|
else self._setter_name
|
|
175
176
|
)
|
|
176
177
|
if value is not NoValue:
|
|
177
|
-
import re
|
|
178
|
-
|
|
179
178
|
# This is a hack to make it work like an EventSpec taking an arg
|
|
180
179
|
value_str = str(LiteralVar.create(value))
|
|
181
180
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
181
|
+
if value_str.startswith("_"):
|
|
182
|
+
# remove patterns of ["*"] from the value_str using regex
|
|
183
|
+
arg = re.sub(r"\[\".*\"\]", "", value_str)
|
|
184
|
+
setter = f"(({arg}) => {setter}({value_str}))"
|
|
185
|
+
else:
|
|
186
|
+
setter = f"(() => {setter}({value_str}))"
|
|
186
187
|
return Var(
|
|
187
188
|
_js_expr=setter,
|
|
188
189
|
_var_data=VarData(imports=_refs_import if self._global_ref else {}),
|
reflex/utils/exceptions.py
CHANGED
|
@@ -107,3 +107,7 @@ class EventHandlerShadowsBuiltInStateMethod(ReflexError, NameError):
|
|
|
107
107
|
|
|
108
108
|
class GeneratedCodeHasNoFunctionDefs(ReflexError):
|
|
109
109
|
"""Raised when refactored code generated with flexgen has no functions defined."""
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class PrimitiveUnserializableToJSON(ReflexError, ValueError):
|
|
113
|
+
"""Raised when a primitive type is unserializable to JSON. Usually with NaN and Infinity."""
|
reflex/utils/format.py
CHANGED
|
@@ -10,6 +10,7 @@ from typing import TYPE_CHECKING, Any, Callable, List, Optional, Union
|
|
|
10
10
|
|
|
11
11
|
from reflex import constants
|
|
12
12
|
from reflex.utils import exceptions, types
|
|
13
|
+
from reflex.utils.console import deprecate
|
|
13
14
|
|
|
14
15
|
if TYPE_CHECKING:
|
|
15
16
|
from reflex.components.component import ComponentStyle
|
|
@@ -502,6 +503,37 @@ if TYPE_CHECKING:
|
|
|
502
503
|
from reflex.vars import Var
|
|
503
504
|
|
|
504
505
|
|
|
506
|
+
def format_event_chain(
|
|
507
|
+
event_chain: EventChain | Var[EventChain],
|
|
508
|
+
event_arg: Var | None = None,
|
|
509
|
+
) -> str:
|
|
510
|
+
"""DEPRECATED: format an event chain as a javascript invocation.
|
|
511
|
+
|
|
512
|
+
Use str(rx.Var.create(event_chain)) instead.
|
|
513
|
+
|
|
514
|
+
Args:
|
|
515
|
+
event_chain: The event chain to format.
|
|
516
|
+
event_arg: this argument is ignored.
|
|
517
|
+
|
|
518
|
+
Returns:
|
|
519
|
+
Compiled javascript code to queue the given event chain on the frontend.
|
|
520
|
+
"""
|
|
521
|
+
deprecate(
|
|
522
|
+
feature_name="format_event_chain",
|
|
523
|
+
reason="Use str(rx.Var.create(event_chain)) instead",
|
|
524
|
+
deprecation_version="0.6.0",
|
|
525
|
+
removal_version="0.7.0",
|
|
526
|
+
)
|
|
527
|
+
|
|
528
|
+
from reflex.vars import Var
|
|
529
|
+
from reflex.vars.function import ArgsFunctionOperation
|
|
530
|
+
|
|
531
|
+
result = Var.create(event_chain)
|
|
532
|
+
if isinstance(result, ArgsFunctionOperation):
|
|
533
|
+
result = result._return_expr
|
|
534
|
+
return str(result)
|
|
535
|
+
|
|
536
|
+
|
|
505
537
|
def format_queue_events(
|
|
506
538
|
events: (
|
|
507
539
|
EventSpec
|
reflex/utils/prerequisites.py
CHANGED
|
@@ -73,6 +73,18 @@ def get_web_dir() -> Path:
|
|
|
73
73
|
return workdir
|
|
74
74
|
|
|
75
75
|
|
|
76
|
+
def _python_version_check():
|
|
77
|
+
"""Emit deprecation warning for deprecated python versions."""
|
|
78
|
+
# Check for end-of-life python versions.
|
|
79
|
+
if sys.version_info < (3, 10):
|
|
80
|
+
console.deprecate(
|
|
81
|
+
feature_name="Support for Python 3.9 and older",
|
|
82
|
+
reason="please upgrade to Python 3.10 or newer",
|
|
83
|
+
deprecation_version="0.6.0",
|
|
84
|
+
removal_version="0.7.0",
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
|
|
76
88
|
def check_latest_package_version(package_name: str):
|
|
77
89
|
"""Check if the latest version of the package is installed.
|
|
78
90
|
|
|
@@ -85,15 +97,16 @@ def check_latest_package_version(package_name: str):
|
|
|
85
97
|
url = f"https://pypi.org/pypi/{package_name}/json"
|
|
86
98
|
response = net.get(url)
|
|
87
99
|
latest_version = response.json()["info"]["version"]
|
|
88
|
-
if (
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
):
|
|
92
|
-
#
|
|
93
|
-
# the last_version_check_datetime is not set in reflex.json
|
|
100
|
+
if get_or_set_last_reflex_version_check_datetime():
|
|
101
|
+
# Versions were already checked and saved in reflex.json, no need to warn again
|
|
102
|
+
return
|
|
103
|
+
if version.parse(current_version) < version.parse(latest_version):
|
|
104
|
+
# Show a warning when the host version is older than PyPI version
|
|
94
105
|
console.warn(
|
|
95
106
|
f"Your version ({current_version}) of {package_name} is out of date. Upgrade to {latest_version} with 'pip install {package_name} --upgrade'"
|
|
96
107
|
)
|
|
108
|
+
# Check for depreacted python versions
|
|
109
|
+
_python_version_check()
|
|
97
110
|
except Exception:
|
|
98
111
|
pass
|
|
99
112
|
|
|
@@ -290,7 +303,7 @@ def get_compiled_app(reload: bool = False, export: bool = False) -> ModuleType:
|
|
|
290
303
|
"""
|
|
291
304
|
app_module = get_app(reload=reload)
|
|
292
305
|
app = getattr(app_module, constants.CompileVars.APP)
|
|
293
|
-
# For py3.
|
|
306
|
+
# For py3.9 compatibility when redis is used, we MUST add any decorator pages
|
|
294
307
|
# before compiling the app in a thread to avoid event loop error (REF-2172).
|
|
295
308
|
app._apply_decorated_pages()
|
|
296
309
|
app._compile(export=export)
|
reflex/utils/telemetry.py
CHANGED
reflex/vars/base.py
CHANGED
|
@@ -13,6 +13,7 @@ import random
|
|
|
13
13
|
import re
|
|
14
14
|
import string
|
|
15
15
|
import sys
|
|
16
|
+
import warnings
|
|
16
17
|
from types import CodeType, FunctionType
|
|
17
18
|
from typing import (
|
|
18
19
|
TYPE_CHECKING,
|
|
@@ -72,6 +73,8 @@ if TYPE_CHECKING:
|
|
|
72
73
|
|
|
73
74
|
VAR_TYPE = TypeVar("VAR_TYPE", covariant=True)
|
|
74
75
|
|
|
76
|
+
warnings.filterwarnings("ignore", message="fields may not start with an underscore")
|
|
77
|
+
|
|
75
78
|
|
|
76
79
|
@dataclasses.dataclass(
|
|
77
80
|
eq=False,
|
|
@@ -116,6 +119,16 @@ class Var(Generic[VAR_TYPE]):
|
|
|
116
119
|
"""
|
|
117
120
|
return self._js_expr
|
|
118
121
|
|
|
122
|
+
@property
|
|
123
|
+
@deprecated("Use `_js_expr` instead.")
|
|
124
|
+
def _var_name_unwrapped(self) -> str:
|
|
125
|
+
"""The name of the var without extra curly braces.
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
The name of the var.
|
|
129
|
+
"""
|
|
130
|
+
return self._js_expr
|
|
131
|
+
|
|
119
132
|
@property
|
|
120
133
|
def _var_is_string(self) -> bool:
|
|
121
134
|
"""Whether the var is a string literal.
|
|
@@ -1029,6 +1042,20 @@ class LiteralVar(Var):
|
|
|
1029
1042
|
if isinstance(value, EventHandler):
|
|
1030
1043
|
return Var(_js_expr=".".join(filter(None, get_event_handler_parts(value))))
|
|
1031
1044
|
|
|
1045
|
+
serialized_value = serializers.serialize(value)
|
|
1046
|
+
if serialized_value is not None:
|
|
1047
|
+
if isinstance(serialized_value, dict):
|
|
1048
|
+
return LiteralObjectVar.create(
|
|
1049
|
+
serialized_value,
|
|
1050
|
+
_var_type=type(value),
|
|
1051
|
+
_var_data=_var_data,
|
|
1052
|
+
)
|
|
1053
|
+
if isinstance(serialized_value, str):
|
|
1054
|
+
return LiteralStringVar.create(
|
|
1055
|
+
serialized_value, _var_type=type(value), _var_data=_var_data
|
|
1056
|
+
)
|
|
1057
|
+
return LiteralVar.create(serialized_value, _var_data=_var_data)
|
|
1058
|
+
|
|
1032
1059
|
if isinstance(value, Base):
|
|
1033
1060
|
# get the fields of the pydantic class
|
|
1034
1061
|
fields = value.__fields__.keys()
|
|
@@ -1044,20 +1071,6 @@ class LiteralVar(Var):
|
|
|
1044
1071
|
_var_data=_var_data,
|
|
1045
1072
|
)
|
|
1046
1073
|
|
|
1047
|
-
serialized_value = serializers.serialize(value)
|
|
1048
|
-
if serialized_value is not None:
|
|
1049
|
-
if isinstance(serialized_value, dict):
|
|
1050
|
-
return LiteralObjectVar.create(
|
|
1051
|
-
serialized_value,
|
|
1052
|
-
_var_type=type(value),
|
|
1053
|
-
_var_data=_var_data,
|
|
1054
|
-
)
|
|
1055
|
-
if isinstance(serialized_value, str):
|
|
1056
|
-
return LiteralStringVar.create(
|
|
1057
|
-
serialized_value, _var_type=type(value), _var_data=_var_data
|
|
1058
|
-
)
|
|
1059
|
-
return LiteralVar.create(serialized_value, _var_data=_var_data)
|
|
1060
|
-
|
|
1061
1074
|
if dataclasses.is_dataclass(value) and not isinstance(value, type):
|
|
1062
1075
|
return LiteralObjectVar.create(
|
|
1063
1076
|
{
|
|
@@ -1199,10 +1212,13 @@ def unionize(*args: Type) -> Type:
|
|
|
1199
1212
|
"""
|
|
1200
1213
|
if not args:
|
|
1201
1214
|
return Any
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
return Union[
|
|
1215
|
+
if len(args) == 1:
|
|
1216
|
+
return args[0]
|
|
1217
|
+
# We are bisecting the args list here to avoid hitting the recursion limit
|
|
1218
|
+
# In Python versions >= 3.11, we can simply do `return Union[*args]`
|
|
1219
|
+
midpoint = len(args) // 2
|
|
1220
|
+
first_half, second_half = args[:midpoint], args[midpoint:]
|
|
1221
|
+
return Union[unionize(*first_half), unionize(*second_half)]
|
|
1206
1222
|
|
|
1207
1223
|
|
|
1208
1224
|
def figure_out_type(value: Any) -> types.GenericType:
|
|
@@ -1983,17 +1999,23 @@ class CustomVarOperationReturn(Var[RETURN]):
|
|
|
1983
1999
|
def var_operation_return(
|
|
1984
2000
|
js_expression: str,
|
|
1985
2001
|
var_type: Type[RETURN] | None = None,
|
|
2002
|
+
var_data: VarData | None = None,
|
|
1986
2003
|
) -> CustomVarOperationReturn[RETURN]:
|
|
1987
2004
|
"""Shortcut for creating a CustomVarOperationReturn.
|
|
1988
2005
|
|
|
1989
2006
|
Args:
|
|
1990
2007
|
js_expression: The JavaScript expression to evaluate.
|
|
1991
2008
|
var_type: The type of the var.
|
|
2009
|
+
var_data: Additional hooks and imports associated with the Var.
|
|
1992
2010
|
|
|
1993
2011
|
Returns:
|
|
1994
2012
|
The CustomVarOperationReturn.
|
|
1995
2013
|
"""
|
|
1996
|
-
return CustomVarOperationReturn.create(
|
|
2014
|
+
return CustomVarOperationReturn.create(
|
|
2015
|
+
js_expression,
|
|
2016
|
+
var_type,
|
|
2017
|
+
var_data,
|
|
2018
|
+
)
|
|
1997
2019
|
|
|
1998
2020
|
|
|
1999
2021
|
@dataclasses.dataclass(
|
reflex/vars/number.py
CHANGED
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import dataclasses
|
|
6
6
|
import json
|
|
7
|
+
import math
|
|
7
8
|
import sys
|
|
8
9
|
from typing import (
|
|
9
10
|
TYPE_CHECKING,
|
|
@@ -17,7 +18,9 @@ from typing import (
|
|
|
17
18
|
overload,
|
|
18
19
|
)
|
|
19
20
|
|
|
20
|
-
from reflex.
|
|
21
|
+
from reflex.constants.base import Dirs
|
|
22
|
+
from reflex.utils.exceptions import PrimitiveUnserializableToJSON, VarTypeError
|
|
23
|
+
from reflex.utils.imports import ImportDict, ImportVar
|
|
21
24
|
|
|
22
25
|
from .base import (
|
|
23
26
|
CustomVarOperationReturn,
|
|
@@ -1038,7 +1041,14 @@ class LiteralNumberVar(LiteralVar, NumberVar):
|
|
|
1038
1041
|
|
|
1039
1042
|
Returns:
|
|
1040
1043
|
The JSON representation of the var.
|
|
1044
|
+
|
|
1045
|
+
Raises:
|
|
1046
|
+
PrimitiveUnserializableToJSON: If the var is unserializable to JSON.
|
|
1041
1047
|
"""
|
|
1048
|
+
if math.isinf(self._var_value) or math.isnan(self._var_value):
|
|
1049
|
+
raise PrimitiveUnserializableToJSON(
|
|
1050
|
+
f"No valid JSON representation for {self}"
|
|
1051
|
+
)
|
|
1042
1052
|
return json.dumps(self._var_value)
|
|
1043
1053
|
|
|
1044
1054
|
def __hash__(self) -> int:
|
|
@@ -1060,8 +1070,15 @@ class LiteralNumberVar(LiteralVar, NumberVar):
|
|
|
1060
1070
|
Returns:
|
|
1061
1071
|
The number var.
|
|
1062
1072
|
"""
|
|
1073
|
+
if math.isinf(value):
|
|
1074
|
+
js_expr = "Infinity" if value > 0 else "-Infinity"
|
|
1075
|
+
elif math.isnan(value):
|
|
1076
|
+
js_expr = "NaN"
|
|
1077
|
+
else:
|
|
1078
|
+
js_expr = str(value)
|
|
1079
|
+
|
|
1063
1080
|
return cls(
|
|
1064
|
-
_js_expr=
|
|
1081
|
+
_js_expr=js_expr,
|
|
1065
1082
|
_var_type=type(value),
|
|
1066
1083
|
_var_data=_var_data,
|
|
1067
1084
|
_var_value=value,
|
|
@@ -1098,6 +1115,11 @@ class ToBooleanVarOperation(ToOperation, BooleanVar):
|
|
|
1098
1115
|
_default_var_type: ClassVar[Type] = bool
|
|
1099
1116
|
|
|
1100
1117
|
|
|
1118
|
+
_IS_TRUE_IMPORT: ImportDict = {
|
|
1119
|
+
f"/{Dirs.STATE_PATH}": [ImportVar(tag="isTrue")],
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
|
|
1101
1123
|
@var_operation
|
|
1102
1124
|
def boolify(value: Var):
|
|
1103
1125
|
"""Convert the value to a boolean.
|
|
@@ -1109,8 +1131,9 @@ def boolify(value: Var):
|
|
|
1109
1131
|
The boolean value.
|
|
1110
1132
|
"""
|
|
1111
1133
|
return var_operation_return(
|
|
1112
|
-
js_expression=f"
|
|
1134
|
+
js_expression=f"isTrue({value})",
|
|
1113
1135
|
var_type=bool,
|
|
1136
|
+
var_data=VarData(imports=_IS_TRUE_IMPORT),
|
|
1114
1137
|
)
|
|
1115
1138
|
|
|
1116
1139
|
|
reflex/vars/sequence.py
CHANGED
|
@@ -194,14 +194,6 @@ class StringVar(Var[str]):
|
|
|
194
194
|
"""
|
|
195
195
|
return string_strip_operation(self)
|
|
196
196
|
|
|
197
|
-
def bool(self):
|
|
198
|
-
"""Boolean conversion.
|
|
199
|
-
|
|
200
|
-
Returns:
|
|
201
|
-
The boolean value of the string.
|
|
202
|
-
"""
|
|
203
|
-
return self.length() != 0
|
|
204
|
-
|
|
205
197
|
def reversed(self) -> StringVar:
|
|
206
198
|
"""Reverse the string.
|
|
207
199
|
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.0a4
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
5
|
Home-page: https://reflex.dev
|
|
6
6
|
License: Apache-2.0
|
|
7
7
|
Keywords: web,framework
|
|
8
8
|
Author: Nikhil Rao
|
|
9
9
|
Author-email: nikhil@reflex.dev
|
|
10
|
-
Requires-Python: >=3.
|
|
10
|
+
Requires-Python: >=3.9,<4.0
|
|
11
11
|
Classifier: Development Status :: 4 - Beta
|
|
12
12
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.9
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -88,7 +87,7 @@ See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architectu
|
|
|
88
87
|
|
|
89
88
|
## ⚙️ Installation
|
|
90
89
|
|
|
91
|
-
Open a terminal and run (Requires Python 3.
|
|
90
|
+
Open a terminal and run (Requires Python 3.9+):
|
|
92
91
|
|
|
93
92
|
```bash
|
|
94
93
|
pip install reflex
|
|
@@ -5,7 +5,7 @@ reflex/.templates/jinja/app/rxconfig.py.jinja2,sha256=Scfnv_vZXIPQcz8zNIa4FmjEym
|
|
|
5
5
|
reflex/.templates/jinja/custom_components/README.md.jinja2,sha256=qA4XZDxOTc2gRIG7CO1VvVawOgThwZqU2RZvRTPhXwE,127
|
|
6
6
|
reflex/.templates/jinja/custom_components/__init__.py.jinja2,sha256=z5n2tvoS7iNDaM6mUGKETdpGlC0oA1_rrYURu7O_xpk,32
|
|
7
7
|
reflex/.templates/jinja/custom_components/demo_app.py.jinja2,sha256=ipbKtObNqQLcwbFowod_bSWW4bttW_8bNyTXl7JL1zg,826
|
|
8
|
-
reflex/.templates/jinja/custom_components/pyproject.toml.jinja2,sha256=
|
|
8
|
+
reflex/.templates/jinja/custom_components/pyproject.toml.jinja2,sha256=4Y3gCELIePaVwNcoymcjdASBDReC9iaV9Mzj29vy69g,629
|
|
9
9
|
reflex/.templates/jinja/custom_components/src.py.jinja2,sha256=e80PwMI6NoeQtGJ0NXWhYrkqUe7jvvJTFuztYQe-R5w,2403
|
|
10
10
|
reflex/.templates/jinja/web/package.json.jinja2,sha256=YU9PF8WgiQ8OPlG3oLDX31t2R0o6DFntCh698NTiDK8,548
|
|
11
11
|
reflex/.templates/jinja/web/pages/_app.js.jinja2,sha256=ITqBviFgMCSisLEmXz2tptCqA0UuAmG6h6hSquGqMEo,895
|
|
@@ -33,7 +33,7 @@ reflex/.templates/web/utils/helpers/debounce.js,sha256=xGhtTRtS_xIcaeqnYVvYJNseL
|
|
|
33
33
|
reflex/.templates/web/utils/helpers/paste.js,sha256=ef30HsR83jRzzvZnl8yV79yqFP8TC_u8SlN99cCS_OM,1799
|
|
34
34
|
reflex/.templates/web/utils/helpers/range.js,sha256=FevdZzCVxjF57ullfjpcUpeOXRxh5v09YnBB0jPbrS4,1152
|
|
35
35
|
reflex/.templates/web/utils/helpers/throttle.js,sha256=qxeyaEojaTeX36FPGftzVWrzDsRQU4iqg3U9RJz9Vj4,566
|
|
36
|
-
reflex/.templates/web/utils/state.js,sha256=
|
|
36
|
+
reflex/.templates/web/utils/state.js,sha256=eEjYHBNKjWWBz7MwXN64vcCArKfWNbHBleI3LEMUIZU,26169
|
|
37
37
|
reflex/__init__.py,sha256=l2s3m-0wU3JR9XQsartdHAF6PGHy69bv_--AbOrsnJc,10443
|
|
38
38
|
reflex/__init__.pyi,sha256=uR7TbT_Wo0jwAMf6m0wZDxi9z4Yvv6dpUBrkFRvssLY,10787
|
|
39
39
|
reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
|
|
@@ -43,7 +43,7 @@ reflex/app_mixins/__init__.py,sha256=Oegz3-gZLP9p2OAN5ALNbsgxuNQfS6lGZgQA8cc-9mQ
|
|
|
43
43
|
reflex/app_mixins/lifespan.py,sha256=0PaavAPTYmF7JdLKGfZQu_NT7oAaxyq7-5fauLZ9e8Y,2048
|
|
44
44
|
reflex/app_mixins/middleware.py,sha256=6Yby_Uw1-J0K7NgPyh-X7tGGhmezn6D7-KsfABYAVBU,3130
|
|
45
45
|
reflex/app_mixins/mixin.py,sha256=wjudM02c-y1vV8aTNUUs9CsFta7pzXrvBqyEzXOW-g4,310
|
|
46
|
-
reflex/app_module_for_backend.py,sha256=
|
|
46
|
+
reflex/app_module_for_backend.py,sha256=Xr_JoKeX5Ks_EefejS6lRheMaPkiOlH_Xpzx9QNgAZw,1218
|
|
47
47
|
reflex/base.py,sha256=hqdG9sRr2GNNRCg9C4pmf_BocMpsOLAY_rEKQ7KDDQQ,4334
|
|
48
48
|
reflex/compiler/__init__.py,sha256=r8jqmDSFf09iV2lHlNhfc9XrTLjNxfDNwPYlxS4cmHE,27
|
|
49
49
|
reflex/compiler/compiler.py,sha256=72QhapNEw8y2q2B9n4RQVLlAaX50eqZF9nVDPX8dM9k,17872
|
|
@@ -72,7 +72,7 @@ reflex/components/base/meta.py,sha256=RWITTQTA_35-FbaVGhjkAWDOmU65rzJ-WedENRJk-3
|
|
|
72
72
|
reflex/components/base/meta.pyi,sha256=b3Cf2m1DA5NhBqra0Cpd_abSfXiuTIXH3L6hSLhhz_o,12028
|
|
73
73
|
reflex/components/base/script.py,sha256=pzjfVygBenPQTu1T8j8zCZJTBywaZ4Rw-EQmTh_ZnHY,2389
|
|
74
74
|
reflex/components/base/script.pyi,sha256=wBxTC2evS69oT-NQiRPVMWwxN2kuju5KPeqdfBzDV4o,4364
|
|
75
|
-
reflex/components/component.py,sha256=
|
|
75
|
+
reflex/components/component.py,sha256=Z8wQBXzEmlUT2AFX6WpOY1x2pezcfRHRBrW1UtgVjD8,78508
|
|
76
76
|
reflex/components/core/__init__.py,sha256=msAsWb_6bmZGSei4gEpyYczuJ0VNEZtg20fRtyb3wwM,1285
|
|
77
77
|
reflex/components/core/__init__.pyi,sha256=hmng2kT4e3iBSSI_x9t7g2-58G6Cb4rhuwz_APJ-UZM,1994
|
|
78
78
|
reflex/components/core/banner.py,sha256=aYcpFdJ0C1sarfE8DpODYdIK1OJyGPufhGWpoptc4cQ,8751
|
|
@@ -329,11 +329,11 @@ reflex/constants/installer.py,sha256=IOjAPppNHXjdBEGSj07cmzubcfUzEylVoFPOsHfGfBE
|
|
|
329
329
|
reflex/constants/route.py,sha256=fu1jp9MoIriUJ8Cu4gLeinTxkyVBbRPs8Bkt35vqYOM,2144
|
|
330
330
|
reflex/constants/style.py,sha256=sJ6LuPY1OWemwMXnI1Htm-pa087HWT6PWljUeyokcUI,474
|
|
331
331
|
reflex/custom_components/__init__.py,sha256=R4zsvOi4dfPmHc18KEphohXnQFBPnUCb50cMR5hSLDE,36
|
|
332
|
-
reflex/custom_components/custom_components.py,sha256=
|
|
332
|
+
reflex/custom_components/custom_components.py,sha256=1f9FzCR4EQ5t25pFLHrItV4_TN0XUAK7L49kpRHQMRs,33141
|
|
333
333
|
reflex/event.py,sha256=TANj8GZYKKVQx20CAOjMQRTfGxua8xywxinpX5jurlA,31366
|
|
334
334
|
reflex/experimental/__init__.py,sha256=usDkf5yRMHKHjdRa_KfedFeD-urOMAKBuNfsghzvre4,1974
|
|
335
335
|
reflex/experimental/assets.py,sha256=nWj4454REHDP2gybtlhOac0Xyb0uqBMzjAFqYlaYwcE,1758
|
|
336
|
-
reflex/experimental/client_state.py,sha256=
|
|
336
|
+
reflex/experimental/client_state.py,sha256=t1oOMY1n7U3AqtsZtWfoioBThpxgyNY3i00egn9KqfA,7799
|
|
337
337
|
reflex/experimental/hooks.py,sha256=fHYD4rX_f7T38gsFDqglD9E29FjPLf6jO1rN39DX7XM,2242
|
|
338
338
|
reflex/experimental/layout.py,sha256=talXPlKuRzJFNGoyc3ATEaJg7_Z4jgTAAXiTi29STWs,7586
|
|
339
339
|
reflex/experimental/layout.pyi,sha256=ziRPPYXnSf_DKNCIKHdcJVOxjqzDrjm1QwN9idrQ7eE,18075
|
|
@@ -353,30 +353,30 @@ reflex/utils/build.py,sha256=DJryIUJ_3DV2nn4pZ9SiV60lwIGYPZWgYw9prsQXrKA,8482
|
|
|
353
353
|
reflex/utils/codespaces.py,sha256=tKmju4aGzDMPy76_eQSzJd3RYmVmiiNZy3Yc0e3zG_w,2856
|
|
354
354
|
reflex/utils/compat.py,sha256=ty_8eOifMjg9oVOWGHCu5cACu9iqw5_ZEOkTRck7B94,2012
|
|
355
355
|
reflex/utils/console.py,sha256=irO3qP7_9_5cxbc3hBfyawJgtgIq5s8nJQ0RgUt91fU,5477
|
|
356
|
-
reflex/utils/exceptions.py,sha256=
|
|
356
|
+
reflex/utils/exceptions.py,sha256=ZsfeEa6hbmOrpkyfBd-TdKCLpMXV72ohJPDvnCE1ElQ,3437
|
|
357
357
|
reflex/utils/exec.py,sha256=NDp7kNuUPeWaI8MXV6g8rXRK7PffCkl5u2t7zwJskW4,11000
|
|
358
358
|
reflex/utils/export.py,sha256=3dI9QjoU0ZA_g8OSQipVLpFWQcxWa_sHkpezWemvWbo,2366
|
|
359
|
-
reflex/utils/format.py,sha256=
|
|
359
|
+
reflex/utils/format.py,sha256=J_J5CRGCo5X-RIb0wzK-c3cmGuE6L7bPqqm1HqHmljc,22123
|
|
360
360
|
reflex/utils/imports.py,sha256=DMyHT1f6VtnuKidnqCXsxNb-gVjVHTSAGwsYl-6HnmE,3623
|
|
361
361
|
reflex/utils/lazy_loader.py,sha256=utVpUjKcz32GC1I7g0g7OlTyvVoZNFcuAjNtnxiSYww,1282
|
|
362
362
|
reflex/utils/net.py,sha256=UFCfaOjvRDVLTeTzLKJ5iDAWtPNuhng5gOs-pIMYQek,1267
|
|
363
363
|
reflex/utils/path_ops.py,sha256=0-X6FZh-ktqEj_yKtS9IcuzkOROchtZLUXoyV6toD4k,5195
|
|
364
|
-
reflex/utils/prerequisites.py,sha256=
|
|
364
|
+
reflex/utils/prerequisites.py,sha256=a5cB0G2_LvHywaxXX4VxGDyIgd8CyzqcLk3-TOtSIZs,52926
|
|
365
365
|
reflex/utils/processes.py,sha256=y8X5PxycEWT1ItLtpIS-rzrUvNQ9MUOkHdIg_zK9Vp0,13228
|
|
366
366
|
reflex/utils/pyi_generator.py,sha256=n9GpxSOeTvIH2pJHd748TUbD0bZgoqEJCxXLD5aAjvQ,34574
|
|
367
367
|
reflex/utils/redir.py,sha256=B0K9m6ejDW0ABeclBb4AsRRORvx_stCTWsrDe1YvkzY,1679
|
|
368
368
|
reflex/utils/registry.py,sha256=NKtd1ewsu0_p-FoD0pmLWCEzRrm_6t4Lis8Erip3w4g,1161
|
|
369
369
|
reflex/utils/serializers.py,sha256=iZPVSgkfklM_Nyfee2VWSuM7Mz1kV7MIjzNIEbnOF8k,10864
|
|
370
|
-
reflex/utils/telemetry.py,sha256=
|
|
370
|
+
reflex/utils/telemetry.py,sha256=zyy-bQjf18qQM-iTACIA9T7VBWRpm-DNES7iNJLrieo,5596
|
|
371
371
|
reflex/utils/types.py,sha256=DvS1pESOEs0RTTJYs56CRrmPltmkiXcfyzCF06DGVwM,18519
|
|
372
372
|
reflex/vars/__init__.py,sha256=OdCzmDFGMbCoy5VN4xQ3DaLpHck7npuLz7OUYvsN6Xw,1128
|
|
373
|
-
reflex/vars/base.py,sha256=
|
|
373
|
+
reflex/vars/base.py,sha256=6JWyrDH4reUE97gHwOWGAEv1q25hLKG5eBxLqdY_i4Y,78020
|
|
374
374
|
reflex/vars/function.py,sha256=GjTGRjDhMRACSPBIGNYgQzjKI2WgfhSluAWCm1mJQnU,5478
|
|
375
|
-
reflex/vars/number.py,sha256=
|
|
375
|
+
reflex/vars/number.py,sha256=vEdeXTLCwWLK-FcPFH6DKpmpWyhuvDEQ64yLpipasFs,27937
|
|
376
376
|
reflex/vars/object.py,sha256=wOq74_nDNAhqgT21HkHGfRukGdLjWoLprHjFNy1hjy8,14988
|
|
377
|
-
reflex/vars/sequence.py,sha256=
|
|
378
|
-
reflex-0.6.
|
|
379
|
-
reflex-0.6.
|
|
380
|
-
reflex-0.6.
|
|
381
|
-
reflex-0.6.
|
|
382
|
-
reflex-0.6.
|
|
377
|
+
reflex/vars/sequence.py,sha256=3Qz9FdtAPzEGRKq_z1jJvi8I6-vHaAmzRtZE-agkKDU,44301
|
|
378
|
+
reflex-0.6.0a4.dist-info/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
|
|
379
|
+
reflex-0.6.0a4.dist-info/METADATA,sha256=J5sP6bwzSa4OlD3EuK0br8m7kJfxaFCuXcQlut-PPfc,12111
|
|
380
|
+
reflex-0.6.0a4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
381
|
+
reflex-0.6.0a4.dist-info/entry_points.txt,sha256=H1Z5Yat_xJfy0dRT1Frk2PkO_p41Xy7fCKlj4FcdL9o,44
|
|
382
|
+
reflex-0.6.0a4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|