reflex 0.6.8__py3-none-any.whl → 0.6.8a1__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 +6 -0
- reflex/config.py +5 -0
- reflex/event.py +2 -7
- reflex/proxy.py +119 -0
- reflex/testing.py +16 -5
- reflex/utils/console.py +6 -1
- reflex/vars/base.py +1 -1
- {reflex-0.6.8.dist-info → reflex-0.6.8a1.dist-info}/METADATA +3 -1
- {reflex-0.6.8.dist-info → reflex-0.6.8a1.dist-info}/RECORD +12 -11
- {reflex-0.6.8.dist-info → reflex-0.6.8a1.dist-info}/LICENSE +0 -0
- {reflex-0.6.8.dist-info → reflex-0.6.8a1.dist-info}/WHEEL +0 -0
- {reflex-0.6.8.dist-info → reflex-0.6.8a1.dist-info}/entry_points.txt +0 -0
reflex/app.py
CHANGED
|
@@ -331,6 +331,12 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
331
331
|
|
|
332
332
|
self.register_lifespan_task(windows_hot_reload_lifespan_hack)
|
|
333
333
|
|
|
334
|
+
# Enable proxying to frontend server.
|
|
335
|
+
if not environment.REFLEX_BACKEND_ONLY.get():
|
|
336
|
+
from reflex.proxy import proxy_middleware
|
|
337
|
+
|
|
338
|
+
self.register_lifespan_task(proxy_middleware)
|
|
339
|
+
|
|
334
340
|
def _enable_state(self) -> None:
|
|
335
341
|
"""Enable state for the app."""
|
|
336
342
|
if not self.state:
|
reflex/config.py
CHANGED
|
@@ -26,6 +26,7 @@ from typing import (
|
|
|
26
26
|
|
|
27
27
|
from typing_extensions import Annotated, get_type_hints
|
|
28
28
|
|
|
29
|
+
from reflex.utils.console import set_log_level
|
|
29
30
|
from reflex.utils.exceptions import ConfigError, EnvironmentVarValueError
|
|
30
31
|
from reflex.utils.types import GenericType, is_union, value_inside_optional
|
|
31
32
|
|
|
@@ -599,6 +600,7 @@ class Config(Base):
|
|
|
599
600
|
class Config:
|
|
600
601
|
"""Pydantic config for the config."""
|
|
601
602
|
|
|
603
|
+
use_enum_values = False
|
|
602
604
|
validate_assignment = True
|
|
603
605
|
|
|
604
606
|
# The name of the app (should match the name of the app directory).
|
|
@@ -718,6 +720,9 @@ class Config(Base):
|
|
|
718
720
|
self._non_default_attributes.update(kwargs)
|
|
719
721
|
self._replace_defaults(**kwargs)
|
|
720
722
|
|
|
723
|
+
# Set the log level for this process
|
|
724
|
+
set_log_level(self.loglevel)
|
|
725
|
+
|
|
721
726
|
if (
|
|
722
727
|
self.state_manager_mode == constants.StateManagerMode.REDIS
|
|
723
728
|
and not self.redis_url
|
reflex/event.py
CHANGED
|
@@ -437,7 +437,6 @@ class EventChain(EventActionsMixin):
|
|
|
437
437
|
value: EventType,
|
|
438
438
|
args_spec: ArgsSpec | Sequence[ArgsSpec],
|
|
439
439
|
key: Optional[str] = None,
|
|
440
|
-
**event_chain_kwargs,
|
|
441
440
|
) -> Union[EventChain, Var]:
|
|
442
441
|
"""Create an event chain from a variety of input types.
|
|
443
442
|
|
|
@@ -445,7 +444,6 @@ class EventChain(EventActionsMixin):
|
|
|
445
444
|
value: The value to create the event chain from.
|
|
446
445
|
args_spec: The args_spec of the event trigger being bound.
|
|
447
446
|
key: The key of the event trigger being bound.
|
|
448
|
-
**event_chain_kwargs: Additional kwargs to pass to the EventChain constructor.
|
|
449
447
|
|
|
450
448
|
Returns:
|
|
451
449
|
The event chain.
|
|
@@ -464,7 +462,6 @@ class EventChain(EventActionsMixin):
|
|
|
464
462
|
value=value.guess_type(),
|
|
465
463
|
args_spec=args_spec,
|
|
466
464
|
key=key,
|
|
467
|
-
**event_chain_kwargs,
|
|
468
465
|
)
|
|
469
466
|
else:
|
|
470
467
|
raise ValueError(
|
|
@@ -504,9 +501,7 @@ class EventChain(EventActionsMixin):
|
|
|
504
501
|
result = call_event_fn(value, args_spec, key=key)
|
|
505
502
|
if isinstance(result, Var):
|
|
506
503
|
# Recursively call this function if the lambda returned an EventChain Var.
|
|
507
|
-
return cls.create(
|
|
508
|
-
value=result, args_spec=args_spec, key=key, **event_chain_kwargs
|
|
509
|
-
)
|
|
504
|
+
return cls.create(value=result, args_spec=args_spec, key=key)
|
|
510
505
|
events = [*result]
|
|
511
506
|
|
|
512
507
|
# Otherwise, raise an error.
|
|
@@ -523,7 +518,7 @@ class EventChain(EventActionsMixin):
|
|
|
523
518
|
return cls(
|
|
524
519
|
events=events,
|
|
525
520
|
args_spec=args_spec,
|
|
526
|
-
|
|
521
|
+
event_actions={},
|
|
527
522
|
)
|
|
528
523
|
|
|
529
524
|
|
reflex/proxy.py
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""Handle proxying frontend requests from the backend server."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
from contextlib import asynccontextmanager
|
|
7
|
+
from typing import Any, AsyncGenerator
|
|
8
|
+
from urllib.parse import urlparse
|
|
9
|
+
|
|
10
|
+
from fastapi import FastAPI
|
|
11
|
+
from starlette.types import ASGIApp, Receive, Scope, Send
|
|
12
|
+
|
|
13
|
+
from .config import get_config
|
|
14
|
+
from .utils import console
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
import aiohttp
|
|
18
|
+
from asgiproxy.config import BaseURLProxyConfigMixin, ProxyConfig
|
|
19
|
+
from asgiproxy.context import ProxyContext
|
|
20
|
+
from asgiproxy.proxies.http import proxy_http
|
|
21
|
+
from asgiproxy.simple_proxy import make_simple_proxy_app
|
|
22
|
+
except ImportError:
|
|
23
|
+
|
|
24
|
+
@asynccontextmanager
|
|
25
|
+
async def proxy_middleware(*args, **kwargs) -> AsyncGenerator[None, None]:
|
|
26
|
+
"""A no-op proxy middleware for when asgiproxy is not installed.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
*args: The positional arguments.
|
|
30
|
+
**kwargs: The keyword arguments.
|
|
31
|
+
|
|
32
|
+
Yields:
|
|
33
|
+
None
|
|
34
|
+
"""
|
|
35
|
+
yield
|
|
36
|
+
else:
|
|
37
|
+
MAX_PROXY_RETRY = 25
|
|
38
|
+
|
|
39
|
+
async def proxy_http_with_retry(
|
|
40
|
+
*,
|
|
41
|
+
context: ProxyContext,
|
|
42
|
+
scope: Scope,
|
|
43
|
+
receive: Receive,
|
|
44
|
+
send: Send,
|
|
45
|
+
) -> Any:
|
|
46
|
+
"""Proxy an HTTP request with retries.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
context: The proxy context.
|
|
50
|
+
scope: The request scope.
|
|
51
|
+
receive: The receive channel.
|
|
52
|
+
send: The send channel.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
The response from `proxy_http`.
|
|
56
|
+
"""
|
|
57
|
+
for _attempt in range(MAX_PROXY_RETRY):
|
|
58
|
+
try:
|
|
59
|
+
return await proxy_http(
|
|
60
|
+
context=context,
|
|
61
|
+
scope=scope,
|
|
62
|
+
receive=receive,
|
|
63
|
+
send=send,
|
|
64
|
+
)
|
|
65
|
+
except aiohttp.ClientError as err: # noqa: PERF203
|
|
66
|
+
console.debug(
|
|
67
|
+
f"Retrying request {scope['path']} due to client error {err!r}."
|
|
68
|
+
)
|
|
69
|
+
await asyncio.sleep(0.3)
|
|
70
|
+
except Exception as ex:
|
|
71
|
+
console.debug(
|
|
72
|
+
f"Retrying request {scope['path']} due to unhandled exception {ex!r}."
|
|
73
|
+
)
|
|
74
|
+
await asyncio.sleep(0.3)
|
|
75
|
+
|
|
76
|
+
def _get_proxy_app_with_context(frontend_host: str) -> tuple[ProxyContext, ASGIApp]:
|
|
77
|
+
"""Get the proxy app with the given frontend host.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
frontend_host: The frontend host to proxy requests to.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
The proxy context and app.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
class LocalProxyConfig(BaseURLProxyConfigMixin, ProxyConfig):
|
|
87
|
+
upstream_base_url = frontend_host
|
|
88
|
+
rewrite_host_header = urlparse(upstream_base_url).netloc
|
|
89
|
+
|
|
90
|
+
proxy_context = ProxyContext(LocalProxyConfig())
|
|
91
|
+
proxy_app = make_simple_proxy_app(
|
|
92
|
+
proxy_context, proxy_http_handler=proxy_http_with_retry
|
|
93
|
+
)
|
|
94
|
+
return proxy_context, proxy_app
|
|
95
|
+
|
|
96
|
+
@asynccontextmanager
|
|
97
|
+
async def proxy_middleware( # pyright: ignore[reportGeneralTypeIssues]
|
|
98
|
+
app: FastAPI,
|
|
99
|
+
) -> AsyncGenerator[None, None]:
|
|
100
|
+
"""A middleware to proxy requests to the separate frontend server.
|
|
101
|
+
|
|
102
|
+
The proxy is installed on the / endpoint of the FastAPI instance.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
app: The FastAPI instance.
|
|
106
|
+
|
|
107
|
+
Yields:
|
|
108
|
+
None
|
|
109
|
+
"""
|
|
110
|
+
config = get_config()
|
|
111
|
+
backend_port = config.backend_port
|
|
112
|
+
frontend_host = f"http://localhost:{config.frontend_port}"
|
|
113
|
+
proxy_context, proxy_app = _get_proxy_app_with_context(frontend_host)
|
|
114
|
+
app.mount("/", proxy_app)
|
|
115
|
+
console.debug(
|
|
116
|
+
f"Proxying '/' requests on port {backend_port} to {frontend_host}"
|
|
117
|
+
)
|
|
118
|
+
async with proxy_context:
|
|
119
|
+
yield
|
reflex/testing.py
CHANGED
|
@@ -44,6 +44,7 @@ import reflex.utils.format
|
|
|
44
44
|
import reflex.utils.prerequisites
|
|
45
45
|
import reflex.utils.processes
|
|
46
46
|
from reflex.config import environment
|
|
47
|
+
from reflex.proxy import proxy_middleware
|
|
47
48
|
from reflex.state import (
|
|
48
49
|
BaseState,
|
|
49
50
|
StateManager,
|
|
@@ -298,6 +299,9 @@ class AppHarness:
|
|
|
298
299
|
self.state_manager = StateManagerRedis.create(self.app_instance.state)
|
|
299
300
|
else:
|
|
300
301
|
self.state_manager = self.app_instance._state_manager
|
|
302
|
+
# Disable proxy for app harness tests.
|
|
303
|
+
if proxy_middleware in self.app_instance.lifespan_tasks:
|
|
304
|
+
self.app_instance.lifespan_tasks.remove(proxy_middleware)
|
|
301
305
|
|
|
302
306
|
def _reload_state_module(self):
|
|
303
307
|
"""Reload the rx.State module to avoid conflict when reloading."""
|
|
@@ -365,9 +369,12 @@ class AppHarness:
|
|
|
365
369
|
def _start_frontend(self):
|
|
366
370
|
# Set up the frontend.
|
|
367
371
|
with chdir(self.app_path):
|
|
372
|
+
backend_host, backend_port = self._poll_for_servers().getsockname()
|
|
368
373
|
config = reflex.config.get_config()
|
|
374
|
+
config.backend_port = backend_port
|
|
369
375
|
config.api_url = "http://{0}:{1}".format(
|
|
370
|
-
|
|
376
|
+
backend_host,
|
|
377
|
+
backend_port,
|
|
371
378
|
)
|
|
372
379
|
reflex.utils.build.setup_frontend(self.app_path)
|
|
373
380
|
|
|
@@ -392,6 +399,7 @@ class AppHarness:
|
|
|
392
399
|
self.frontend_url = m.group(1)
|
|
393
400
|
config = reflex.config.get_config()
|
|
394
401
|
config.deploy_url = self.frontend_url
|
|
402
|
+
config.frontend_port = int(self.frontend_url.rpartition(":")[2])
|
|
395
403
|
break
|
|
396
404
|
if self.frontend_url is None:
|
|
397
405
|
raise RuntimeError("Frontend did not start")
|
|
@@ -915,17 +923,20 @@ class AppHarnessProd(AppHarness):
|
|
|
915
923
|
root=web_root,
|
|
916
924
|
error_page_map=error_page_map,
|
|
917
925
|
) as self.frontend_server:
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
926
|
+
config = reflex.config.get_config()
|
|
927
|
+
config.frontend_port = self.frontend_server.server_address[1]
|
|
928
|
+
self.frontend_url = f"http://localhost:{config.frontend_port}"
|
|
921
929
|
self.frontend_server.serve_forever()
|
|
922
930
|
|
|
923
931
|
def _start_frontend(self):
|
|
924
932
|
# Set up the frontend.
|
|
925
933
|
with chdir(self.app_path):
|
|
934
|
+
backend_host, backend_port = self._poll_for_servers().getsockname()
|
|
926
935
|
config = reflex.config.get_config()
|
|
936
|
+
config.backend_port = backend_port
|
|
927
937
|
config.api_url = "http://{0}:{1}".format(
|
|
928
|
-
|
|
938
|
+
backend_host,
|
|
939
|
+
backend_port,
|
|
929
940
|
)
|
|
930
941
|
reflex.reflex.export(
|
|
931
942
|
zipping=False,
|
reflex/utils/console.py
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import os
|
|
6
|
+
|
|
5
7
|
from rich.console import Console
|
|
6
8
|
from rich.progress import MofNCompleteColumn, Progress, TimeElapsedColumn
|
|
7
9
|
from rich.prompt import Prompt
|
|
@@ -12,7 +14,7 @@ from reflex.constants import LogLevel
|
|
|
12
14
|
_console = Console()
|
|
13
15
|
|
|
14
16
|
# The current log level.
|
|
15
|
-
_LOG_LEVEL = LogLevel.
|
|
17
|
+
_LOG_LEVEL = LogLevel.DEFAULT
|
|
16
18
|
|
|
17
19
|
# Deprecated features who's warning has been printed.
|
|
18
20
|
_EMITTED_DEPRECATION_WARNINGS = set()
|
|
@@ -61,6 +63,9 @@ def set_log_level(log_level: LogLevel):
|
|
|
61
63
|
raise ValueError(f"Invalid log level: {log_level}") from ae
|
|
62
64
|
|
|
63
65
|
global _LOG_LEVEL
|
|
66
|
+
if log_level != _LOG_LEVEL:
|
|
67
|
+
# Set the loglevel persistently for subprocesses
|
|
68
|
+
os.environ["LOGLEVEL"] = log_level.value
|
|
64
69
|
_LOG_LEVEL = log_level
|
|
65
70
|
|
|
66
71
|
|
reflex/vars/base.py
CHANGED
|
@@ -581,7 +581,7 @@ class Var(Generic[VAR_TYPE]):
|
|
|
581
581
|
|
|
582
582
|
# Try to pull the imports and hooks from contained values.
|
|
583
583
|
if not isinstance(value, str):
|
|
584
|
-
return LiteralVar.create(value
|
|
584
|
+
return LiteralVar.create(value)
|
|
585
585
|
|
|
586
586
|
if _var_is_string is False or _var_is_local is True:
|
|
587
587
|
return cls(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.8a1
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
5
|
Home-page: https://reflex.dev
|
|
6
6
|
License: Apache-2.0
|
|
@@ -15,7 +15,9 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Provides-Extra: proxy
|
|
18
19
|
Requires-Dist: alembic (>=1.11.1,<2.0)
|
|
20
|
+
Requires-Dist: asgiproxy (==0.1.1) ; extra == "proxy"
|
|
19
21
|
Requires-Dist: build (>=1.0.3,<2.0)
|
|
20
22
|
Requires-Dist: charset-normalizer (>=3.3.2,<4.0)
|
|
21
23
|
Requires-Dist: distro (>=1.8.0,<2.0) ; sys_platform == "linux"
|
|
@@ -40,7 +40,7 @@ reflex/__init__.py,sha256=c00VJtWXWwKr8YjDAJXT0_57PTbBZDZ9z5Djmzorxn0,10720
|
|
|
40
40
|
reflex/__init__.pyi,sha256=5V_z_NFVSF048DFv1aAfLYMi07fUB-j_L8gQc5SxU8k,11273
|
|
41
41
|
reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
|
|
42
42
|
reflex/admin.py,sha256=_3pkkauMiTGJJ0kwAEBnsUWAgZZ_1WNnCaaObbhpmUI,374
|
|
43
|
-
reflex/app.py,sha256=
|
|
43
|
+
reflex/app.py,sha256=Qpw6KmZMpuUNiYiAhyMXA1utXsO253SSxJBK6bBbgYI,56701
|
|
44
44
|
reflex/app_mixins/__init__.py,sha256=Oegz3-gZLP9p2OAN5ALNbsgxuNQfS6lGZgQA8cc-9mQ,137
|
|
45
45
|
reflex/app_mixins/lifespan.py,sha256=IG72wp1Kas2polEP6Y1nB0wFPN3J4Kh0JAHvbQ-7wZ8,3185
|
|
46
46
|
reflex/app_mixins/middleware.py,sha256=V5J06Ux9qZIHFX0pnz8qd3EuHHI8KIvtEKpfave_kjI,3209
|
|
@@ -323,7 +323,7 @@ reflex/components/tags/iter_tag.py,sha256=kdJeQbCJ02Cn5VPDRERywu8bJNrTgreIi3ZyOA
|
|
|
323
323
|
reflex/components/tags/match_tag.py,sha256=mqQF6fHhOSGSMdiaJ7YlwXSMhRtDmmIBu1Gw-VQQ324,586
|
|
324
324
|
reflex/components/tags/tag.py,sha256=5nlh1SU6Mwod8vyGCsV-iixd4xa_4cqU2vsBxHEA5ak,3084
|
|
325
325
|
reflex/components/tags/tagless.py,sha256=qO7Gm4V0ITDyymHkyltfz53155ZBt-W_WIPDYy93ca0,587
|
|
326
|
-
reflex/config.py,sha256=
|
|
326
|
+
reflex/config.py,sha256=7orSOze40tIuqqF56ScekC26iVztYkzwq4XvuGNX44A,27434
|
|
327
327
|
reflex/constants/__init__.py,sha256=VIF5rXe4-R_gdPX-G2dM8tw9X206GhjXAhWdOPtxctM,1974
|
|
328
328
|
reflex/constants/base.py,sha256=9PxiZPfU6xktVZuJYVOB3mYF7_oMsiKE7Bq0E5hU2ug,7444
|
|
329
329
|
reflex/constants/colors.py,sha256=cgLn8iEWtlpjQgbhhlCOGjbhfOULKnzqqzPph63SJoI,1613
|
|
@@ -338,7 +338,7 @@ reflex/constants/style.py,sha256=-LTofj8rBEAYEx8_Zj4Tda_EEPvgp2BjpLinarNOu2o,475
|
|
|
338
338
|
reflex/constants/utils.py,sha256=HGOSq9c-xGbCb1xoLAGLBdc-FOE8iuBzvuU24zSfsV0,789
|
|
339
339
|
reflex/custom_components/__init__.py,sha256=R4zsvOi4dfPmHc18KEphohXnQFBPnUCb50cMR5hSLDE,36
|
|
340
340
|
reflex/custom_components/custom_components.py,sha256=6OJMZ8AVk_DE-3UV0m9yjD_fLjyDZMasNtjrDGRy94o,33053
|
|
341
|
-
reflex/event.py,sha256=
|
|
341
|
+
reflex/event.py,sha256=qsapQ6Eowou8HIp8c91xtM5GGdxA-X7vGR9xBBhKw7o,60398
|
|
342
342
|
reflex/experimental/__init__.py,sha256=Tzh48jIncw2YzRFHh2SXWZ599TsHeY6_RrrWdK6gE2A,2085
|
|
343
343
|
reflex/experimental/assets.py,sha256=9qkhgcNo-xfpjHVZ1-lN79tB5qbWw_2nYaVliaV4Z4A,1098
|
|
344
344
|
reflex/experimental/client_state.py,sha256=-dCjtd_wINu_OFcH9i3NfagoiDwu_OMm-VQLGO20Kps,9107
|
|
@@ -357,16 +357,17 @@ reflex/middleware/hydrate_middleware.py,sha256=KvFppl4ca75bsjos5boy8EGwsRBZ9jI6Z
|
|
|
357
357
|
reflex/middleware/middleware.py,sha256=9eASK3MrbK1AvT2Sx5GFxXNwSuNW8_LTRGvPY1JccU4,1171
|
|
358
358
|
reflex/model.py,sha256=u19v2w-1MAeru46Hht8UscisIq5Y5EMuNo9xVbXIXEg,17352
|
|
359
359
|
reflex/page.py,sha256=2vnjP1SPRZY_l_E3uog0al3s2a_evzjCYUB4UTK8FNE,2388
|
|
360
|
+
reflex/proxy.py,sha256=VJg8pV6DKpY3Zuw4bY0wvAjYOK-21OpINMtjL7XBLDo,3730
|
|
360
361
|
reflex/reflex.py,sha256=v2rdQHfKGQ9_klXEf96NbAEmeMV3SQaORl9v0RYGxWg,17000
|
|
361
362
|
reflex/route.py,sha256=WZS7stKgO94nekFFYHaOqNgN3zZGpJb3YpGF4ViTHmw,4198
|
|
362
363
|
reflex/state.py,sha256=s0f1fkBGVawbxXLdohNH-cu_YxN_7ZWYBKObhyZgseM,141647
|
|
363
364
|
reflex/style.py,sha256=Djj6TUbDORun3nSwny6IQL8vYdlCON_b8qITkbSZ5Oc,12571
|
|
364
|
-
reflex/testing.py,sha256=
|
|
365
|
+
reflex/testing.py,sha256=TMDTEOBRaznN43GGHeaXVz1bhcpOSjM5GBYrziPiMbQ,35421
|
|
365
366
|
reflex/utils/__init__.py,sha256=y-AHKiRQAhk2oAkvn7W8cRVTZVK625ff8tTwvZtO7S4,24
|
|
366
367
|
reflex/utils/build.py,sha256=gbviqfS7x8yoIA5GZyzupR30GmlxP2WF4kzMRbTVs80,8393
|
|
367
368
|
reflex/utils/codespaces.py,sha256=tKmju4aGzDMPy76_eQSzJd3RYmVmiiNZy3Yc0e3zG_w,2856
|
|
368
369
|
reflex/utils/compat.py,sha256=nYlAZqrO1Co7WJefmlIeQMzQc-KCfc9eqRX1zkpD3Ok,2527
|
|
369
|
-
reflex/utils/console.py,sha256=
|
|
370
|
+
reflex/utils/console.py,sha256=2Yb_WM3MWhbjaBD9fMcCCcX0mjdrgtduIGhMXVIFNnk,7928
|
|
370
371
|
reflex/utils/exceptions.py,sha256=j1vlgdFhGx7L2uM4VNmhsj0kW1YYuIlVE0Uq6-mNWeo,5781
|
|
371
372
|
reflex/utils/exec.py,sha256=yrehsUXjNisQqyZr53Op2c7uwLdcFRo5iFgP-t5JB_w,16313
|
|
372
373
|
reflex/utils/export.py,sha256=7zBwzRznOlzybzSNzYZWON3YluFh-bYW79i4ZCHVbtY,2360
|
|
@@ -384,14 +385,14 @@ reflex/utils/serializers.py,sha256=j-Hvo-sCEEVBEuFxlDHpZLpJDeHlby9qNzhJD8DOnM4,1
|
|
|
384
385
|
reflex/utils/telemetry.py,sha256=kOxP6P9Ms717QINw453avxSbMrg4iewRK3UpcNlSQ3Q,5764
|
|
385
386
|
reflex/utils/types.py,sha256=J9wFZfjZ4uL5pbA28_Dst0m-so3T4kfBFdQ9ElQHcFI,26258
|
|
386
387
|
reflex/vars/__init__.py,sha256=2Kv6Oh9g3ISZFESjL1al8KiO7QBZUXmLKGMCBsP-DoY,1243
|
|
387
|
-
reflex/vars/base.py,sha256=
|
|
388
|
+
reflex/vars/base.py,sha256=dgYyYcHR-EbobARfhd0PaXGKANDaruJS30OtFPtE3lE,89512
|
|
388
389
|
reflex/vars/datetime.py,sha256=BnEZmxCpOjtvlPw6sfdjCoRJgefFlRFC4y-lqxC5MeA,5673
|
|
389
390
|
reflex/vars/function.py,sha256=ZxeznTQqprp4ernr8ADk5B4ztbuwqTMGnHo9zVCHDpw,14583
|
|
390
391
|
reflex/vars/number.py,sha256=3dsxSqZOxEc47Fx19YlQaD0jlqHEouxjI0z5Zx_y_7U,27484
|
|
391
392
|
reflex/vars/object.py,sha256=_wQMRaJV9IqanKLNwOLw-OX0A0fju40w74QjEdpVnoY,14310
|
|
392
393
|
reflex/vars/sequence.py,sha256=i3wMyAxe63fxkvIK9MSLHc772ACHJUpbWp9qRY-VBok,50829
|
|
393
|
-
reflex-0.6.
|
|
394
|
-
reflex-0.6.
|
|
395
|
-
reflex-0.6.
|
|
396
|
-
reflex-0.6.
|
|
397
|
-
reflex-0.6.
|
|
394
|
+
reflex-0.6.8a1.dist-info/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
|
|
395
|
+
reflex-0.6.8a1.dist-info/METADATA,sha256=KKTRc21nD4Z-dgssxlSZm1-wvbXAyip49eeVuf53680,12178
|
|
396
|
+
reflex-0.6.8a1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
397
|
+
reflex-0.6.8a1.dist-info/entry_points.txt,sha256=H1Z5Yat_xJfy0dRT1Frk2PkO_p41Xy7fCKlj4FcdL9o,44
|
|
398
|
+
reflex-0.6.8a1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|