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.

@@ -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: str = constants.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 os.path.exists(gitignore_file):
445
- with open(gitignore_file, "r") as f:
446
- current_ignore |= set([line.strip() for line in f.readlines()])
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
- with open(gitignore_file, "w", newline="\n") as f:
455
- console.debug(f"Creating {gitignore_file}")
456
- f.write(f"{(path_ops.join(sorted(files_to_ignore))).lstrip()}\n")
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
- os.path.join(app_name, template_name + constants.Ext.PY),
550
- os.path.join(app_name, app_name + constants.Ext.PY),
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 os.path.exists(get_config().bun_path):
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 = os.path.join(constants.Fnm.DIR, f"{constants.Fnm.FILENAME}.zip")
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 os.path.exists(constants.Fnm.EXE):
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 os.path.exists(get_config().bun_path) and get_bun_version() == version.parse(
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
- with open(cache_file, "w") as f:
867
- f.write(payload)
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
- if os.path.exists(cache_file):
872
- with open(cache_file, "r") as f:
873
- return f.read()
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
- if os.path.exists(cache_file):
879
- os.remove(cache_file)
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 os.path.exists(constants.Config.FILE):
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 os.path.exists(constants.Reflex.DIR):
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 = os.path.join(constants.Reflex.DIR, "installation_id")
1105
+ installation_id_file = constants.Reflex.DIR / "installation_id"
1097
1106
 
1098
1107
  installation_id = None
1099
- if os.path.exists(installation_id_file):
1100
- try:
1101
- with open(installation_id_file, "r") as f:
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
- with open(installation_id_file, "w") as f:
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 os.path.exists(constants.Config.FILE):
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, (ObjectVar, Base)):
457
- return ToObjectOperation.create(self, var_type or dict)
469
+ if issubclass(output, EventVar):
470
+ return ToEventVarOperation.create(self, var_type or EventSpec)
458
471
 
459
- if dataclasses.is_dataclass(output):
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 EventChain, EventHandler, EventSpec
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
- event_name = LiteralVar.create(
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
- sig = inspect.signature(value.args_spec) # type: ignore
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.1a1
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=g8H4ZBx7sxnq4KvC-6xk37lUDWOgaL3CFvWg5Bo4AzI,1396
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=4mpTICkfkBliRBKrnHESMuwTjBs86LQ7du6rHUkQt2E,26819
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=TDSQ-yA6g9BKaex4OLVCzyM05gQN9J8K7q6z5FXEuko,56062
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=72QhapNEw8y2q2B9n4RQVLlAaX50eqZF9nVDPX8dM9k,17872
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=jduR7aCzoAYkXvuSxvEeVhJw551KN5Mogl_a1TUnBys,14275
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=UYWMi8dNDFQ6FkEzPqf46GRqiXXcrnc4d3QEH2zIS90,78718
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=izCLgx8CdxKI0UyIr3V16Iy6aByf_HcNq9BTezZ9PyE,5495
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=BLeYGIWsozLjiyYNnBwPMFyO32IjDBir_Czldf-gsX0,11868
122
- reflex/components/el/elements/media.pyi,sha256=Agu0-nuFTtphoTsXpiZTTAvPZbfs_Gkd2oQ3cfzfO-Y,127735
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=id3F-AdgBw99Fl73ibUjRNRQ2byCbM15KuxGUXDY9PY,12078
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=EzaUsKAM_Cyfl5TAw3_uMi9Ri1r6Gv_bHGfGB6tKpsk,11999
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=-kRjZu0TXEKwMfnUxXE0NI-kItOqhMerD8bgDjikbKo,6555
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=1ocFCpfKmCo8UPpeSSqjt45-bmjvl1nFgeAY2pBs7so,1475
327
- reflex/constants/custom_components.py,sha256=SX0SQVb-d6HJkZdezFL4UgkumyF6eJF682y4OvRUqUM,1268
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=1s7T7dpxBfe7p9ckkraE-UiNbGcNkAVMwibwI8I7gt8,3751
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=1f9FzCR4EQ5t25pFLHrItV4_TN0XUAK7L49kpRHQMRs,33141
334
- reflex/event.py,sha256=4-kfvkCE8lrdr57mMcCq2EACLZmJvi6Oyh1eyv7z1qs,32574
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=dWeHeTaGzzrtW6LbbErP-xSDDougnrMKUR90gRoPML4,14173
346
+ reflex/model.py,sha256=I102SQwtUaidue0JZLJD3QJRoTPYvqKaT7U9yKUIH9s,14176
346
347
  reflex/page.py,sha256=25dKsOqVcY1Pz05T0gjUEk8zKHcfyd1c0nYIXW7jY5A,2332
347
- reflex/reflex.py,sha256=q_4rWKFpyFpRO_FTB-hYNlmpEz0UT2WrtYRSXVJx8iw,19040
348
+ reflex/reflex.py,sha256=qlyEkg5ZqaYpKalNf2QIsAiPBIuQCxIyPjLCSedAUpU,18793
348
349
  reflex/route.py,sha256=WZS7stKgO94nekFFYHaOqNgN3zZGpJb3YpGF4ViTHmw,4198
349
- reflex/state.py,sha256=ekErR7HcmBE8nlRTmDMmY_n2oe0u-peGeaoW_j-EuDA,128972
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=DJryIUJ_3DV2nn4pZ9SiV60lwIGYPZWgYw9prsQXrKA,8482
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=ty_8eOifMjg9oVOWGHCu5cACu9iqw5_ZEOkTRck7B94,2012
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=OcqFFJwJe9fOf5nVpaBIjtsuHrMb49AulnlcjRdTHOg,3571
358
- reflex/utils/exec.py,sha256=7pMWuy3CEYbVyX0wkhetEHl0IVPsn-w_8iOxxdlSVVg,14918
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=MZY7aFp8QesdOkivXTm5q7bM3b3j1fASkU53t5eh7L0,21137
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=I5Zw0YjEbBF_3g7tQg_uotUVZ-eb1nSLqTzJVCJ22xY,6148
365
- reflex/utils/prerequisites.py,sha256=_xJitMuWOyJtQBytjJ3h3adHnKUEEGDqqa-0qgUGWmU,54141
366
- reflex/utils/processes.py,sha256=y8X5PxycEWT1ItLtpIS-rzrUvNQ9MUOkHdIg_zK9Vp0,13228
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=rDhb5Xi1c38tre2zIc876zPv2z-Ed7_YfETZt1cd0UI,85896
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.1a1.dist-info/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
380
- reflex-0.6.1a1.dist-info/METADATA,sha256=BAQ_L4Fqxt2QpzE0Ne9wcXHm9fm1Q8y2Z77M6HCtPms,12015
381
- reflex-0.6.1a1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
382
- reflex-0.6.1a1.dist-info/entry_points.txt,sha256=H1Z5Yat_xJfy0dRT1Frk2PkO_p41Xy7fCKlj4FcdL9o,44
383
- reflex-0.6.1a1.dist-info/RECORD,,
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,,