reflex 0.7.4a2__py3-none-any.whl → 0.7.4.post1__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/app.py +0 -2
- reflex/config.py +3 -0
- reflex/state.py +28 -7
- reflex/utils/net.py +107 -18
- reflex/utils/prerequisites.py +20 -6
- reflex/utils/redir.py +3 -1
- reflex/utils/registry.py +11 -3
- {reflex-0.7.4a2.dist-info → reflex-0.7.4.post1.dist-info}/METADATA +1 -1
- {reflex-0.7.4a2.dist-info → reflex-0.7.4.post1.dist-info}/RECORD +12 -12
- {reflex-0.7.4a2.dist-info → reflex-0.7.4.post1.dist-info}/WHEEL +0 -0
- {reflex-0.7.4a2.dist-info → reflex-0.7.4.post1.dist-info}/entry_points.txt +0 -0
- {reflex-0.7.4a2.dist-info → reflex-0.7.4.post1.dist-info}/licenses/LICENSE +0 -0
reflex/app.py
CHANGED
|
@@ -1108,8 +1108,6 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1108
1108
|
if config.react_strict_mode:
|
|
1109
1109
|
app_wrappers[(200, "StrictMode")] = StrictMode.create()
|
|
1110
1110
|
|
|
1111
|
-
should_compile = self._should_compile()
|
|
1112
|
-
|
|
1113
1111
|
if not should_compile:
|
|
1114
1112
|
with console.timing("Evaluate Pages (Backend)"):
|
|
1115
1113
|
for route in self._unevaluated_pages:
|
reflex/config.py
CHANGED
|
@@ -720,6 +720,9 @@ class EnvironmentVariables:
|
|
|
720
720
|
# Used by flexgen to enumerate the pages.
|
|
721
721
|
REFLEX_ADD_ALL_ROUTES_ENDPOINT: EnvVar[bool] = env_var(False)
|
|
722
722
|
|
|
723
|
+
# The address to bind the HTTP client to. You can set this to "::" to enable IPv6.
|
|
724
|
+
REFLEX_HTTP_CLIENT_BIND_ADDRESS: EnvVar[str | None] = env_var(None)
|
|
725
|
+
|
|
723
726
|
|
|
724
727
|
environment = EnvironmentVariables()
|
|
725
728
|
|
reflex/state.py
CHANGED
|
@@ -907,7 +907,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
|
|
|
907
907
|
raise ValueError(f"Only one parent state is allowed {parent_states}.")
|
|
908
908
|
# The first non-mixin state in the mro is our parent.
|
|
909
909
|
for base in cls.mro()[1:]:
|
|
910
|
-
if
|
|
910
|
+
if not issubclass(base, BaseState) or base._mixin:
|
|
911
911
|
continue
|
|
912
912
|
if base is BaseState:
|
|
913
913
|
break
|
|
@@ -1403,6 +1403,29 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
|
|
|
1403
1403
|
for substate in self.substates.values():
|
|
1404
1404
|
substate.reset()
|
|
1405
1405
|
|
|
1406
|
+
@classmethod
|
|
1407
|
+
@functools.lru_cache
|
|
1408
|
+
def _is_client_storage(cls, prop_name_or_field: str | ModelField) -> bool:
|
|
1409
|
+
"""Check if the var is a client storage var.
|
|
1410
|
+
|
|
1411
|
+
Args:
|
|
1412
|
+
prop_name_or_field: The name of the var or the field itself.
|
|
1413
|
+
|
|
1414
|
+
Returns:
|
|
1415
|
+
Whether the var is a client storage var.
|
|
1416
|
+
"""
|
|
1417
|
+
if isinstance(prop_name_or_field, str):
|
|
1418
|
+
field = cls.get_fields().get(prop_name_or_field)
|
|
1419
|
+
else:
|
|
1420
|
+
field = prop_name_or_field
|
|
1421
|
+
return field is not None and (
|
|
1422
|
+
isinstance(field.default, ClientStorageBase)
|
|
1423
|
+
or (
|
|
1424
|
+
isinstance(field.type_, type)
|
|
1425
|
+
and issubclass(field.type_, ClientStorageBase)
|
|
1426
|
+
)
|
|
1427
|
+
)
|
|
1428
|
+
|
|
1406
1429
|
def _reset_client_storage(self):
|
|
1407
1430
|
"""Reset client storage base vars to their default values."""
|
|
1408
1431
|
# Client-side storage is reset during hydrate so that clearing cookies
|
|
@@ -1410,10 +1433,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
|
|
|
1410
1433
|
fields = self.get_fields()
|
|
1411
1434
|
for prop_name in self.base_vars:
|
|
1412
1435
|
field = fields[prop_name]
|
|
1413
|
-
if
|
|
1414
|
-
isinstance(field.type_, type)
|
|
1415
|
-
and issubclass(field.type_, ClientStorageBase)
|
|
1416
|
-
):
|
|
1436
|
+
if self._is_client_storage(field):
|
|
1417
1437
|
setattr(self, prop_name, copy.deepcopy(field.default))
|
|
1418
1438
|
|
|
1419
1439
|
# Recursively reset the substate client storage.
|
|
@@ -2350,8 +2370,9 @@ class UpdateVarsInternalState(State):
|
|
|
2350
2370
|
for var, value in vars.items():
|
|
2351
2371
|
state_name, _, var_name = var.rpartition(".")
|
|
2352
2372
|
var_state_cls = State.get_class_substate(state_name)
|
|
2353
|
-
|
|
2354
|
-
|
|
2373
|
+
if var_state_cls._is_client_storage(var_name):
|
|
2374
|
+
var_state = await self.get_state(var_state_cls)
|
|
2375
|
+
setattr(var_state, var_name, value)
|
|
2355
2376
|
|
|
2356
2377
|
|
|
2357
2378
|
class OnLoadInternalState(State):
|
reflex/utils/net.py
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
"""Helpers for downloading files from the network."""
|
|
2
2
|
|
|
3
|
+
import functools
|
|
4
|
+
import time
|
|
5
|
+
from typing import Callable, ParamSpec, TypeVar
|
|
6
|
+
|
|
3
7
|
import httpx
|
|
4
8
|
|
|
5
|
-
from
|
|
9
|
+
from reflex.utils.decorator import once
|
|
10
|
+
|
|
6
11
|
from . import console
|
|
7
12
|
|
|
8
13
|
|
|
@@ -12,30 +17,114 @@ def _httpx_verify_kwarg() -> bool:
|
|
|
12
17
|
Returns:
|
|
13
18
|
True if SSL verification is enabled, False otherwise
|
|
14
19
|
"""
|
|
20
|
+
from ..config import environment
|
|
21
|
+
|
|
15
22
|
return not environment.SSL_NO_VERIFY.get()
|
|
16
23
|
|
|
17
24
|
|
|
18
|
-
|
|
19
|
-
|
|
25
|
+
_P = ParamSpec("_P")
|
|
26
|
+
_T = TypeVar("_T")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _wrap_https_func(
|
|
30
|
+
func: Callable[_P, _T],
|
|
31
|
+
) -> Callable[_P, _T]:
|
|
32
|
+
"""Wrap an HTTPS function with logging.
|
|
20
33
|
|
|
21
34
|
Args:
|
|
22
|
-
|
|
23
|
-
**kwargs: Additional keyword arguments to pass to httpx.get.
|
|
35
|
+
func: The function to wrap.
|
|
24
36
|
|
|
25
37
|
Returns:
|
|
26
|
-
The
|
|
38
|
+
The wrapped function.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
@functools.wraps(func)
|
|
42
|
+
def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> _T:
|
|
43
|
+
url = args[0]
|
|
44
|
+
console.debug(f"Sending HTTPS request to {args[0]}")
|
|
45
|
+
initial_time = time.time()
|
|
46
|
+
try:
|
|
47
|
+
response = func(*args, **kwargs)
|
|
48
|
+
except httpx.ConnectError as err:
|
|
49
|
+
if "CERTIFICATE_VERIFY_FAILED" in str(err):
|
|
50
|
+
# If the error is a certificate verification error, recommend mitigating steps.
|
|
51
|
+
console.error(
|
|
52
|
+
f"Certificate verification failed for {url}. Set environment variable SSL_CERT_FILE to the "
|
|
53
|
+
"path of the certificate file or SSL_NO_VERIFY=1 to disable verification."
|
|
54
|
+
)
|
|
55
|
+
raise
|
|
56
|
+
else:
|
|
57
|
+
console.debug(
|
|
58
|
+
f"Received response from {url} in {time.time() - initial_time:.3f} seconds"
|
|
59
|
+
)
|
|
60
|
+
return response
|
|
61
|
+
|
|
62
|
+
return wrapper
|
|
63
|
+
|
|
27
64
|
|
|
28
|
-
|
|
29
|
-
|
|
65
|
+
def _is_ipv4_supported() -> bool:
|
|
66
|
+
"""Determine if the system supports IPv4.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
True if the system supports IPv4, False otherwise.
|
|
30
70
|
"""
|
|
31
|
-
kwargs.setdefault("verify", _httpx_verify_kwarg())
|
|
32
71
|
try:
|
|
33
|
-
|
|
34
|
-
except httpx.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
72
|
+
httpx.head("http://1.1.1.1", timeout=3)
|
|
73
|
+
except httpx.RequestError:
|
|
74
|
+
return False
|
|
75
|
+
else:
|
|
76
|
+
return True
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def _is_ipv6_supported() -> bool:
|
|
80
|
+
"""Determine if the system supports IPv6.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
True if the system supports IPv6, False otherwise.
|
|
84
|
+
"""
|
|
85
|
+
try:
|
|
86
|
+
httpx.head("http://[2606:4700:4700::1111]", timeout=3)
|
|
87
|
+
except httpx.RequestError:
|
|
88
|
+
return False
|
|
89
|
+
else:
|
|
90
|
+
return True
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _should_use_ipv6() -> bool:
|
|
94
|
+
"""Determine if the system supports IPv6.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
True if the system supports IPv6, False otherwise.
|
|
98
|
+
"""
|
|
99
|
+
return not _is_ipv4_supported() and _is_ipv6_supported()
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _httpx_local_address_kwarg() -> str:
|
|
103
|
+
"""Get the value of the HTTPX local_address keyword argument.
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
The local address to bind to
|
|
107
|
+
"""
|
|
108
|
+
from ..config import environment
|
|
109
|
+
|
|
110
|
+
return environment.REFLEX_HTTP_CLIENT_BIND_ADDRESS.get() or (
|
|
111
|
+
"::" if _should_use_ipv6() else "0.0.0.0"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@once
|
|
116
|
+
def _httpx_client() -> httpx.Client:
|
|
117
|
+
"""Get an HTTPX client.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
An HTTPX client.
|
|
121
|
+
"""
|
|
122
|
+
return httpx.Client(
|
|
123
|
+
transport=httpx.HTTPTransport(
|
|
124
|
+
local_address=_httpx_local_address_kwarg(),
|
|
125
|
+
verify=_httpx_verify_kwarg(),
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
get = _wrap_https_func(_httpx_client().get)
|
reflex/utils/prerequisites.py
CHANGED
|
@@ -115,11 +115,13 @@ def check_latest_package_version(package_name: str):
|
|
|
115
115
|
if environment.REFLEX_CHECK_LATEST_VERSION.get() is False:
|
|
116
116
|
return
|
|
117
117
|
try:
|
|
118
|
+
console.debug(f"Checking for the latest version of {package_name}...")
|
|
118
119
|
# Get the latest version from PyPI
|
|
119
120
|
current_version = importlib.metadata.version(package_name)
|
|
120
121
|
url = f"https://pypi.org/pypi/{package_name}/json"
|
|
121
122
|
response = net.get(url)
|
|
122
123
|
latest_version = response.json()["info"]["version"]
|
|
124
|
+
console.debug(f"Latest version of {package_name}: {latest_version}")
|
|
123
125
|
if get_or_set_last_reflex_version_check_datetime():
|
|
124
126
|
# Versions were already checked and saved in reflex.json, no need to warn again
|
|
125
127
|
return
|
|
@@ -129,6 +131,7 @@ def check_latest_package_version(package_name: str):
|
|
|
129
131
|
f"Your version ({current_version}) of {package_name} is out of date. Upgrade to {latest_version} with 'pip install {package_name} --upgrade'"
|
|
130
132
|
)
|
|
131
133
|
except Exception:
|
|
134
|
+
console.debug(f"Failed to check for the latest version of {package_name}.")
|
|
132
135
|
pass
|
|
133
136
|
|
|
134
137
|
|
|
@@ -902,11 +905,12 @@ def initialize_app_directory(
|
|
|
902
905
|
|
|
903
906
|
console.debug(f"Using {template_name=} {template_dir=} {template_code_dir_name=}.")
|
|
904
907
|
|
|
905
|
-
# Remove
|
|
906
|
-
for
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
908
|
+
# Remove __pycache__ dirs in template directory and current directory.
|
|
909
|
+
for pycache_dir in [
|
|
910
|
+
*template_dir.glob("**/__pycache__"),
|
|
911
|
+
*Path.cwd().glob("**/__pycache__"),
|
|
912
|
+
]:
|
|
913
|
+
shutil.rmtree(pycache_dir, ignore_errors=True)
|
|
910
914
|
|
|
911
915
|
for file in template_dir.iterdir():
|
|
912
916
|
# Copy the file to current directory but keep the name the same.
|
|
@@ -950,16 +954,22 @@ def initialize_web_directory():
|
|
|
950
954
|
# Reuse the hash if one is already created, so we don't over-write it when running reflex init
|
|
951
955
|
project_hash = get_project_hash()
|
|
952
956
|
|
|
957
|
+
console.debug(f"Copying {constants.Templates.Dirs.WEB_TEMPLATE} to {get_web_dir()}")
|
|
953
958
|
path_ops.cp(constants.Templates.Dirs.WEB_TEMPLATE, str(get_web_dir()))
|
|
954
959
|
|
|
960
|
+
console.debug("Initializing the web directory.")
|
|
955
961
|
initialize_package_json()
|
|
956
962
|
|
|
963
|
+
console.debug("Initializing the bun config file.")
|
|
957
964
|
initialize_bun_config()
|
|
958
965
|
|
|
966
|
+
console.debug("Initializing the public directory.")
|
|
959
967
|
path_ops.mkdir(get_web_dir() / constants.Dirs.PUBLIC)
|
|
960
968
|
|
|
969
|
+
console.debug("Initializing the next.config.js file.")
|
|
961
970
|
update_next_config()
|
|
962
971
|
|
|
972
|
+
console.debug("Initializing the reflex.json file.")
|
|
963
973
|
# Initialize the reflex json file.
|
|
964
974
|
init_reflex_json(project_hash=project_hash)
|
|
965
975
|
|
|
@@ -1392,6 +1402,7 @@ def ensure_reflex_installation_id() -> int | None:
|
|
|
1392
1402
|
Distinct id.
|
|
1393
1403
|
"""
|
|
1394
1404
|
try:
|
|
1405
|
+
console.debug("Ensuring reflex installation id.")
|
|
1395
1406
|
initialize_reflex_user_directory()
|
|
1396
1407
|
installation_id_file = environment.REFLEX_DIR.get() / "installation_id"
|
|
1397
1408
|
|
|
@@ -1418,6 +1429,7 @@ def ensure_reflex_installation_id() -> int | None:
|
|
|
1418
1429
|
|
|
1419
1430
|
def initialize_reflex_user_directory():
|
|
1420
1431
|
"""Initialize the reflex user directory."""
|
|
1432
|
+
console.debug(f"Creating {environment.REFLEX_DIR.get()}")
|
|
1421
1433
|
# Create the reflex directory.
|
|
1422
1434
|
path_ops.mkdir(environment.REFLEX_DIR.get())
|
|
1423
1435
|
|
|
@@ -1425,9 +1437,11 @@ def initialize_reflex_user_directory():
|
|
|
1425
1437
|
def initialize_frontend_dependencies():
|
|
1426
1438
|
"""Initialize all the frontend dependencies."""
|
|
1427
1439
|
# validate dependencies before install
|
|
1440
|
+
console.debug("Validating frontend dependencies.")
|
|
1428
1441
|
validate_frontend_dependencies()
|
|
1429
1442
|
# Install the frontend dependencies.
|
|
1430
|
-
|
|
1443
|
+
console.debug("Installing or validating bun.")
|
|
1444
|
+
install_bun()
|
|
1431
1445
|
# Set up the web directory.
|
|
1432
1446
|
initialize_web_directory()
|
|
1433
1447
|
|
reflex/utils/redir.py
CHANGED
|
@@ -5,6 +5,8 @@ import webbrowser
|
|
|
5
5
|
|
|
6
6
|
import httpx
|
|
7
7
|
|
|
8
|
+
from reflex.utils import net
|
|
9
|
+
|
|
8
10
|
from .. import constants
|
|
9
11
|
from . import console
|
|
10
12
|
|
|
@@ -38,7 +40,7 @@ def open_browser_and_wait(
|
|
|
38
40
|
console.info("[b]Complete the workflow in the browser to continue.[/b]")
|
|
39
41
|
while True:
|
|
40
42
|
try:
|
|
41
|
-
response =
|
|
43
|
+
response = net.get(poll_url, follow_redirects=True)
|
|
42
44
|
if response.is_success:
|
|
43
45
|
break
|
|
44
46
|
except httpx.RequestError as err:
|
reflex/utils/registry.py
CHANGED
|
@@ -16,10 +16,13 @@ def latency(registry: str) -> int:
|
|
|
16
16
|
int: The latency of the registry in microseconds.
|
|
17
17
|
"""
|
|
18
18
|
try:
|
|
19
|
-
|
|
19
|
+
time_to_respond = net.get(registry, timeout=2).elapsed.microseconds
|
|
20
20
|
except httpx.HTTPError:
|
|
21
21
|
console.info(f"Failed to connect to {registry}.")
|
|
22
22
|
return 10_000_000
|
|
23
|
+
else:
|
|
24
|
+
console.debug(f"Latency of {registry}: {time_to_respond}")
|
|
25
|
+
return time_to_respond
|
|
23
26
|
|
|
24
27
|
|
|
25
28
|
def average_latency(registry: str, attempts: int = 3) -> int:
|
|
@@ -32,7 +35,9 @@ def average_latency(registry: str, attempts: int = 3) -> int:
|
|
|
32
35
|
Returns:
|
|
33
36
|
The average latency of the registry in microseconds.
|
|
34
37
|
"""
|
|
35
|
-
|
|
38
|
+
registry_latency = sum(latency(registry) for _ in range(attempts)) // attempts
|
|
39
|
+
console.debug(f"Average latency of {registry}: {registry_latency}")
|
|
40
|
+
return registry_latency
|
|
36
41
|
|
|
37
42
|
|
|
38
43
|
def _get_best_registry() -> str:
|
|
@@ -41,12 +46,15 @@ def _get_best_registry() -> str:
|
|
|
41
46
|
Returns:
|
|
42
47
|
The best registry.
|
|
43
48
|
"""
|
|
49
|
+
console.debug("Getting best registry...")
|
|
44
50
|
registries = [
|
|
45
51
|
"https://registry.npmjs.org",
|
|
46
52
|
"https://r.cnpmjs.org",
|
|
47
53
|
]
|
|
48
54
|
|
|
49
|
-
|
|
55
|
+
best_registry = min(registries, key=average_latency)
|
|
56
|
+
console.debug(f"Best registry: {best_registry}")
|
|
57
|
+
return best_registry
|
|
50
58
|
|
|
51
59
|
|
|
52
60
|
def get_npm_registry() -> str:
|
|
@@ -2,17 +2,17 @@ reflex/__init__.py,sha256=64HB9b6MKesl3Yv6aZMsozdMKKpgnxirKk-aeN45UYY,10341
|
|
|
2
2
|
reflex/__init__.pyi,sha256=j4ZkO-mKKw5dFBhJVbaOg7AlncO-JCckV2cHENPiLG0,11303
|
|
3
3
|
reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
|
|
4
4
|
reflex/admin.py,sha256=wu_vYqB0rU2njYBJSI0XZgVEkAFVZNQNUkUUXrlFbZc,343
|
|
5
|
-
reflex/app.py,sha256=
|
|
5
|
+
reflex/app.py,sha256=SUaN7G_CHdfKTQU2NQPx1lelg2YPyI-hBH23JhQdAu0,69389
|
|
6
6
|
reflex/assets.py,sha256=PLTKAMYPKMZq8eWXKX8uco6NZ9IiPGWal0bOPLUmU7k,3364
|
|
7
7
|
reflex/base.py,sha256=UuWQkOgZYvJNSIkYuNpb4wp9WtIBXlfmxXARAnOXiZ4,3889
|
|
8
|
-
reflex/config.py,sha256=
|
|
8
|
+
reflex/config.py,sha256=f3SNQnaqvvxNcTWm6Jo1eOf7LUB9jxmAXeLmGnf_4Yg,35218
|
|
9
9
|
reflex/event.py,sha256=EX-9X-c8gIudZjRDG8qSrVAbegcaGkYXxLLRWg-7IOA,60758
|
|
10
10
|
reflex/model.py,sha256=k6qCweATPW1YRB_qcHwa5X35btJmtIlB4zEQ63FaW3w,17527
|
|
11
11
|
reflex/page.py,sha256=qEt8n5EtawSywCzdsiaNQJWhC8ie-vg8ig0JGuVavPI,2386
|
|
12
12
|
reflex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
13
|
reflex/reflex.py,sha256=ka_BOQTeC3jKwZflM3ka6aijvhFV0hNMzwUmBjH-iSU,21034
|
|
14
14
|
reflex/route.py,sha256=nn_hJwtQdjiqH_dHXfqMGWKllnyPQZTSR-KWdHDhoOs,4210
|
|
15
|
-
reflex/state.py,sha256=
|
|
15
|
+
reflex/state.py,sha256=e2DgHlvSMnPD5QRXGdWhV6KAFBsvfq3yjHp7MnsBOtc,142565
|
|
16
16
|
reflex/style.py,sha256=dilXPn8de80NzsXT53GPJrmjELC5nPYIlCgongyq1zM,13145
|
|
17
17
|
reflex/testing.py,sha256=IpjUHBNOJDAQtu6HnazfWIacEO5cIJvyHlCr6dYpr38,35585
|
|
18
18
|
reflex/.templates/apps/blank/assets/favicon.ico,sha256=baxxgDAQ2V4-G5Q4S2yK5uUJTUGkv-AOWBQ0xd6myUo,4286
|
|
@@ -379,13 +379,13 @@ reflex/utils/export.py,sha256=bcJA0L8lBbjij-5PU93ka2c1d_yJqrIurp5u4mN5f68,2537
|
|
|
379
379
|
reflex/utils/format.py,sha256=a8em_yzqp9pLTrPXRsdzFWSO1qL2x25BpJXOf9DV1t8,20638
|
|
380
380
|
reflex/utils/imports.py,sha256=-EkUt9y5U3qmImjfpsXwYh7JI9qJHd_L6X9y12EPJew,3921
|
|
381
381
|
reflex/utils/lazy_loader.py,sha256=-3DcwIqHNft2fb1ikgDYAMiEwNfbiWfrTBAf1gEVX2o,1367
|
|
382
|
-
reflex/utils/net.py,sha256=
|
|
382
|
+
reflex/utils/net.py,sha256=8ceAC_diguAxVOOJpzax2vb1RA2h4BxS8SJvpgWqGYI,3175
|
|
383
383
|
reflex/utils/path_ops.py,sha256=idGxUSJRKwYLLi7ppXkq3eV6rvAytJoO-n-FuLkwl3o,7604
|
|
384
|
-
reflex/utils/prerequisites.py,sha256=
|
|
384
|
+
reflex/utils/prerequisites.py,sha256=KaEoAsqv_m1_BtQGGh1ewuBIo6AZfTzzDFLAmR5XuHU,64046
|
|
385
385
|
reflex/utils/processes.py,sha256=2_qjTHToBNIn4VCBcivVxjmTvDaiWgDnF7frEmoBjBw,14749
|
|
386
386
|
reflex/utils/pyi_generator.py,sha256=cKdssbtAtGj2deOSDos9OF96w10qte8JM-TlfbzSdtw,41602
|
|
387
|
-
reflex/utils/redir.py,sha256=
|
|
388
|
-
reflex/utils/registry.py,sha256=
|
|
387
|
+
reflex/utils/redir.py,sha256=23OcUTsbThak5VYMQPOkSzyNsMB3VkgtF1bodSnHwbE,1533
|
|
388
|
+
reflex/utils/registry.py,sha256=3ft4jlq7WT8--jLNRAjhJVX0rb3z7jV1qP7kKEZBZhE,1785
|
|
389
389
|
reflex/utils/serializers.py,sha256=K8-erpNIjJNIKif0cDFExa9f5DEVuQUq0j5v5VH6aBI,13408
|
|
390
390
|
reflex/utils/telemetry.py,sha256=qwJBwjdtAV-OGKgO4h-NWhgTvfC3gbduBdn1UB8Ikes,5608
|
|
391
391
|
reflex/utils/types.py,sha256=nGX44Q_Jp33wIaxf2vxANwBWe1743V2B8RRS8H9yV4c,33449
|
|
@@ -397,8 +397,8 @@ reflex/vars/function.py,sha256=2sVnhgetPSwtor8VFtAiYJdzZ9IRNzAKdsUJG6dXQcE,14461
|
|
|
397
397
|
reflex/vars/number.py,sha256=f0AeipAAbBJiHILym4bkJdOGqHnMpwNgQDeV6Lc_7ms,26781
|
|
398
398
|
reflex/vars/object.py,sha256=-fGqHThozjxAAuQL-wTwEItPiFI-ps53P2bKoSlW_As,17081
|
|
399
399
|
reflex/vars/sequence.py,sha256=S0WvU4gVP7_3WNLttEoaFgUqJRjCQhXT9Auzub04ZmM,55216
|
|
400
|
-
reflex-0.7.
|
|
401
|
-
reflex-0.7.
|
|
402
|
-
reflex-0.7.
|
|
403
|
-
reflex-0.7.
|
|
404
|
-
reflex-0.7.
|
|
400
|
+
reflex-0.7.4.post1.dist-info/METADATA,sha256=FVxj3Uf6jbc7x_RrSI5GOIw0dz7dU6OMQNvjmicgmTI,12228
|
|
401
|
+
reflex-0.7.4.post1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
402
|
+
reflex-0.7.4.post1.dist-info/entry_points.txt,sha256=Rxt4dXc7MLBNt5CSHTehVPuSe9Xqow4HLX55nD9tQQ0,45
|
|
403
|
+
reflex-0.7.4.post1.dist-info/licenses/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
|
|
404
|
+
reflex-0.7.4.post1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|