reflex 0.6.1a1__py3-none-any.whl → 0.6.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of reflex might be problematic. Click here for more details.
- reflex/.templates/jinja/web/pages/_app.js.jinja2 +6 -8
- reflex/.templates/web/utils/state.js +17 -5
- reflex/app.py +3 -14
- reflex/compiler/compiler.py +25 -1
- reflex/compiler/utils.py +4 -5
- reflex/components/component.py +32 -18
- reflex/components/dynamic.py +39 -9
- reflex/components/el/elements/media.py +89 -0
- reflex/components/el/elements/media.pyi +480 -0
- reflex/components/sonner/toast.py +3 -3
- reflex/config.py +3 -2
- reflex/constants/base.py +22 -12
- reflex/constants/config.py +3 -4
- reflex/constants/custom_components.py +4 -3
- reflex/constants/installer.py +14 -15
- reflex/custom_components/custom_components.py +32 -41
- reflex/event.py +199 -4
- reflex/istate/data.py +126 -0
- reflex/model.py +2 -3
- reflex/reflex.py +5 -14
- reflex/state.py +127 -164
- reflex/utils/build.py +21 -16
- reflex/utils/compat.py +25 -4
- reflex/utils/exceptions.py +12 -0
- reflex/utils/exec.py +2 -2
- reflex/utils/format.py +1 -13
- reflex/utils/path_ops.py +3 -3
- reflex/utils/prerequisites.py +49 -88
- reflex/utils/processes.py +2 -2
- reflex/vars/base.py +48 -37
- {reflex-0.6.1a1.dist-info → reflex-0.6.2.dist-info}/METADATA +1 -2
- {reflex-0.6.1a1.dist-info → reflex-0.6.2.dist-info}/RECORD +35 -34
- {reflex-0.6.1a1.dist-info → reflex-0.6.2.dist-info}/LICENSE +0 -0
- {reflex-0.6.1a1.dist-info → reflex-0.6.2.dist-info}/WHEEL +0 -0
- {reflex-0.6.1a1.dist-info → reflex-0.6.2.dist-info}/entry_points.txt +0 -0
reflex/utils/prerequisites.py
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import contextlib
|
|
5
6
|
import dataclasses
|
|
6
7
|
import functools
|
|
7
|
-
import glob
|
|
8
8
|
import importlib
|
|
9
9
|
import importlib.metadata
|
|
10
10
|
import json
|
|
@@ -19,7 +19,6 @@ import tempfile
|
|
|
19
19
|
import time
|
|
20
20
|
import zipfile
|
|
21
21
|
from datetime import datetime
|
|
22
|
-
from fileinput import FileInput
|
|
23
22
|
from pathlib import Path
|
|
24
23
|
from types import ModuleType
|
|
25
24
|
from typing import Callable, List, Optional
|
|
@@ -132,6 +131,14 @@ def get_or_set_last_reflex_version_check_datetime():
|
|
|
132
131
|
return last_version_check_datetime
|
|
133
132
|
|
|
134
133
|
|
|
134
|
+
def set_last_reflex_run_time():
|
|
135
|
+
"""Set the last Reflex run time."""
|
|
136
|
+
path_ops.update_json_file(
|
|
137
|
+
get_web_dir() / constants.Reflex.JSON,
|
|
138
|
+
{"last_reflex_run_datetime": str(datetime.now())},
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
|
|
135
142
|
def check_node_version() -> bool:
|
|
136
143
|
"""Check the version of Node.js.
|
|
137
144
|
|
|
@@ -192,7 +199,7 @@ def get_bun_version() -> version.Version | None:
|
|
|
192
199
|
"""
|
|
193
200
|
try:
|
|
194
201
|
# Run the bun -v command and capture the output
|
|
195
|
-
result = processes.new_process([get_config().bun_path, "-v"], run=True)
|
|
202
|
+
result = processes.new_process([str(get_config().bun_path), "-v"], run=True)
|
|
196
203
|
return version.parse(result.stdout) # type: ignore
|
|
197
204
|
except FileNotFoundError:
|
|
198
205
|
return None
|
|
@@ -217,7 +224,7 @@ def get_install_package_manager() -> str | None:
|
|
|
217
224
|
or windows_npm_escape_hatch()
|
|
218
225
|
):
|
|
219
226
|
return get_package_manager()
|
|
220
|
-
return get_config().bun_path
|
|
227
|
+
return str(get_config().bun_path)
|
|
221
228
|
|
|
222
229
|
|
|
223
230
|
def get_package_manager() -> str | None:
|
|
@@ -394,9 +401,7 @@ def validate_app_name(app_name: str | None = None) -> str:
|
|
|
394
401
|
Raises:
|
|
395
402
|
Exit: if the app directory name is reflex or if the name is not standard for a python package name.
|
|
396
403
|
"""
|
|
397
|
-
app_name = (
|
|
398
|
-
app_name if app_name else os.getcwd().split(os.path.sep)[-1].replace("-", "_")
|
|
399
|
-
)
|
|
404
|
+
app_name = app_name if app_name else Path.cwd().name.replace("-", "_")
|
|
400
405
|
# Make sure the app is not named "reflex".
|
|
401
406
|
if app_name.lower() == constants.Reflex.MODULE_NAME:
|
|
402
407
|
console.error(
|
|
@@ -430,7 +435,7 @@ def create_config(app_name: str):
|
|
|
430
435
|
|
|
431
436
|
|
|
432
437
|
def initialize_gitignore(
|
|
433
|
-
gitignore_file:
|
|
438
|
+
gitignore_file: Path = constants.GitIgnore.FILE,
|
|
434
439
|
files_to_ignore: set[str] = constants.GitIgnore.DEFAULTS,
|
|
435
440
|
):
|
|
436
441
|
"""Initialize the template .gitignore file.
|
|
@@ -441,9 +446,10 @@ def initialize_gitignore(
|
|
|
441
446
|
"""
|
|
442
447
|
# Combine with the current ignored files.
|
|
443
448
|
current_ignore: set[str] = set()
|
|
444
|
-
if
|
|
445
|
-
|
|
446
|
-
|
|
449
|
+
if gitignore_file.exists():
|
|
450
|
+
current_ignore |= set(
|
|
451
|
+
line.strip() for line in gitignore_file.read_text().splitlines()
|
|
452
|
+
)
|
|
447
453
|
|
|
448
454
|
if files_to_ignore == current_ignore:
|
|
449
455
|
console.debug(f"{gitignore_file} already up to date.")
|
|
@@ -451,9 +457,11 @@ def initialize_gitignore(
|
|
|
451
457
|
files_to_ignore |= current_ignore
|
|
452
458
|
|
|
453
459
|
# Write files to the .gitignore file.
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
460
|
+
gitignore_file.touch(exist_ok=True)
|
|
461
|
+
console.debug(f"Creating {gitignore_file}")
|
|
462
|
+
gitignore_file.write_text(
|
|
463
|
+
"\n".join(sorted(files_to_ignore)) + "\n",
|
|
464
|
+
)
|
|
457
465
|
|
|
458
466
|
|
|
459
467
|
def initialize_requirements_txt():
|
|
@@ -546,8 +554,8 @@ def initialize_app_directory(
|
|
|
546
554
|
# Rename the template app to the app name.
|
|
547
555
|
path_ops.mv(template_code_dir_name, app_name)
|
|
548
556
|
path_ops.mv(
|
|
549
|
-
|
|
550
|
-
|
|
557
|
+
Path(app_name) / (template_name + constants.Ext.PY),
|
|
558
|
+
Path(app_name) / (app_name + constants.Ext.PY),
|
|
551
559
|
)
|
|
552
560
|
|
|
553
561
|
# Fix up the imports.
|
|
@@ -691,7 +699,7 @@ def _update_next_config(
|
|
|
691
699
|
def remove_existing_bun_installation():
|
|
692
700
|
"""Remove existing bun installation."""
|
|
693
701
|
console.debug("Removing existing bun installation.")
|
|
694
|
-
if
|
|
702
|
+
if Path(get_config().bun_path).exists():
|
|
695
703
|
path_ops.rm(constants.Bun.ROOT_PATH)
|
|
696
704
|
|
|
697
705
|
|
|
@@ -731,7 +739,7 @@ def download_and_extract_fnm_zip():
|
|
|
731
739
|
# Download the zip file
|
|
732
740
|
url = constants.Fnm.INSTALL_URL
|
|
733
741
|
console.debug(f"Downloading {url}")
|
|
734
|
-
fnm_zip_file =
|
|
742
|
+
fnm_zip_file = constants.Fnm.DIR / f"{constants.Fnm.FILENAME}.zip"
|
|
735
743
|
# Function to download and extract the FNM zip release.
|
|
736
744
|
try:
|
|
737
745
|
# Download the FNM zip release.
|
|
@@ -770,7 +778,7 @@ def install_node():
|
|
|
770
778
|
return
|
|
771
779
|
|
|
772
780
|
path_ops.mkdir(constants.Fnm.DIR)
|
|
773
|
-
if not
|
|
781
|
+
if not constants.Fnm.EXE.exists():
|
|
774
782
|
download_and_extract_fnm_zip()
|
|
775
783
|
|
|
776
784
|
if constants.IS_WINDOWS:
|
|
@@ -827,7 +835,7 @@ def install_bun():
|
|
|
827
835
|
)
|
|
828
836
|
|
|
829
837
|
# Skip if bun is already installed.
|
|
830
|
-
if
|
|
838
|
+
if Path(get_config().bun_path).exists() and get_bun_version() == version.parse(
|
|
831
839
|
constants.Bun.VERSION
|
|
832
840
|
):
|
|
833
841
|
console.debug("Skipping bun installation as it is already installed.")
|
|
@@ -842,7 +850,7 @@ def install_bun():
|
|
|
842
850
|
f"irm {constants.Bun.WINDOWS_INSTALL_URL}|iex",
|
|
843
851
|
],
|
|
844
852
|
env={
|
|
845
|
-
"BUN_INSTALL": constants.Bun.ROOT_PATH,
|
|
853
|
+
"BUN_INSTALL": str(constants.Bun.ROOT_PATH),
|
|
846
854
|
"BUN_VERSION": constants.Bun.VERSION,
|
|
847
855
|
},
|
|
848
856
|
shell=True,
|
|
@@ -858,25 +866,26 @@ def install_bun():
|
|
|
858
866
|
download_and_run(
|
|
859
867
|
constants.Bun.INSTALL_URL,
|
|
860
868
|
f"bun-v{constants.Bun.VERSION}",
|
|
861
|
-
BUN_INSTALL=constants.Bun.ROOT_PATH,
|
|
869
|
+
BUN_INSTALL=str(constants.Bun.ROOT_PATH),
|
|
862
870
|
)
|
|
863
871
|
|
|
864
872
|
|
|
865
|
-
def _write_cached_procedure_file(payload: str, cache_file: str):
|
|
866
|
-
|
|
867
|
-
|
|
873
|
+
def _write_cached_procedure_file(payload: str, cache_file: str | Path):
|
|
874
|
+
cache_file = Path(cache_file)
|
|
875
|
+
cache_file.write_text(payload)
|
|
868
876
|
|
|
869
877
|
|
|
870
|
-
def _read_cached_procedure_file(cache_file: str) -> str | None:
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
878
|
+
def _read_cached_procedure_file(cache_file: str | Path) -> str | None:
|
|
879
|
+
cache_file = Path(cache_file)
|
|
880
|
+
if cache_file.exists():
|
|
881
|
+
return cache_file.read_text()
|
|
874
882
|
return None
|
|
875
883
|
|
|
876
884
|
|
|
877
|
-
def _clear_cached_procedure_file(cache_file: str):
|
|
878
|
-
|
|
879
|
-
|
|
885
|
+
def _clear_cached_procedure_file(cache_file: str | Path):
|
|
886
|
+
cache_file = Path(cache_file)
|
|
887
|
+
if cache_file.exists():
|
|
888
|
+
cache_file.unlink()
|
|
880
889
|
|
|
881
890
|
|
|
882
891
|
def cached_procedure(cache_file: str, payload_fn: Callable[..., str]):
|
|
@@ -977,7 +986,7 @@ def needs_reinit(frontend: bool = True) -> bool:
|
|
|
977
986
|
Raises:
|
|
978
987
|
Exit: If the app is not initialized.
|
|
979
988
|
"""
|
|
980
|
-
if not
|
|
989
|
+
if not constants.Config.FILE.exists():
|
|
981
990
|
console.error(
|
|
982
991
|
f"[cyan]{constants.Config.FILE}[/cyan] not found. Move to the root folder of your project, or run [bold]{constants.Reflex.MODULE_NAME} init[/bold] to start a new project."
|
|
983
992
|
)
|
|
@@ -988,7 +997,7 @@ def needs_reinit(frontend: bool = True) -> bool:
|
|
|
988
997
|
return False
|
|
989
998
|
|
|
990
999
|
# Make sure the .reflex directory exists.
|
|
991
|
-
if not
|
|
1000
|
+
if not constants.Reflex.DIR.exists():
|
|
992
1001
|
return True
|
|
993
1002
|
|
|
994
1003
|
# Make sure the .web directory exists in frontend mode.
|
|
@@ -1093,25 +1102,21 @@ def ensure_reflex_installation_id() -> Optional[int]:
|
|
|
1093
1102
|
"""
|
|
1094
1103
|
try:
|
|
1095
1104
|
initialize_reflex_user_directory()
|
|
1096
|
-
installation_id_file =
|
|
1105
|
+
installation_id_file = constants.Reflex.DIR / "installation_id"
|
|
1097
1106
|
|
|
1098
1107
|
installation_id = None
|
|
1099
|
-
if
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
installation_id = int(f.read())
|
|
1103
|
-
except Exception:
|
|
1108
|
+
if installation_id_file.exists():
|
|
1109
|
+
with contextlib.suppress(Exception):
|
|
1110
|
+
installation_id = int(installation_id_file.read_text())
|
|
1104
1111
|
# If anything goes wrong at all... just regenerate.
|
|
1105
1112
|
# Like what? Examples:
|
|
1106
1113
|
# - file not exists
|
|
1107
1114
|
# - file not readable
|
|
1108
1115
|
# - content not parseable as an int
|
|
1109
|
-
pass
|
|
1110
1116
|
|
|
1111
1117
|
if installation_id is None:
|
|
1112
1118
|
installation_id = random.getrandbits(128)
|
|
1113
|
-
|
|
1114
|
-
f.write(str(installation_id))
|
|
1119
|
+
installation_id_file.write_text(str(installation_id))
|
|
1115
1120
|
# If we get here, installation_id is definitely set
|
|
1116
1121
|
return installation_id
|
|
1117
1122
|
except Exception as e:
|
|
@@ -1205,50 +1210,6 @@ def prompt_for_template(templates: list[Template]) -> str:
|
|
|
1205
1210
|
return templates[int(template)].name
|
|
1206
1211
|
|
|
1207
1212
|
|
|
1208
|
-
def migrate_to_reflex():
|
|
1209
|
-
"""Migration from Pynecone to Reflex."""
|
|
1210
|
-
# Check if the old config file exists.
|
|
1211
|
-
if not os.path.exists(constants.Config.PREVIOUS_FILE):
|
|
1212
|
-
return
|
|
1213
|
-
|
|
1214
|
-
# Ask the user if they want to migrate.
|
|
1215
|
-
action = console.ask(
|
|
1216
|
-
"Pynecone project detected. Automatically upgrade to Reflex?",
|
|
1217
|
-
choices=["y", "n"],
|
|
1218
|
-
)
|
|
1219
|
-
if action == "n":
|
|
1220
|
-
return
|
|
1221
|
-
|
|
1222
|
-
# Rename pcconfig to rxconfig.
|
|
1223
|
-
console.log(
|
|
1224
|
-
f"[bold]Renaming {constants.Config.PREVIOUS_FILE} to {constants.Config.FILE}"
|
|
1225
|
-
)
|
|
1226
|
-
os.rename(constants.Config.PREVIOUS_FILE, constants.Config.FILE)
|
|
1227
|
-
|
|
1228
|
-
# Find all python files in the app directory.
|
|
1229
|
-
file_pattern = os.path.join(get_config().app_name, "**/*.py")
|
|
1230
|
-
file_list = glob.glob(file_pattern, recursive=True)
|
|
1231
|
-
|
|
1232
|
-
# Add the config file to the list of files to be migrated.
|
|
1233
|
-
file_list.append(constants.Config.FILE)
|
|
1234
|
-
|
|
1235
|
-
# Migrate all files.
|
|
1236
|
-
updates = {
|
|
1237
|
-
"Pynecone": "Reflex",
|
|
1238
|
-
"pynecone as pc": "reflex as rx",
|
|
1239
|
-
"pynecone.io": "reflex.dev",
|
|
1240
|
-
"pynecone": "reflex",
|
|
1241
|
-
"pc.": "rx.",
|
|
1242
|
-
"pcconfig": "rxconfig",
|
|
1243
|
-
}
|
|
1244
|
-
for file_path in file_list:
|
|
1245
|
-
with FileInput(file_path, inplace=True) as file:
|
|
1246
|
-
for line in file:
|
|
1247
|
-
for old, new in updates.items():
|
|
1248
|
-
line = line.replace(old, new)
|
|
1249
|
-
print(line, end="")
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
1213
|
def fetch_app_templates(version: str) -> dict[str, Template]:
|
|
1253
1214
|
"""Fetch a dict of templates from the templates repo using github API.
|
|
1254
1215
|
|
|
@@ -1401,7 +1362,7 @@ def initialize_app(app_name: str, template: str | None = None):
|
|
|
1401
1362
|
from reflex.utils import telemetry
|
|
1402
1363
|
|
|
1403
1364
|
# Check if the app is already initialized.
|
|
1404
|
-
if
|
|
1365
|
+
if constants.Config.FILE.exists():
|
|
1405
1366
|
telemetry.send("reinit")
|
|
1406
1367
|
return
|
|
1407
1368
|
|
reflex/utils/processes.py
CHANGED
|
@@ -156,7 +156,7 @@ def new_process(args, run: bool = False, show_logs: bool = False, **kwargs):
|
|
|
156
156
|
Raises:
|
|
157
157
|
Exit: When attempting to run a command with a None value.
|
|
158
158
|
"""
|
|
159
|
-
node_bin_path = path_ops.get_node_bin_path()
|
|
159
|
+
node_bin_path = str(path_ops.get_node_bin_path())
|
|
160
160
|
if not node_bin_path and not prerequisites.CURRENTLY_INSTALLING_NODE:
|
|
161
161
|
console.warn(
|
|
162
162
|
"The path to the Node binary could not be found. Please ensure that Node is properly "
|
|
@@ -167,7 +167,7 @@ def new_process(args, run: bool = False, show_logs: bool = False, **kwargs):
|
|
|
167
167
|
console.error(f"Invalid command: {args}")
|
|
168
168
|
raise typer.Exit(1)
|
|
169
169
|
# Add the node bin path to the PATH environment variable.
|
|
170
|
-
env = {
|
|
170
|
+
env: dict[str, str] = {
|
|
171
171
|
**os.environ,
|
|
172
172
|
"PATH": os.pathsep.join(
|
|
173
173
|
[node_bin_path if node_bin_path else "", os.environ["PATH"]]
|
reflex/vars/base.py
CHANGED
|
@@ -385,6 +385,15 @@ class Var(Generic[VAR_TYPE]):
|
|
|
385
385
|
Returns:
|
|
386
386
|
The converted var.
|
|
387
387
|
"""
|
|
388
|
+
from reflex.event import (
|
|
389
|
+
EventChain,
|
|
390
|
+
EventChainVar,
|
|
391
|
+
EventSpec,
|
|
392
|
+
EventVar,
|
|
393
|
+
ToEventChainVarOperation,
|
|
394
|
+
ToEventVarOperation,
|
|
395
|
+
)
|
|
396
|
+
|
|
388
397
|
from .function import FunctionVar, ToFunctionOperation
|
|
389
398
|
from .number import (
|
|
390
399
|
BooleanVar,
|
|
@@ -416,6 +425,10 @@ class Var(Generic[VAR_TYPE]):
|
|
|
416
425
|
return self.to(BooleanVar, output)
|
|
417
426
|
if fixed_output_type is None:
|
|
418
427
|
return ToNoneOperation.create(self)
|
|
428
|
+
if fixed_output_type is EventSpec:
|
|
429
|
+
return self.to(EventVar, output)
|
|
430
|
+
if fixed_output_type is EventChain:
|
|
431
|
+
return self.to(EventChainVar, output)
|
|
419
432
|
if issubclass(fixed_output_type, Base):
|
|
420
433
|
return self.to(ObjectVar, output)
|
|
421
434
|
if dataclasses.is_dataclass(fixed_output_type) and not issubclass(
|
|
@@ -453,10 +466,13 @@ class Var(Generic[VAR_TYPE]):
|
|
|
453
466
|
if issubclass(output, StringVar):
|
|
454
467
|
return ToStringOperation.create(self, var_type or str)
|
|
455
468
|
|
|
456
|
-
if issubclass(output,
|
|
457
|
-
return
|
|
469
|
+
if issubclass(output, EventVar):
|
|
470
|
+
return ToEventVarOperation.create(self, var_type or EventSpec)
|
|
458
471
|
|
|
459
|
-
if
|
|
472
|
+
if issubclass(output, EventChainVar):
|
|
473
|
+
return ToEventChainVarOperation.create(self, var_type or EventChain)
|
|
474
|
+
|
|
475
|
+
if issubclass(output, (ObjectVar, Base)):
|
|
460
476
|
return ToObjectOperation.create(self, var_type or dict)
|
|
461
477
|
|
|
462
478
|
if issubclass(output, FunctionVar):
|
|
@@ -469,6 +485,9 @@ class Var(Generic[VAR_TYPE]):
|
|
|
469
485
|
if issubclass(output, NoneVar):
|
|
470
486
|
return ToNoneOperation.create(self)
|
|
471
487
|
|
|
488
|
+
if dataclasses.is_dataclass(output):
|
|
489
|
+
return ToObjectOperation.create(self, var_type or dict)
|
|
490
|
+
|
|
472
491
|
# If we can't determine the first argument, we just replace the _var_type.
|
|
473
492
|
if not issubclass(output, Var) or var_type is None:
|
|
474
493
|
return dataclasses.replace(
|
|
@@ -494,6 +513,8 @@ class Var(Generic[VAR_TYPE]):
|
|
|
494
513
|
Raises:
|
|
495
514
|
TypeError: If the type is not supported for guessing.
|
|
496
515
|
"""
|
|
516
|
+
from reflex.event import EventChain, EventChainVar, EventSpec, EventVar
|
|
517
|
+
|
|
497
518
|
from .number import BooleanVar, NumberVar
|
|
498
519
|
from .object import ObjectVar
|
|
499
520
|
from .sequence import ArrayVar, StringVar
|
|
@@ -526,6 +547,10 @@ class Var(Generic[VAR_TYPE]):
|
|
|
526
547
|
|
|
527
548
|
return self
|
|
528
549
|
|
|
550
|
+
if fixed_type is Literal:
|
|
551
|
+
args = get_args(var_type)
|
|
552
|
+
fixed_type = unionize(*(type(arg) for arg in args))
|
|
553
|
+
|
|
529
554
|
if not inspect.isclass(fixed_type):
|
|
530
555
|
raise TypeError(f"Unsupported type {var_type} for guess_type.")
|
|
531
556
|
|
|
@@ -539,6 +564,10 @@ class Var(Generic[VAR_TYPE]):
|
|
|
539
564
|
return self.to(ArrayVar, self._var_type)
|
|
540
565
|
if issubclass(fixed_type, str):
|
|
541
566
|
return self.to(StringVar, self._var_type)
|
|
567
|
+
if issubclass(fixed_type, EventSpec):
|
|
568
|
+
return self.to(EventVar, self._var_type)
|
|
569
|
+
if issubclass(fixed_type, EventChain):
|
|
570
|
+
return self.to(EventChainVar, self._var_type)
|
|
542
571
|
if issubclass(fixed_type, Base):
|
|
543
572
|
return self.to(ObjectVar, self._var_type)
|
|
544
573
|
if dataclasses.is_dataclass(fixed_type):
|
|
@@ -1029,47 +1058,22 @@ class LiteralVar(Var):
|
|
|
1029
1058
|
if value is None:
|
|
1030
1059
|
return LiteralNoneVar.create(_var_data=_var_data)
|
|
1031
1060
|
|
|
1032
|
-
from reflex.event import
|
|
1061
|
+
from reflex.event import (
|
|
1062
|
+
EventChain,
|
|
1063
|
+
EventHandler,
|
|
1064
|
+
EventSpec,
|
|
1065
|
+
LiteralEventChainVar,
|
|
1066
|
+
LiteralEventVar,
|
|
1067
|
+
)
|
|
1033
1068
|
from reflex.utils.format import get_event_handler_parts
|
|
1034
1069
|
|
|
1035
|
-
from .function import ArgsFunctionOperation, FunctionStringVar
|
|
1036
1070
|
from .object import LiteralObjectVar
|
|
1037
1071
|
|
|
1038
1072
|
if isinstance(value, EventSpec):
|
|
1039
|
-
|
|
1040
|
-
".".join(filter(None, get_event_handler_parts(value.handler)))
|
|
1041
|
-
)
|
|
1042
|
-
event_args = LiteralVar.create(
|
|
1043
|
-
{str(name): value for name, value in value.args}
|
|
1044
|
-
)
|
|
1045
|
-
event_client_name = LiteralVar.create(value.client_handler_name)
|
|
1046
|
-
return FunctionStringVar("Event").call(
|
|
1047
|
-
event_name,
|
|
1048
|
-
event_args,
|
|
1049
|
-
*([event_client_name] if value.client_handler_name else []),
|
|
1050
|
-
)
|
|
1073
|
+
return LiteralEventVar.create(value, _var_data=_var_data)
|
|
1051
1074
|
|
|
1052
1075
|
if isinstance(value, EventChain):
|
|
1053
|
-
|
|
1054
|
-
if sig.parameters:
|
|
1055
|
-
arg_def = tuple((f"_{p}" for p in sig.parameters))
|
|
1056
|
-
arg_def_expr = LiteralVar.create([Var(_js_expr=arg) for arg in arg_def])
|
|
1057
|
-
else:
|
|
1058
|
-
# add a default argument for addEvents if none were specified in value.args_spec
|
|
1059
|
-
# used to trigger the preventDefault() on the event.
|
|
1060
|
-
arg_def = ("...args",)
|
|
1061
|
-
arg_def_expr = Var(_js_expr="args")
|
|
1062
|
-
|
|
1063
|
-
return ArgsFunctionOperation.create(
|
|
1064
|
-
arg_def,
|
|
1065
|
-
FunctionStringVar.create("addEvents").call(
|
|
1066
|
-
LiteralVar.create(
|
|
1067
|
-
[LiteralVar.create(event) for event in value.events]
|
|
1068
|
-
),
|
|
1069
|
-
arg_def_expr,
|
|
1070
|
-
LiteralVar.create(value.event_actions),
|
|
1071
|
-
),
|
|
1072
|
-
)
|
|
1076
|
+
return LiteralEventChainVar.create(value, _var_data=_var_data)
|
|
1073
1077
|
|
|
1074
1078
|
if isinstance(value, EventHandler):
|
|
1075
1079
|
return Var(_js_expr=".".join(filter(None, get_event_handler_parts(value))))
|
|
@@ -2126,9 +2130,16 @@ class NoneVar(Var[None]):
|
|
|
2126
2130
|
"""A var representing None."""
|
|
2127
2131
|
|
|
2128
2132
|
|
|
2133
|
+
@dataclasses.dataclass(
|
|
2134
|
+
eq=False,
|
|
2135
|
+
frozen=True,
|
|
2136
|
+
**{"slots": True} if sys.version_info >= (3, 10) else {},
|
|
2137
|
+
)
|
|
2129
2138
|
class LiteralNoneVar(LiteralVar, NoneVar):
|
|
2130
2139
|
"""A var representing None."""
|
|
2131
2140
|
|
|
2141
|
+
_var_value: None = None
|
|
2142
|
+
|
|
2132
2143
|
def json(self) -> str:
|
|
2133
2144
|
"""Serialize the var to a JSON string.
|
|
2134
2145
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
5
|
Home-page: https://reflex.dev
|
|
6
6
|
License: Apache-2.0
|
|
@@ -18,7 +18,6 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Requires-Dist: alembic (>=1.11.1,<2.0)
|
|
19
19
|
Requires-Dist: build (>=1.0.3,<2.0)
|
|
20
20
|
Requires-Dist: charset-normalizer (>=3.3.2,<4.0)
|
|
21
|
-
Requires-Dist: dill (>=0.3.8,<0.4)
|
|
22
21
|
Requires-Dist: distro (>=1.8.0,<2.0) ; sys_platform == "linux"
|
|
23
22
|
Requires-Dist: fastapi (>=0.96.0,!=0.111.0,!=0.111.1)
|
|
24
23
|
Requires-Dist: gunicorn (>=20.1.0,<24.0)
|
|
@@ -8,7 +8,7 @@ reflex/.templates/jinja/custom_components/demo_app.py.jinja2,sha256=ipbKtObNqQLc
|
|
|
8
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
|
-
reflex/.templates/jinja/web/pages/_app.js.jinja2,sha256=
|
|
11
|
+
reflex/.templates/jinja/web/pages/_app.js.jinja2,sha256=Tevlp-rQUdLgQ35cdBasfRMYVce1S10UsnyXqGSjxRI,1336
|
|
12
12
|
reflex/.templates/jinja/web/pages/_document.js.jinja2,sha256=E2r3MWp-gimAa6DdRs9ErQpPEyjS_yV5fdid_wdOOlA,182
|
|
13
13
|
reflex/.templates/jinja/web/pages/base_page.js.jinja2,sha256=-Jykv29ZqzsQyyRe_iR2gUD5ac-X5RhDrGs0-diOMOA,400
|
|
14
14
|
reflex/.templates/jinja/web/pages/component.js.jinja2,sha256=1Pui62uSL7LYA7FXZrh9ZmhKH8vHYu663eR134hhsAY,86
|
|
@@ -33,12 +33,12 @@ 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=hMh6Rhb5sbjIWmpNt47oceFKoCtV-i27gEwEXyXFMrw,27121
|
|
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
|
|
40
40
|
reflex/admin.py,sha256=_3pkkauMiTGJJ0kwAEBnsUWAgZZ_1WNnCaaObbhpmUI,374
|
|
41
|
-
reflex/app.py,sha256=
|
|
41
|
+
reflex/app.py,sha256=6sZstJ4FGNrpZ8tncISPZDYO9zDoJGJ_7f_zJZS-bc8,55390
|
|
42
42
|
reflex/app_mixins/__init__.py,sha256=Oegz3-gZLP9p2OAN5ALNbsgxuNQfS6lGZgQA8cc-9mQ,137
|
|
43
43
|
reflex/app_mixins/lifespan.py,sha256=JxBliX6WTZ1YbA5YdflDAMVJOvbbnCfuvmBI4GiRLgs,3096
|
|
44
44
|
reflex/app_mixins/middleware.py,sha256=6Yby_Uw1-J0K7NgPyh-X7tGGhmezn6D7-KsfABYAVBU,3130
|
|
@@ -46,9 +46,9 @@ reflex/app_mixins/mixin.py,sha256=wjudM02c-y1vV8aTNUUs9CsFta7pzXrvBqyEzXOW-g4,31
|
|
|
46
46
|
reflex/app_module_for_backend.py,sha256=Xr_JoKeX5Ks_EefejS6lRheMaPkiOlH_Xpzx9QNgAZw,1218
|
|
47
47
|
reflex/base.py,sha256=xFu4NyHOZj8jjMvYITmfu7j6PdA8Cv3PPMUs2CnV5y0,4137
|
|
48
48
|
reflex/compiler/__init__.py,sha256=r8jqmDSFf09iV2lHlNhfc9XrTLjNxfDNwPYlxS4cmHE,27
|
|
49
|
-
reflex/compiler/compiler.py,sha256=
|
|
49
|
+
reflex/compiler/compiler.py,sha256=yzI3RvjsU_0E4pcHeVKDhztrMsNcQI0rPcv28gtnheg,18520
|
|
50
50
|
reflex/compiler/templates.py,sha256=qY3qH7Z4oH_5i4nhMxffAFXbY6Fc9mEnCtlVP7uU7nU,4562
|
|
51
|
-
reflex/compiler/utils.py,sha256=
|
|
51
|
+
reflex/compiler/utils.py,sha256=7XAxmCFNKZdh4vlfEyoK4IF0qk3MN3kOYNGyNWgd8FI,14257
|
|
52
52
|
reflex/components/__init__.py,sha256=zbIXThv1WPI0FdIGf9G9RAmGoCRoGy7nHcSZ8K5D5bA,624
|
|
53
53
|
reflex/components/__init__.pyi,sha256=qoj1zIWaitcZOGcJ6k7wuGJk_GAJCE9Xtx8CeRVrvoE,861
|
|
54
54
|
reflex/components/base/__init__.py,sha256=QIOxOPT87WrSE4TSHAsZ-358VzvUXAe1w8vWogQ3Uuo,730
|
|
@@ -72,7 +72,7 @@ reflex/components/base/meta.py,sha256=GvcBACA4Q3ptW_EXdJ6Wpolhh0x6yMW7QsCasG3keb
|
|
|
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=zyFVFDoh-L_aO3J71wLH3QmxM7Hu3R3RmHYajZBUFPg,79321
|
|
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
|
|
@@ -101,7 +101,7 @@ reflex/components/datadisplay/code.pyi,sha256=i-HG0UEA8phNprpnnNCzVUNJHSUjKekQv1
|
|
|
101
101
|
reflex/components/datadisplay/dataeditor.py,sha256=qWQPV9qCpVuoH45msMEbcLdx6AEFPYTZwXZI5PMCox4,12553
|
|
102
102
|
reflex/components/datadisplay/dataeditor.pyi,sha256=BGh3JXtk56L3TvbA62EDJBRSgp4N8OW43K-w95hpPSg,11868
|
|
103
103
|
reflex/components/datadisplay/logo.py,sha256=r5DXm6C0b87J63iE_Pac5WZBAfu6gp8_OC_W3hLsc-o,1728
|
|
104
|
-
reflex/components/dynamic.py,sha256=
|
|
104
|
+
reflex/components/dynamic.py,sha256=FJnlG-zR2tStB_Hii9oQ8Nh5_KTUj6HcYvsaIRMbm10,6364
|
|
105
105
|
reflex/components/el/__init__.py,sha256=nfIjf_cyieEmxptKjA6wRjoongswXv4X3n6vDmsdarI,416
|
|
106
106
|
reflex/components/el/__init__.pyi,sha256=6bbu5zJhkcZjy6Jp9mZzO_d7YsSmVTRqNrTWyqjyF_8,9743
|
|
107
107
|
reflex/components/el/constants/__init__.py,sha256=9h2hdnOSltQLDEM6w1nGmv1B8Bf0tMquTCi5RhvBT6c,113
|
|
@@ -118,8 +118,8 @@ reflex/components/el/elements/forms.py,sha256=JZYI-NBZ6AjDivucrZh8IdiReWPkTaSVRG
|
|
|
118
118
|
reflex/components/el/elements/forms.pyi,sha256=B9xIjGTUo8dWyg87_y66W4LOUwwmJ4o0-MCCTkB9Ziw,91287
|
|
119
119
|
reflex/components/el/elements/inline.py,sha256=HEhU00pOFJP-xaWchXpxojk5P3ikgJTgUoqbxTsR8Ns,4090
|
|
120
120
|
reflex/components/el/elements/inline.pyi,sha256=8qcfcbLDuXM9iTqMJTAdStozS3OXITNa6ChMo-wl2Uw,151967
|
|
121
|
-
reflex/components/el/elements/media.py,sha256=
|
|
122
|
-
reflex/components/el/elements/media.pyi,sha256=
|
|
121
|
+
reflex/components/el/elements/media.py,sha256=8yPoNrHMW6TnkGndfLsrRLHaP_AH2iB981cKqOtpYGE,14754
|
|
122
|
+
reflex/components/el/elements/media.pyi,sha256=2obzC-REvfp1IqlqWhcpCWgOE8uddJmeN2-alYUFkcw,152969
|
|
123
123
|
reflex/components/el/elements/metadata.py,sha256=nCNK0EIrSxL_4fcxqGgTOM9AS0i8Y883l4VTWuc4teU,2598
|
|
124
124
|
reflex/components/el/elements/metadata.pyi,sha256=SG--GQwIWuEQB70kyGFTyvFevuwRbm1Pcridz9dTjEY,29405
|
|
125
125
|
reflex/components/el/elements/other.py,sha256=ty4GTsFYjVY7fCXnQbPocbMvy1RsCGp03IKylwklXr0,1727
|
|
@@ -307,7 +307,7 @@ reflex/components/recharts/polar.pyi,sha256=kLoLNDQF2wwJSOSDmogay0TcHAdU1sBvT3Ta
|
|
|
307
307
|
reflex/components/recharts/recharts.py,sha256=Krz2U0DNzr0Q_Z7Kuwr6_dFX8HdLpH6eBBwp29CdPq4,3433
|
|
308
308
|
reflex/components/recharts/recharts.pyi,sha256=-g6O15NFZ0K2LDx096Mat4izg0gUqSr3eNor_0f4XXk,8248
|
|
309
309
|
reflex/components/sonner/__init__.py,sha256=L_mdRIy7-ccRGSz5VK6J8O-c-e-D1p9xWw29_ErrvGg,68
|
|
310
|
-
reflex/components/sonner/toast.py,sha256=
|
|
310
|
+
reflex/components/sonner/toast.py,sha256=izChD8cgSIceNmuQyMOaakKATgorf31Hbc_k4UlwRuI,12064
|
|
311
311
|
reflex/components/sonner/toast.pyi,sha256=UmX8hAj_Tq7lKTPplIKmljGbJutISsrfulL0qwIgilw,8166
|
|
312
312
|
reflex/components/suneditor/__init__.py,sha256=htkPzy0O_1ro1nw8w8gFPjYhg5xywMpsUfc4Dl3OHuw,109
|
|
313
313
|
reflex/components/suneditor/editor.py,sha256=Qode9LeucEZPFMClH4or64FvtO4q8z2p24P2sEY2FdM,7530
|
|
@@ -318,20 +318,20 @@ reflex/components/tags/iter_tag.py,sha256=3xWW5CTMSB18fKK103FKaCdZITM-IT4ZV27QCZ
|
|
|
318
318
|
reflex/components/tags/match_tag.py,sha256=mqQF6fHhOSGSMdiaJ7YlwXSMhRtDmmIBu1Gw-VQQ324,586
|
|
319
319
|
reflex/components/tags/tag.py,sha256=_4uQZ8ACy-SSaT27F60G8MffZZ8hNpVOkPy1RnVjlFY,3166
|
|
320
320
|
reflex/components/tags/tagless.py,sha256=qO7Gm4V0ITDyymHkyltfz53155ZBt-W_WIPDYy93ca0,587
|
|
321
|
-
reflex/config.py,sha256=
|
|
321
|
+
reflex/config.py,sha256=6FrD2hi0ttsnI-OLyG9T9NNc2p5bYVyIHXBq-1fxhWo,12044
|
|
322
322
|
reflex/constants/__init__.py,sha256=ICWLo-8TEu_HuMqy-dXdw3Zi7NYbA7ZvHmWGpt3L_VY,2030
|
|
323
|
-
reflex/constants/base.py,sha256
|
|
323
|
+
reflex/constants/base.py,sha256=659ThS_PET2gEAR2ceyJQrNI4gfMr32j3Bu9hH5NNj8,6759
|
|
324
324
|
reflex/constants/colors.py,sha256=gab_GwjKcbpRJGS2zX0gkmc_yFT1nmQbFDHqx0mXKB0,1625
|
|
325
325
|
reflex/constants/compiler.py,sha256=Nool-szUS4fMEvEZx829sCyOw2g7f__RCfd1rNcAtec,4933
|
|
326
|
-
reflex/constants/config.py,sha256=
|
|
327
|
-
reflex/constants/custom_components.py,sha256=
|
|
326
|
+
reflex/constants/config.py,sha256=dVmZj4KTmlrUAgPuemV7bMVtJG1kbEXN0l4ku2ebToo,1440
|
|
327
|
+
reflex/constants/custom_components.py,sha256=44zuPcK90-ivRqzJtZEmdMhvCsFquZmGJ_Qf2DkISMA,1311
|
|
328
328
|
reflex/constants/event.py,sha256=1gKAwNoYyvZs3vNvfynF0SeFWnRGXZX0A_2iPhqUyu8,2818
|
|
329
|
-
reflex/constants/installer.py,sha256=
|
|
329
|
+
reflex/constants/installer.py,sha256=XamyG7xDBVDg1sx1_EToQYHXeoEoK3-XbStX9Rd3Qv8,3651
|
|
330
330
|
reflex/constants/route.py,sha256=fu1jp9MoIriUJ8Cu4gLeinTxkyVBbRPs8Bkt35vqYOM,2144
|
|
331
331
|
reflex/constants/style.py,sha256=sJ6LuPY1OWemwMXnI1Htm-pa087HWT6PWljUeyokcUI,474
|
|
332
332
|
reflex/custom_components/__init__.py,sha256=R4zsvOi4dfPmHc18KEphohXnQFBPnUCb50cMR5hSLDE,36
|
|
333
|
-
reflex/custom_components/custom_components.py,sha256=
|
|
334
|
-
reflex/event.py,sha256=
|
|
333
|
+
reflex/custom_components/custom_components.py,sha256=jju21QgdM8mkpMfaboTwEPYASsvb46yvGt53seMI6pg,33000
|
|
334
|
+
reflex/event.py,sha256=cVvsiKBQnL8-UjFmiVtEaZXbmYgx6YkuT-4bTEiI8fE,38139
|
|
335
335
|
reflex/experimental/__init__.py,sha256=usDkf5yRMHKHjdRa_KfedFeD-urOMAKBuNfsghzvre4,1974
|
|
336
336
|
reflex/experimental/assets.py,sha256=GZRdfIs03HXCSShyvdztu6vFsJ9Z8W4ZFCjJGZrNURY,1837
|
|
337
337
|
reflex/experimental/client_state.py,sha256=dHq5Denp9vJs70j_cZws9XLeGX749GsiL7YLdbL5Ovo,7903
|
|
@@ -339,31 +339,32 @@ reflex/experimental/hooks.py,sha256=fHYD4rX_f7T38gsFDqglD9E29FjPLf6jO1rN39DX7XM,
|
|
|
339
339
|
reflex/experimental/layout.py,sha256=talXPlKuRzJFNGoyc3ATEaJg7_Z4jgTAAXiTi29STWs,7586
|
|
340
340
|
reflex/experimental/layout.pyi,sha256=ziRPPYXnSf_DKNCIKHdcJVOxjqzDrjm1QwN9idrQ7eE,18075
|
|
341
341
|
reflex/experimental/misc.py,sha256=B_3M9vymMv3dMCPYWnMTnnqkJ0I0QhrsB5FkS7swbZc,685
|
|
342
|
+
reflex/istate/data.py,sha256=HhvF9ijuohutfCOTZFdKzk9QvfnYxn33o_tbbtqiXBA,4321
|
|
342
343
|
reflex/middleware/__init__.py,sha256=x7xTeDuc73Hjj43k1J63naC9x8vzFxl4sq7cCFBX7sk,111
|
|
343
344
|
reflex/middleware/hydrate_middleware.py,sha256=KvFppl4ca75bsjos5boy8EGwsRBZ9jI6ZHCm8J3Lt14,1485
|
|
344
345
|
reflex/middleware/middleware.py,sha256=9eASK3MrbK1AvT2Sx5GFxXNwSuNW8_LTRGvPY1JccU4,1171
|
|
345
|
-
reflex/model.py,sha256=
|
|
346
|
+
reflex/model.py,sha256=I102SQwtUaidue0JZLJD3QJRoTPYvqKaT7U9yKUIH9s,14176
|
|
346
347
|
reflex/page.py,sha256=25dKsOqVcY1Pz05T0gjUEk8zKHcfyd1c0nYIXW7jY5A,2332
|
|
347
|
-
reflex/reflex.py,sha256=
|
|
348
|
+
reflex/reflex.py,sha256=qlyEkg5ZqaYpKalNf2QIsAiPBIuQCxIyPjLCSedAUpU,18793
|
|
348
349
|
reflex/route.py,sha256=WZS7stKgO94nekFFYHaOqNgN3zZGpJb3YpGF4ViTHmw,4198
|
|
349
|
-
reflex/state.py,sha256=
|
|
350
|
+
reflex/state.py,sha256=LNjDJUs2KzwR2NxgV7zj81w-USQ-oBy727WeFbyFRVU,127583
|
|
350
351
|
reflex/style.py,sha256=MxZyxvU0g6Vf_kWhsD5RFJRD6NjmJgfrlOclc53lSIw,12487
|
|
351
352
|
reflex/testing.py,sha256=Iy_0AlpKXsLJINz02bb4u_I6TYAVs24a1TbhOGQ8PV8,34762
|
|
352
353
|
reflex/utils/__init__.py,sha256=y-AHKiRQAhk2oAkvn7W8cRVTZVK625ff8tTwvZtO7S4,24
|
|
353
|
-
reflex/utils/build.py,sha256=
|
|
354
|
+
reflex/utils/build.py,sha256=llkaIPC9o-SIY83ThUMEDIDpWaCDpaUNJdog0u_5tPM,8632
|
|
354
355
|
reflex/utils/codespaces.py,sha256=tKmju4aGzDMPy76_eQSzJd3RYmVmiiNZy3Yc0e3zG_w,2856
|
|
355
|
-
reflex/utils/compat.py,sha256=
|
|
356
|
+
reflex/utils/compat.py,sha256=UXQxiPL4aJRcqZigr_syJEp_JaTs6VZHkl5ofst0tF4,2563
|
|
356
357
|
reflex/utils/console.py,sha256=H6x6oUIT4T1ndfWaXRtr8jS1WcD71yo3m8JQbC-y-Qc,5481
|
|
357
|
-
reflex/utils/exceptions.py,sha256=
|
|
358
|
-
reflex/utils/exec.py,sha256=
|
|
358
|
+
reflex/utils/exceptions.py,sha256=exOZJ8WLo-aXcXQQ_E3bohifO1axBMqp2DsF2Rolhpc,3995
|
|
359
|
+
reflex/utils/exec.py,sha256=4n6UpvxDIWgO5qx6ZwIBh9g3lFerIA6ytsINMJG2bBM,14934
|
|
359
360
|
reflex/utils/export.py,sha256=3dI9QjoU0ZA_g8OSQipVLpFWQcxWa_sHkpezWemvWbo,2366
|
|
360
|
-
reflex/utils/format.py,sha256=
|
|
361
|
+
reflex/utils/format.py,sha256=efoLb3ms_wG56hrz52ZR_Rc7azPfZc5oQ105Rio6g68,20491
|
|
361
362
|
reflex/utils/imports.py,sha256=DMyHT1f6VtnuKidnqCXsxNb-gVjVHTSAGwsYl-6HnmE,3623
|
|
362
363
|
reflex/utils/lazy_loader.py,sha256=utVpUjKcz32GC1I7g0g7OlTyvVoZNFcuAjNtnxiSYww,1282
|
|
363
364
|
reflex/utils/net.py,sha256=UFCfaOjvRDVLTeTzLKJ5iDAWtPNuhng5gOs-pIMYQek,1267
|
|
364
|
-
reflex/utils/path_ops.py,sha256=
|
|
365
|
-
reflex/utils/prerequisites.py,sha256=
|
|
366
|
-
reflex/utils/processes.py,sha256=
|
|
365
|
+
reflex/utils/path_ops.py,sha256=Yem1eEd_4zARzB5W8UjsMsbCb8H6Qzp2l74RD3s-EXw,6135
|
|
366
|
+
reflex/utils/prerequisites.py,sha256=Po3CULa6yngSYetercfOIyDBVmEdIKLvg0nrvuWPn6U,52794
|
|
367
|
+
reflex/utils/processes.py,sha256=wBvkxHUnuo28nFNSIyx53RpiNUa08bmvWQxpx8LWQhk,13249
|
|
367
368
|
reflex/utils/pyi_generator.py,sha256=n9GpxSOeTvIH2pJHd748TUbD0bZgoqEJCxXLD5aAjvQ,34574
|
|
368
369
|
reflex/utils/redir.py,sha256=B0K9m6ejDW0ABeclBb4AsRRORvx_stCTWsrDe1YvkzY,1679
|
|
369
370
|
reflex/utils/registry.py,sha256=NKtd1ewsu0_p-FoD0pmLWCEzRrm_6t4Lis8Erip3w4g,1161
|
|
@@ -371,13 +372,13 @@ reflex/utils/serializers.py,sha256=v377C_EcuAyrt6RddAijVXDnTdO0k3pLlXzQ-NfhdBg,1
|
|
|
371
372
|
reflex/utils/telemetry.py,sha256=zyy-bQjf18qQM-iTACIA9T7VBWRpm-DNES7iNJLrieo,5596
|
|
372
373
|
reflex/utils/types.py,sha256=ByFCOk3WNvTuijj8foyGIdslRsMXb0oNHP3Tgw0RkPE,19043
|
|
373
374
|
reflex/vars/__init__.py,sha256=OdCzmDFGMbCoy5VN4xQ3DaLpHck7npuLz7OUYvsN6Xw,1128
|
|
374
|
-
reflex/vars/base.py,sha256=
|
|
375
|
+
reflex/vars/base.py,sha256=ImF4jkQnD-qA_0-Md1yU5sFN5InIz_EuzKCd1DEO8Go,85824
|
|
375
376
|
reflex/vars/function.py,sha256=GjTGRjDhMRACSPBIGNYgQzjKI2WgfhSluAWCm1mJQnU,5478
|
|
376
377
|
reflex/vars/number.py,sha256=U9n61-zBIIPUDNy_exbvXuuJraCYmD489gjeU2OwAis,28091
|
|
377
378
|
reflex/vars/object.py,sha256=wOq74_nDNAhqgT21HkHGfRukGdLjWoLprHjFNy1hjy8,14988
|
|
378
379
|
reflex/vars/sequence.py,sha256=SCtuo4Nohsfg5y-r5RyyYYThNIk9znkPUC_bLg5XGd8,45881
|
|
379
|
-
reflex-0.6.
|
|
380
|
-
reflex-0.6.
|
|
381
|
-
reflex-0.6.
|
|
382
|
-
reflex-0.6.
|
|
383
|
-
reflex-0.6.
|
|
380
|
+
reflex-0.6.2.dist-info/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
|
|
381
|
+
reflex-0.6.2.dist-info/METADATA,sha256=HKqWw57mDzYmoxjh-Hyta4HjzF1d2w6PAAH_Jn-McNU,11978
|
|
382
|
+
reflex-0.6.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
383
|
+
reflex-0.6.2.dist-info/entry_points.txt,sha256=H1Z5Yat_xJfy0dRT1Frk2PkO_p41Xy7fCKlj4FcdL9o,44
|
|
384
|
+
reflex-0.6.2.dist-info/RECORD,,
|
|
File without changes
|