reflex 0.8.14a2__py3-none-any.whl → 0.8.15a0__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/__init__.py +1 -1
- reflex/__init__.pyi +2 -1
- reflex/app.py +5 -2
- reflex/base.py +61 -33
- reflex/components/datadisplay/dataeditor.py +17 -2
- reflex/components/datadisplay/dataeditor.pyi +6 -2
- reflex/components/lucide/icon.py +2 -1
- reflex/components/lucide/icon.pyi +2 -1
- reflex/components/sonner/toast.py +3 -2
- reflex/components/sonner/toast.pyi +3 -2
- reflex/constants/installer.py +3 -3
- reflex/environment.py +9 -1
- reflex/experimental/client_state.py +1 -1
- reflex/istate/proxy.py +35 -24
- reflex/model.py +530 -511
- reflex/plugins/tailwind_v4.py +2 -2
- reflex/reflex.py +16 -10
- reflex/state.py +21 -25
- reflex/testing.py +8 -6
- reflex/utils/build.py +11 -1
- reflex/utils/compat.py +11 -56
- reflex/utils/prerequisites.py +2 -1
- reflex/utils/serializers.py +21 -20
- reflex/utils/telemetry.py +0 -2
- reflex/utils/types.py +81 -90
- reflex/vars/base.py +2 -16
- reflex/vars/object.py +28 -1
- {reflex-0.8.14a2.dist-info → reflex-0.8.15a0.dist-info}/METADATA +5 -1
- {reflex-0.8.14a2.dist-info → reflex-0.8.15a0.dist-info}/RECORD +32 -32
- {reflex-0.8.14a2.dist-info → reflex-0.8.15a0.dist-info}/WHEEL +0 -0
- {reflex-0.8.14a2.dist-info → reflex-0.8.15a0.dist-info}/entry_points.txt +0 -0
- {reflex-0.8.14a2.dist-info → reflex-0.8.15a0.dist-info}/licenses/LICENSE +0 -0
reflex/utils/types.py
CHANGED
|
@@ -8,6 +8,7 @@ import types
|
|
|
8
8
|
from collections.abc import Callable, Iterable, Mapping, Sequence
|
|
9
9
|
from enum import Enum
|
|
10
10
|
from functools import cached_property, lru_cache
|
|
11
|
+
from importlib.util import find_spec
|
|
11
12
|
from types import GenericAlias
|
|
12
13
|
from typing import ( # noqa: UP035
|
|
13
14
|
TYPE_CHECKING,
|
|
@@ -33,7 +34,6 @@ from typing import ( # noqa: UP035
|
|
|
33
34
|
from typing import get_origin as get_origin_og
|
|
34
35
|
from typing import get_type_hints as get_type_hints_og
|
|
35
36
|
|
|
36
|
-
from pydantic.v1.fields import ModelField
|
|
37
37
|
from typing_extensions import Self as Self
|
|
38
38
|
from typing_extensions import override as override
|
|
39
39
|
|
|
@@ -346,33 +346,6 @@ def is_classvar(a_type: Any) -> bool:
|
|
|
346
346
|
)
|
|
347
347
|
|
|
348
348
|
|
|
349
|
-
def true_type_for_pydantic_field(f: ModelField):
|
|
350
|
-
"""Get the type for a pydantic field.
|
|
351
|
-
|
|
352
|
-
Args:
|
|
353
|
-
f: The field to get the type for.
|
|
354
|
-
|
|
355
|
-
Returns:
|
|
356
|
-
The type for the field.
|
|
357
|
-
"""
|
|
358
|
-
if not isinstance(f.annotation, (str, ForwardRef)):
|
|
359
|
-
return f.annotation
|
|
360
|
-
|
|
361
|
-
type_ = f.outer_type_
|
|
362
|
-
|
|
363
|
-
if (
|
|
364
|
-
f.field_info.default is None
|
|
365
|
-
or (isinstance(f.annotation, str) and f.annotation.startswith("Optional"))
|
|
366
|
-
or (
|
|
367
|
-
isinstance(f.annotation, ForwardRef)
|
|
368
|
-
and f.annotation.__forward_arg__.startswith("Optional")
|
|
369
|
-
)
|
|
370
|
-
) and not is_optional(type_):
|
|
371
|
-
return type_ | None
|
|
372
|
-
|
|
373
|
-
return type_
|
|
374
|
-
|
|
375
|
-
|
|
376
349
|
def value_inside_optional(cls: GenericType) -> GenericType:
|
|
377
350
|
"""Get the value inside an Optional type or the original type.
|
|
378
351
|
|
|
@@ -412,6 +385,13 @@ def get_field_type(cls: GenericType, field_name: str) -> GenericType | None:
|
|
|
412
385
|
return type_hints.get(field_name, None)
|
|
413
386
|
|
|
414
387
|
|
|
388
|
+
PROPERTY_CLASSES = (property,)
|
|
389
|
+
if find_spec("sqlalchemy") and find_spec("sqlalchemy.ext"):
|
|
390
|
+
from sqlalchemy.ext.hybrid import hybrid_property
|
|
391
|
+
|
|
392
|
+
PROPERTY_CLASSES += (hybrid_property,)
|
|
393
|
+
|
|
394
|
+
|
|
415
395
|
def get_property_hint(attr: Any | None) -> GenericType | None:
|
|
416
396
|
"""Check if an attribute is a property and return its type hint.
|
|
417
397
|
|
|
@@ -421,9 +401,7 @@ def get_property_hint(attr: Any | None) -> GenericType | None:
|
|
|
421
401
|
Returns:
|
|
422
402
|
The type hint of the property, if it is a property, else None.
|
|
423
403
|
"""
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
if not isinstance(attr, (property, hybrid_property)):
|
|
404
|
+
if not isinstance(attr, PROPERTY_CLASSES):
|
|
427
405
|
return None
|
|
428
406
|
hints = get_type_hints(attr.fget)
|
|
429
407
|
return hints.get("return", None)
|
|
@@ -441,12 +419,6 @@ def get_attribute_access_type(cls: GenericType, name: str) -> GenericType | None
|
|
|
441
419
|
Returns:
|
|
442
420
|
The type of the attribute, if accessible, or None
|
|
443
421
|
"""
|
|
444
|
-
import sqlalchemy
|
|
445
|
-
from sqlalchemy.ext.associationproxy import AssociationProxyInstance
|
|
446
|
-
from sqlalchemy.orm import DeclarativeBase, Mapped, QueryableAttribute, Relationship
|
|
447
|
-
|
|
448
|
-
from reflex.model import Model
|
|
449
|
-
|
|
450
422
|
try:
|
|
451
423
|
attr = getattr(cls, name, None)
|
|
452
424
|
except NotImplementedError:
|
|
@@ -458,67 +430,86 @@ def get_attribute_access_type(cls: GenericType, name: str) -> GenericType | None
|
|
|
458
430
|
if hasattr(cls, "__fields__") and name in cls.__fields__:
|
|
459
431
|
# pydantic models
|
|
460
432
|
return get_field_type(cls, name)
|
|
461
|
-
if
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
type_ =
|
|
433
|
+
if find_spec("sqlalchemy") and find_spec("sqlalchemy.orm"):
|
|
434
|
+
import sqlalchemy
|
|
435
|
+
from sqlalchemy.ext.associationproxy import AssociationProxyInstance
|
|
436
|
+
from sqlalchemy.orm import (
|
|
437
|
+
DeclarativeBase,
|
|
438
|
+
Mapped,
|
|
439
|
+
QueryableAttribute,
|
|
440
|
+
Relationship,
|
|
441
|
+
)
|
|
442
|
+
|
|
443
|
+
from reflex.model import Model
|
|
444
|
+
|
|
445
|
+
if isinstance(cls, type) and issubclass(cls, DeclarativeBase):
|
|
446
|
+
insp = sqlalchemy.inspect(cls)
|
|
447
|
+
if name in insp.columns:
|
|
448
|
+
# check for list types
|
|
449
|
+
column = insp.columns[name]
|
|
450
|
+
column_type = column.type
|
|
451
|
+
try:
|
|
452
|
+
type_ = insp.columns[name].type.python_type
|
|
453
|
+
except NotImplementedError:
|
|
454
|
+
type_ = None
|
|
455
|
+
if type_ is not None:
|
|
456
|
+
if hasattr(column_type, "item_type"):
|
|
457
|
+
try:
|
|
458
|
+
item_type = column_type.item_type.python_type # pyright: ignore [reportAttributeAccessIssue]
|
|
459
|
+
except NotImplementedError:
|
|
460
|
+
item_type = None
|
|
461
|
+
if item_type is not None:
|
|
462
|
+
if type_ in PrimitiveToAnnotation:
|
|
463
|
+
type_ = PrimitiveToAnnotation[type_]
|
|
464
|
+
type_ = type_[item_type] # pyright: ignore [reportIndexIssue]
|
|
465
|
+
if hasattr(column, "nullable") and column.nullable:
|
|
466
|
+
type_ = type_ | None
|
|
467
|
+
return type_
|
|
468
|
+
if name in insp.all_orm_descriptors:
|
|
469
|
+
descriptor = insp.all_orm_descriptors[name]
|
|
470
|
+
if hint := get_property_hint(descriptor):
|
|
471
|
+
return hint
|
|
472
|
+
if isinstance(descriptor, QueryableAttribute):
|
|
473
|
+
prop = descriptor.property
|
|
474
|
+
if isinstance(prop, Relationship):
|
|
475
|
+
type_ = prop.mapper.class_
|
|
476
|
+
# TODO: check for nullable?
|
|
477
|
+
return list[type_] if prop.uselist else type_ | None
|
|
478
|
+
if isinstance(attr, AssociationProxyInstance):
|
|
479
|
+
return list[
|
|
480
|
+
get_attribute_access_type(
|
|
481
|
+
attr.target_class,
|
|
482
|
+
attr.remote_attr.key, # pyright: ignore [reportAttributeAccessIssue]
|
|
483
|
+
)
|
|
484
|
+
]
|
|
485
|
+
elif (
|
|
486
|
+
isinstance(cls, type)
|
|
487
|
+
and not is_generic_alias(cls)
|
|
488
|
+
and issubclass(cls, Model)
|
|
489
|
+
):
|
|
490
|
+
# Check in the annotations directly (for sqlmodel.Relationship)
|
|
491
|
+
hints = get_type_hints(cls) # pyright: ignore [reportArgumentType]
|
|
492
|
+
if name in hints:
|
|
493
|
+
type_ = hints[name]
|
|
494
|
+
type_origin = get_origin(type_)
|
|
495
|
+
if isinstance(type_origin, type) and issubclass(type_origin, Mapped):
|
|
496
|
+
return get_args(type_)[0] # SQLAlchemy v2
|
|
497
|
+
if find_spec("pydantic"):
|
|
498
|
+
from pydantic.v1.fields import ModelField
|
|
499
|
+
|
|
500
|
+
if isinstance(type_, ModelField):
|
|
501
|
+
return type_.type_ # SQLAlchemy v1.4
|
|
483
502
|
return type_
|
|
484
|
-
|
|
485
|
-
descriptor = insp.all_orm_descriptors[name]
|
|
486
|
-
if hint := get_property_hint(descriptor):
|
|
487
|
-
return hint
|
|
488
|
-
if isinstance(descriptor, QueryableAttribute):
|
|
489
|
-
prop = descriptor.property
|
|
490
|
-
if isinstance(prop, Relationship):
|
|
491
|
-
type_ = prop.mapper.class_
|
|
492
|
-
# TODO: check for nullable?
|
|
493
|
-
return list[type_] if prop.uselist else type_ | None
|
|
494
|
-
if isinstance(attr, AssociationProxyInstance):
|
|
495
|
-
return list[
|
|
496
|
-
get_attribute_access_type(
|
|
497
|
-
attr.target_class,
|
|
498
|
-
attr.remote_attr.key, # pyright: ignore [reportAttributeAccessIssue]
|
|
499
|
-
)
|
|
500
|
-
]
|
|
501
|
-
elif isinstance(cls, type) and not is_generic_alias(cls) and issubclass(cls, Model):
|
|
502
|
-
# Check in the annotations directly (for sqlmodel.Relationship)
|
|
503
|
-
hints = get_type_hints(cls)
|
|
504
|
-
if name in hints:
|
|
505
|
-
type_ = hints[name]
|
|
506
|
-
type_origin = get_origin(type_)
|
|
507
|
-
if isinstance(type_origin, type) and issubclass(type_origin, Mapped):
|
|
508
|
-
return get_args(type_)[0] # SQLAlchemy v2
|
|
509
|
-
if isinstance(type_, ModelField):
|
|
510
|
-
return type_.type_ # SQLAlchemy v1.4
|
|
511
|
-
return type_
|
|
512
|
-
elif is_union(cls):
|
|
503
|
+
if is_union(cls):
|
|
513
504
|
# Check in each arg of the annotation.
|
|
514
505
|
return unionize(
|
|
515
506
|
*(get_attribute_access_type(arg, name) for arg in get_args(cls))
|
|
516
507
|
)
|
|
517
|
-
|
|
508
|
+
if isinstance(cls, type):
|
|
518
509
|
# Bare class
|
|
519
510
|
exceptions = NameError
|
|
520
511
|
try:
|
|
521
|
-
hints = get_type_hints(cls)
|
|
512
|
+
hints = get_type_hints(cls) # pyright: ignore [reportArgumentType]
|
|
522
513
|
if name in hints:
|
|
523
514
|
return hints[name]
|
|
524
515
|
except exceptions as e:
|
reflex/vars/base.py
CHANGED
|
@@ -40,7 +40,6 @@ from rich.markup import escape
|
|
|
40
40
|
from typing_extensions import dataclass_transform, override
|
|
41
41
|
|
|
42
42
|
from reflex import constants
|
|
43
|
-
from reflex.base import Base
|
|
44
43
|
from reflex.constants.compiler import Hooks
|
|
45
44
|
from reflex.constants.state import FIELD_MARKER
|
|
46
45
|
from reflex.utils import console, exceptions, imports, serializers, types
|
|
@@ -1505,21 +1504,6 @@ class LiteralVar(Var):
|
|
|
1505
1504
|
)
|
|
1506
1505
|
return LiteralVar.create(serialized_value, _var_data=_var_data)
|
|
1507
1506
|
|
|
1508
|
-
if isinstance(value, Base):
|
|
1509
|
-
# get the fields of the pydantic class
|
|
1510
|
-
fields = value.__fields__.keys()
|
|
1511
|
-
one_level_dict = {field: getattr(value, field) for field in fields}
|
|
1512
|
-
|
|
1513
|
-
return LiteralObjectVar.create(
|
|
1514
|
-
{
|
|
1515
|
-
field: value
|
|
1516
|
-
for field, value in one_level_dict.items()
|
|
1517
|
-
if not callable(value)
|
|
1518
|
-
},
|
|
1519
|
-
_var_type=type(value),
|
|
1520
|
-
_var_data=_var_data,
|
|
1521
|
-
)
|
|
1522
|
-
|
|
1523
1507
|
if dataclasses.is_dataclass(value) and not isinstance(value, type):
|
|
1524
1508
|
return LiteralObjectVar.create(
|
|
1525
1509
|
{
|
|
@@ -3201,6 +3185,8 @@ if TYPE_CHECKING:
|
|
|
3201
3185
|
from _typeshed import DataclassInstance
|
|
3202
3186
|
from sqlalchemy.orm import DeclarativeBase
|
|
3203
3187
|
|
|
3188
|
+
from reflex.base import Base
|
|
3189
|
+
|
|
3204
3190
|
SQLA_TYPE = TypeVar("SQLA_TYPE", bound=DeclarativeBase | None)
|
|
3205
3191
|
BASE_TYPE = TypeVar("BASE_TYPE", bound=Base | None)
|
|
3206
3192
|
DATACLASS_TYPE = TypeVar("DATACLASS_TYPE", bound=DataclassInstance | None)
|
reflex/vars/object.py
CHANGED
|
@@ -6,6 +6,7 @@ import collections.abc
|
|
|
6
6
|
import dataclasses
|
|
7
7
|
import typing
|
|
8
8
|
from collections.abc import Mapping
|
|
9
|
+
from importlib.util import find_spec
|
|
9
10
|
from typing import (
|
|
10
11
|
Any,
|
|
11
12
|
NoReturn,
|
|
@@ -74,7 +75,15 @@ def _determine_value_type(var_type: GenericType):
|
|
|
74
75
|
return Any
|
|
75
76
|
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
PYTHON_TYPES = (Mapping,)
|
|
79
|
+
if find_spec("pydantic"):
|
|
80
|
+
import pydantic
|
|
81
|
+
import pydantic.v1
|
|
82
|
+
|
|
83
|
+
PYTHON_TYPES += (pydantic.BaseModel, pydantic.v1.BaseModel)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class ObjectVar(Var[OBJECT_TYPE], python_types=PYTHON_TYPES):
|
|
78
87
|
"""Base class for immutable object vars."""
|
|
79
88
|
|
|
80
89
|
def _key_type(self) -> type:
|
|
@@ -460,7 +469,25 @@ class LiteralObjectVar(CachedVarOperation, ObjectVar[OBJECT_TYPE], LiteralVar):
|
|
|
460
469
|
|
|
461
470
|
Returns:
|
|
462
471
|
The literal object var.
|
|
472
|
+
|
|
473
|
+
Raises:
|
|
474
|
+
TypeError: If the value is not a mapping type or a dataclass.
|
|
463
475
|
"""
|
|
476
|
+
if not isinstance(_var_value, collections.abc.Mapping):
|
|
477
|
+
from reflex.utils.serializers import serialize
|
|
478
|
+
|
|
479
|
+
serialized = serialize(_var_value, get_type=False)
|
|
480
|
+
if not isinstance(serialized, collections.abc.Mapping):
|
|
481
|
+
msg = f"Expected a mapping type or a dataclass, got {_var_value!r} of type {type(_var_value).__name__}."
|
|
482
|
+
raise TypeError(msg)
|
|
483
|
+
|
|
484
|
+
return LiteralObjectVar(
|
|
485
|
+
_js_expr="",
|
|
486
|
+
_var_type=(type(_var_value) if _var_type is None else _var_type),
|
|
487
|
+
_var_data=_var_data,
|
|
488
|
+
_var_value=serialized,
|
|
489
|
+
)
|
|
490
|
+
|
|
464
491
|
return LiteralObjectVar(
|
|
465
492
|
_js_expr="",
|
|
466
493
|
_var_type=(figure_out_type(_var_value) if _var_type is None else _var_type),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.15a0
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
5
|
Project-URL: homepage, https://reflex.dev
|
|
6
6
|
Project-URL: repository, https://github.com/reflex-dev/reflex
|
|
@@ -36,6 +36,10 @@ Requires-Dist: sqlmodel<0.1,>=0.0.24
|
|
|
36
36
|
Requires-Dist: starlette>=0.47.0
|
|
37
37
|
Requires-Dist: typing-extensions>=4.13.0
|
|
38
38
|
Requires-Dist: wrapt<2.0,>=1.17.0
|
|
39
|
+
Provides-Extra: db
|
|
40
|
+
Requires-Dist: alembic<2.0,>=1.15.2; extra == 'db'
|
|
41
|
+
Requires-Dist: pydantic<3.0,>=1.10.21; extra == 'db'
|
|
42
|
+
Requires-Dist: sqlmodel<0.1,>=0.0.24; extra == 'db'
|
|
39
43
|
Provides-Extra: monitoring
|
|
40
44
|
Requires-Dist: pyleak<1.0,>=0.1.14; extra == 'monitoring'
|
|
41
45
|
Description-Content-Type: text/markdown
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
reflex/__init__.py,sha256=
|
|
2
|
-
reflex/__init__.pyi,sha256=
|
|
1
|
+
reflex/__init__.py,sha256=rDkhny17Glr6GIJZNaAZO9AKOhALpeRIJ4kRm38SSNM,10178
|
|
2
|
+
reflex/__init__.pyi,sha256=q7NlYS2YOhEmQzFUHknHOqBo6q-bwAz0UZy_k8qI52s,10184
|
|
3
3
|
reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
|
|
4
4
|
reflex/admin.py,sha256=Nbc38y-M8iaRBvh1W6DQu_D3kEhO8JFvxrog4q2cB_E,434
|
|
5
|
-
reflex/app.py,sha256=
|
|
5
|
+
reflex/app.py,sha256=qBwr17eLnpz64CXLrGD5pvWVqaC9m5XxFDkmA4lJOh4,79240
|
|
6
6
|
reflex/assets.py,sha256=l5O_mlrTprC0lF7Rc_McOe3a0OtSLnRdNl_PqCpDCBA,3431
|
|
7
|
-
reflex/base.py,sha256=
|
|
7
|
+
reflex/base.py,sha256=LHWOQIZBoiuuw_b9-KbJV5SP5BHbpxGfULzC2KCf6lw,2315
|
|
8
8
|
reflex/config.py,sha256=LsHAtdH4nkSn3q_Ie-KNdOGdflLXrFICUQov29oFjVk,21229
|
|
9
|
-
reflex/environment.py,sha256=
|
|
9
|
+
reflex/environment.py,sha256=siROr2_xfV4YdmjcoB2gI1JAfZjRnzYcmMcow__gMx0,24208
|
|
10
10
|
reflex/event.py,sha256=KlNFqtJacwiPCtp7rkIlbskZqCME9RJsAHF-6pOEvwg,76255
|
|
11
|
-
reflex/model.py,sha256=
|
|
11
|
+
reflex/model.py,sha256=qSmmlowwhDAC2YZQ2U_cP_a_jOs--VtXAgJBHKaS7qg,22214
|
|
12
12
|
reflex/page.py,sha256=ssCbMVFuIy60vH-YhJUzN0OxzUwXFCCD3ej56dVjp3g,3525
|
|
13
13
|
reflex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
reflex/reflex.py,sha256=
|
|
14
|
+
reflex/reflex.py,sha256=jjvoifhJ4dTADgIQB-mgzm4W6_geCeVstenB11sJqL0,25961
|
|
15
15
|
reflex/route.py,sha256=TnS4m6Hm-b3LfGFpm37iAMEd-_JISAouPW5FqUxTAfU,7858
|
|
16
|
-
reflex/state.py,sha256=
|
|
16
|
+
reflex/state.py,sha256=zbmjm7grSTcikkzw4VTY1OSgdrY-K0VLxk6mr-w16wM,95426
|
|
17
17
|
reflex/style.py,sha256=Jc7hZyH9CSFDbweoRCrkVtSu8tZq5aIggSoAYAh-w1M,13304
|
|
18
|
-
reflex/testing.py,sha256=
|
|
18
|
+
reflex/testing.py,sha256=T7jqp1U25-nqR4MEBeRzXbXEygPZ3zEiPLD0o_1X9TM,40557
|
|
19
19
|
reflex/.templates/apps/blank/assets/favicon.ico,sha256=baxxgDAQ2V4-G5Q4S2yK5uUJTUGkv-AOWBQ0xd6myUo,4286
|
|
20
20
|
reflex/.templates/apps/blank/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
reflex/.templates/apps/blank/code/blank.py,sha256=wry9E3VjC7qtt_gzqNOyo4KZAAlzVyNp3uhFkcLZmM0,898
|
|
@@ -104,8 +104,8 @@ reflex/components/datadisplay/__init__.py,sha256=L8pWWKNHWdUD2fbZRoEKjd_8c_hpDdG
|
|
|
104
104
|
reflex/components/datadisplay/__init__.pyi,sha256=H3LZkWdrw3RTv_csaIT8qoClgAJTonlGZ5ZMeGMV0Bs,551
|
|
105
105
|
reflex/components/datadisplay/code.py,sha256=DQjferNi6QD2tNZdA28mMRu5KhqejAePxmD23vpcl9Y,12605
|
|
106
106
|
reflex/components/datadisplay/code.pyi,sha256=QCWqxWCsbFqS4CcfgN5P1u12JU7sBcUEEjekZnWSDeU,41375
|
|
107
|
-
reflex/components/datadisplay/dataeditor.py,sha256=
|
|
108
|
-
reflex/components/datadisplay/dataeditor.pyi,sha256=
|
|
107
|
+
reflex/components/datadisplay/dataeditor.py,sha256=PfT8DDyWZ7wvPnxg8vQx-p3U6i0vwfBYHbe7KZXrCNg,14003
|
|
108
|
+
reflex/components/datadisplay/dataeditor.pyi,sha256=ntSQRf1FrpFBkibDJc-aIZP2clKrMLeRgZA0MS0gn0E,12606
|
|
109
109
|
reflex/components/datadisplay/logo.py,sha256=xvg5TRVRSi2IKn7Kg4oYzWcaFMHfXxUaCp0cQmuKSn0,1993
|
|
110
110
|
reflex/components/datadisplay/shiki_code_block.py,sha256=qCp4jZO3Ek4mR_1Qs4oxLh-GCEo6VBlpb8B9MDDdw4Y,24503
|
|
111
111
|
reflex/components/datadisplay/shiki_code_block.pyi,sha256=J6NyOY_RQ9VTu7Psi3Tuctv5EM6FnlPZ2EXEZwHBC9w,56933
|
|
@@ -139,8 +139,8 @@ reflex/components/gridjs/__init__.py,sha256=xJwDm1AZ70L5-t9LLqZwGUtDpijbf1KuMYDT
|
|
|
139
139
|
reflex/components/gridjs/datatable.py,sha256=7JKrRw1zkpFB0_wwoaIhrVrldsm7-dyi3PASgqLq8Hc,4224
|
|
140
140
|
reflex/components/gridjs/datatable.pyi,sha256=kFgv82vCgfdWZaUq4bZ73G8X3mkw6ecvSRkZ9G9-28E,5185
|
|
141
141
|
reflex/components/lucide/__init__.py,sha256=EggTK2MuQKQeOBLKW-mF0VaDK9zdWBImu1HO2dvHZbE,73
|
|
142
|
-
reflex/components/lucide/icon.py,sha256=
|
|
143
|
-
reflex/components/lucide/icon.pyi,sha256=
|
|
142
|
+
reflex/components/lucide/icon.py,sha256=sb-_PcD5KGzSGJAC4AP4XjaciRHOowE6NVmr5PazS0E,35375
|
|
143
|
+
reflex/components/lucide/icon.pyi,sha256=Mb6fQNSoWM8d0OaTntAj-LGp4xf1oj5SH_JzE2sDIfs,38169
|
|
144
144
|
reflex/components/markdown/__init__.py,sha256=Dfl1At5uYoY7H4ufZU_RY2KOGQDLtj75dsZ2BTqqAns,87
|
|
145
145
|
reflex/components/markdown/markdown.py,sha256=kzvO2VnfCbxV7AcIMBJbxLtAlQ6U5T_QB_JTh8l-HJ4,15450
|
|
146
146
|
reflex/components/markdown/markdown.pyi,sha256=oOlXZItHB0TPWsFz1Qjvr3KzG8sssthBp40UO_KkRIA,4322
|
|
@@ -304,8 +304,8 @@ reflex/components/recharts/polar.pyi,sha256=8ShEcGK9KJyu0FN6KPys1kgAYrzOZ6wtiRuy
|
|
|
304
304
|
reflex/components/recharts/recharts.py,sha256=rAarxOawhHiWUDIHNrizmChitgoNV4zas1y5SuSsr7E,3221
|
|
305
305
|
reflex/components/recharts/recharts.pyi,sha256=9j8cVSMqyBkkOBBrx9pzDpP1clnbM9kD0TTViTUGDYc,7084
|
|
306
306
|
reflex/components/sonner/__init__.py,sha256=L_mdRIy7-ccRGSz5VK6J8O-c-e-D1p9xWw29_ErrvGg,68
|
|
307
|
-
reflex/components/sonner/toast.py,sha256=
|
|
308
|
-
reflex/components/sonner/toast.pyi,sha256=
|
|
307
|
+
reflex/components/sonner/toast.py,sha256=VBtoRnxBhKD029njAjhbLeYtiUSL3aNPOSmA9Lmsqvg,12512
|
|
308
|
+
reflex/components/sonner/toast.pyi,sha256=z48tJMXVfo3kGbNqDLWjZ_6UhGL8Payj1lsSCPxawh0,7789
|
|
309
309
|
reflex/components/tags/__init__.py,sha256=Pc0JU-Tv_W7KCsydXgbKmu7w2VtHNkI6Cx2hTkNhW_Q,152
|
|
310
310
|
reflex/components/tags/cond_tag.py,sha256=svlnSP2ZMwHqjsHa3fq7a7K2--3XTLo5FcbjOw7fVik,849
|
|
311
311
|
reflex/components/tags/iter_tag.py,sha256=Q4rPOt0NSjYhAPDOnNtu7XPxn3MCYZInZjYU3xPJq2Q,3716
|
|
@@ -319,20 +319,20 @@ reflex/constants/compiler.py,sha256=1FXPYQNotaSrTwWcOspA1gCVmEdoiWkNMbbrz_qU0YU,
|
|
|
319
319
|
reflex/constants/config.py,sha256=8OIjiBdZZJrRVHsNBheMwopE9AwBFFzau0SXqXKcrPg,1715
|
|
320
320
|
reflex/constants/custom_components.py,sha256=joJt4CEt1yKy7wsBH6vYo7_QRW0O_fWXrrTf0VY2q14,1317
|
|
321
321
|
reflex/constants/event.py,sha256=tgoynWQi2L0_Kqc3XhXo7XXL76A-OKhJGHRrNjm7gFw,2885
|
|
322
|
-
reflex/constants/installer.py,sha256=
|
|
322
|
+
reflex/constants/installer.py,sha256=QWVD6vFlRH7j3Dt37pH_dPRTskV2-PtW7lFmKDvXMmk,4193
|
|
323
323
|
reflex/constants/route.py,sha256=UBjqaAOxiUxlDZCSY4O2JJChKvA4MZrhUU0E5rNvKbM,2682
|
|
324
324
|
reflex/constants/state.py,sha256=VrEeYxXfE9ss8RmOHIXD4T6EGsV9PDqbtMCQMmZxW3I,383
|
|
325
325
|
reflex/constants/utils.py,sha256=e1ChEvbHfmE_V2UJvCSUhD_qTVAIhEGPpRJSqdSd6PA,780
|
|
326
326
|
reflex/custom_components/__init__.py,sha256=R4zsvOi4dfPmHc18KEphohXnQFBPnUCb50cMR5hSLDE,36
|
|
327
327
|
reflex/custom_components/custom_components.py,sha256=z5eL7WqbU4Vx5zVRWqgYPQu05P29XFsJ48xL9OLiyRg,25355
|
|
328
328
|
reflex/experimental/__init__.py,sha256=P8fe8S2e2gy2HCwHFGQzr3lPMmh7qN5Ii2e8ukoPHuQ,1664
|
|
329
|
-
reflex/experimental/client_state.py,sha256=
|
|
329
|
+
reflex/experimental/client_state.py,sha256=BPVOewGjuntuRCQDJvh-Tj290iTool5IpqnYsi_czrc,10031
|
|
330
330
|
reflex/experimental/hooks.py,sha256=CHYGrAE5t8riltrJmDFgJ4D2Vhmhw-y3B3MSGNlOQow,2366
|
|
331
331
|
reflex/istate/__init__.py,sha256=afq_pCS5B_REC-Kl3Rbaa538uWi59xNz4INeuENcWnk,2039
|
|
332
332
|
reflex/istate/data.py,sha256=8RydiarP7f5ET5a3dfGpuuXdYZ7KHEWS6aENVoxRxGc,7918
|
|
333
333
|
reflex/istate/dynamic.py,sha256=xOQ9upZVPf6ngqcLQZ9HdAAYmoWwJ8kRFPH34Q5HTiM,91
|
|
334
334
|
reflex/istate/manager.py,sha256=WyBBhDuq3cVuno3H-axeT8sqF0EqHR3MNZJw-B76cZs,30517
|
|
335
|
-
reflex/istate/proxy.py,sha256=
|
|
335
|
+
reflex/istate/proxy.py,sha256=BwlJYWR5FMItqbHVulhgI_TH8jtP69HkXXpTtClXXcs,25993
|
|
336
336
|
reflex/istate/storage.py,sha256=gCPoiZxuG-Rw0y-Pz3OC7rv4o08dQ_jK1fE2u8Jhxqg,4339
|
|
337
337
|
reflex/istate/wrappers.py,sha256=p8uuioXRbR5hperwbOJHUcWdu7hukLikQdoR7qrnKsI,909
|
|
338
338
|
reflex/middleware/__init__.py,sha256=x7xTeDuc73Hjj43k1J63naC9x8vzFxl4sq7cCFBX7sk,111
|
|
@@ -344,11 +344,11 @@ reflex/plugins/base.py,sha256=5BgzCM7boj9kJ6FGzVzVlgQk-crJuVmOLCl1PXvv4-E,3372
|
|
|
344
344
|
reflex/plugins/shared_tailwind.py,sha256=kCyIaSFrzoPe7dlA09SjfSY30bfbh43dkQchres4A0w,7305
|
|
345
345
|
reflex/plugins/sitemap.py,sha256=X_CtH5B1w3CZno-gdPj1rp63WjOuNjFnX4B3fx_-VFQ,6135
|
|
346
346
|
reflex/plugins/tailwind_v3.py,sha256=jCEZ5UYdr706Mw48L-WSHOUB6O55o1C3uG6AMwXqZoI,4810
|
|
347
|
-
reflex/plugins/tailwind_v4.py,sha256=
|
|
347
|
+
reflex/plugins/tailwind_v4.py,sha256=8G7iXj6wYRRJlCWlce_vtCgs1YittFvLucyUP-sPXhc,5230
|
|
348
348
|
reflex/utils/__init__.py,sha256=y-AHKiRQAhk2oAkvn7W8cRVTZVK625ff8tTwvZtO7S4,24
|
|
349
|
-
reflex/utils/build.py,sha256=
|
|
349
|
+
reflex/utils/build.py,sha256=j-OY90O7gMP_bclVt_6J3Q2GFgOHQH_uFpTfdaWmuqU,9746
|
|
350
350
|
reflex/utils/codespaces.py,sha256=kEQ-j-jclTukFpXDlYgNp95kYMGDrQmP3VNEoYGZ1u4,3052
|
|
351
|
-
reflex/utils/compat.py,sha256=
|
|
351
|
+
reflex/utils/compat.py,sha256=zuP7QHvhSSss0taa3t7-OA9VijGt2c3y3kEa6Kfjyhk,1322
|
|
352
352
|
reflex/utils/console.py,sha256=W41Ogj1Jk8tEOhXXy9dy4KCLYp5rn0NZQwbBqXbkwSI,13668
|
|
353
353
|
reflex/utils/decorator.py,sha256=QUZntENupeW5FA5mNRTx0I1GzGKFQXhMjVg24_IIM5o,3957
|
|
354
354
|
reflex/utils/exceptions.py,sha256=Wwu7Ji2xgq521bJKtU2NgjwhmFfnG8erirEVN2h8S-g,8884
|
|
@@ -363,29 +363,29 @@ reflex/utils/misc.py,sha256=folEweZVCrhHNkkqut9KqQdTJ80HxwL_gI41m40FnNM,4592
|
|
|
363
363
|
reflex/utils/monitoring.py,sha256=87fr9j6Y9Bvz2uF4tBxuX6CaU054h1UPx0ijcnyP_kw,5250
|
|
364
364
|
reflex/utils/net.py,sha256=q3h5pNbAlFiqy8U15S9DTOvzy_OnenVVug5ROBTGRTA,4267
|
|
365
365
|
reflex/utils/path_ops.py,sha256=_RS17IQDNr5vcoLLGZx2-z1E5WP-JgDHvaRAOgqrZiU,8154
|
|
366
|
-
reflex/utils/prerequisites.py,sha256=
|
|
366
|
+
reflex/utils/prerequisites.py,sha256=4aFbsI2mM1ocgbykDCHWcNNWXN5b5Sb3_KEj5YYuEqQ,20769
|
|
367
367
|
reflex/utils/processes.py,sha256=ralnYq3tL1v_20n2ew74AlU7PQ0E4T0HllSuK1Edq_M,18125
|
|
368
368
|
reflex/utils/pyi_generator.py,sha256=IiNyiodH_xq8tRLD45phe2Le3sL6ZgloVMyg07xtT3o,46395
|
|
369
369
|
reflex/utils/redir.py,sha256=E6lJ6UYGQs_uCyQAKHT_dDMplo5IRZ9JarWfvgGAgGo,1731
|
|
370
370
|
reflex/utils/registry.py,sha256=omKh5rrsybDuuKmh4K88lwdwwcpGsu3Vc4pCko_djKY,2239
|
|
371
371
|
reflex/utils/rename.py,sha256=8f3laR0Zr3uizKKDD_1woPz-FZvUPjzD-fDeNHf7wBk,5232
|
|
372
|
-
reflex/utils/serializers.py,sha256=
|
|
373
|
-
reflex/utils/telemetry.py,sha256=
|
|
372
|
+
reflex/utils/serializers.py,sha256=18cnbx5rMftrh6T0bj0L2LqMKHPcFTSiKZ8bx_20Ris,14039
|
|
373
|
+
reflex/utils/telemetry.py,sha256=E_qV7hHKybnWu9MfMSTbJ7-RJebyA1Csh_x6GaCzI_4,10740
|
|
374
374
|
reflex/utils/templates.py,sha256=FWtO6kZldDK3MPj39LitPlcyWV9_Z8Ys6G9anitv94A,14108
|
|
375
375
|
reflex/utils/token_manager.py,sha256=ZtrYR0X8tTs8FpQHtMb09-H2V1xSoLWwVH8jW8OCrU8,7445
|
|
376
|
-
reflex/utils/types.py,sha256=
|
|
376
|
+
reflex/utils/types.py,sha256=pxgu95iLIJih6T1Bz6oeexCc0QTjqUTtC6L4LOna9sM,38584
|
|
377
377
|
reflex/vars/__init__.py,sha256=pUzFFkY-brpEoqYHQc41VefaOdPQG6xzjer1RJy9IKo,1264
|
|
378
|
-
reflex/vars/base.py,sha256=
|
|
378
|
+
reflex/vars/base.py,sha256=_0YK7Wc8kWeBq_wktK0F54AnPPVzzQu9nrP_3MwJ2cM,109787
|
|
379
379
|
reflex/vars/color.py,sha256=fpc3u9_H9R_DVawKMOf3tV1NDSnOs0aPHt4k1Lyu_KY,4085
|
|
380
380
|
reflex/vars/datetime.py,sha256=F2Jv_bfydipFSkIQ1F6x5MnSgFEyES9Vq5RG_uGH81E,5118
|
|
381
381
|
reflex/vars/dep_tracking.py,sha256=LfDGgAGlqfC0DeiVcitRBcA1uCe1C3fNRARRekLgCz4,13738
|
|
382
382
|
reflex/vars/function.py,sha256=0i-VkxHkDJmZtfQUwUfaF0rlS6WM8azjwQ8k7rEOkyk,13944
|
|
383
383
|
reflex/vars/number.py,sha256=FP5Jmd8qOwZgGHUG9DSmneBB4X6bj7G8oIDYsDw_j80,28242
|
|
384
|
-
reflex/vars/object.py,sha256=
|
|
384
|
+
reflex/vars/object.py,sha256=hlBw9cElr_9TnFdTbzSHy6EW6PHrvGFH7bpwRGgtXRM,17405
|
|
385
385
|
reflex/vars/sequence.py,sha256=JAvHmLxnT6B2AQhLx6RTodGybdhcxhJrYxUlhCklYNY,51445
|
|
386
386
|
scripts/hatch_build.py,sha256=-4pxcLSFmirmujGpQX9UUxjhIC03tQ_fIQwVbHu9kc0,1861
|
|
387
|
-
reflex-0.8.
|
|
388
|
-
reflex-0.8.
|
|
389
|
-
reflex-0.8.
|
|
390
|
-
reflex-0.8.
|
|
391
|
-
reflex-0.8.
|
|
387
|
+
reflex-0.8.15a0.dist-info/METADATA,sha256=0oOaIV9sRMyjfrob5qBYGTD5lUiiJ_hHk1NtXeSvGTw,12511
|
|
388
|
+
reflex-0.8.15a0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
389
|
+
reflex-0.8.15a0.dist-info/entry_points.txt,sha256=Rxt4dXc7MLBNt5CSHTehVPuSe9Xqow4HLX55nD9tQQ0,45
|
|
390
|
+
reflex-0.8.15a0.dist-info/licenses/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
|
|
391
|
+
reflex-0.8.15a0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|