reflex 0.7.13a1__tar.gz → 0.7.14a1__tar.gz
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-0.7.13a1 → reflex-0.7.14a1}/PKG-INFO +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/pyproject.toml +45 -30
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/apps/blank/code/blank.py +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/app.py +79 -72
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/app_mixins/lifespan.py +2 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/app_mixins/middleware.py +1 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/app_mixins/mixin.py +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/assets.py +6 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/base.py +3 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/compiler/compiler.py +77 -64
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/compiler/utils.py +8 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/app_wrap.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/bare.py +5 -7
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/body.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/document.pyi +0 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/error_boundary.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/fragment.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/head.pyi +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/link.pyi +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/meta.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/meta.pyi +0 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/script.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/script.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/strict_mode.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/component.py +38 -40
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/auto_scroll.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/banner.pyi +0 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/breakpoints.py +9 -11
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/client_side_routing.pyi +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/clipboard.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/colors.py +10 -7
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/cond.py +4 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/debounce.py +5 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/debounce.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/foreach.py +8 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/html.py +3 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/html.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/match.py +19 -17
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/sticky.pyi +0 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/upload.pyi +0 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/code.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/code.pyi +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/dataeditor.py +7 -10
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/dataeditor.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/logo.py +3 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/shiki_code_block.py +8 -11
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/shiki_code_block.pyi +0 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/dynamic.py +2 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/__init__.pyi +2 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/element.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/__init__.py +1 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/__init__.pyi +3 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/base.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/forms.py +3 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/forms.pyi +1 -18
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/inline.pyi +0 -28
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/media.py +26 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/media.pyi +259 -25
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/metadata.py +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/metadata.pyi +0 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/other.pyi +0 -7
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/scripts.pyi +0 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/sectioning.pyi +0 -15
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/tables.pyi +0 -10
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/typography.pyi +0 -15
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/gridjs/datatable.py +10 -13
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/gridjs/datatable.pyi +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/lucide/icon.py +10 -9
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/lucide/icon.pyi +0 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/markdown/markdown.py +6 -8
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/markdown/markdown.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/moment/moment.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/base.py +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/base.pyi +0 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/image.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/link.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/video.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/plotly/plotly.pyi +0 -9
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/props.py +4 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/accordion.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/accordion.pyi +0 -7
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/base.py +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/base.pyi +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/drawer.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/drawer.pyi +0 -11
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/form.py +5 -9
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/form.pyi +0 -12
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/progress.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/progress.pyi +0 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/slider.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/slider.pyi +0 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/base.pyi +0 -8
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/color_mode.pyi +0 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/alert_dialog.py +4 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/alert_dialog.pyi +4 -9
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/aspect_ratio.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/aspect_ratio.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/avatar.py +5 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/avatar.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/badge.py +5 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/badge.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/button.py +2 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/button.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/callout.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/callout.pyi +1 -7
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/card.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/card.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/checkbox.py +7 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/checkbox.pyi +1 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/checkbox_cards.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/checkbox_cards.pyi +1 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/checkbox_group.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/checkbox_group.pyi +1 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/context_menu.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/context_menu.pyi +1 -14
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/data_list.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/data_list.pyi +1 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/dialog.py +4 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/dialog.pyi +4 -9
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/dropdown_menu.py +5 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/dropdown_menu.pyi +4 -10
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/hover_card.py +4 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/hover_card.pyi +4 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/icon_button.py +7 -8
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/icon_button.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/inset.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/inset.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/popover.py +4 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/popover.pyi +4 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/progress.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/progress.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/radio.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/radio.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/radio_cards.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/radio_cards.pyi +1 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/radio_group.py +7 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/radio_group.pyi +1 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/scroll_area.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/scroll_area.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/segmented_control.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/segmented_control.pyi +1 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/select.py +5 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/select.pyi +1 -11
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/separator.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/separator.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/skeleton.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/skeleton.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/slider.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/slider.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/spinner.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/spinner.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/switch.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/switch.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/table.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/table.pyi +1 -9
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/tabs.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/tabs.pyi +1 -7
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/text_area.py +5 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/text_area.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/text_field.py +5 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/text_field.pyi +1 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/tooltip.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/tooltip.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/base.py +5 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/base.pyi +5 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/box.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/box.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/center.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/container.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/container.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/flex.py +6 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/flex.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/grid.py +6 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/grid.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/list.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/list.pyi +0 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/section.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/section.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/spacer.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/stack.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/stack.pyi +0 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/blockquote.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/blockquote.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/code.py +5 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/code.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/heading.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/heading.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/link.py +3 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/link.pyi +1 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/text.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/text.pyi +1 -9
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/react_player/audio.py +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/react_player/audio.pyi +0 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/react_player/react_player.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/react_player/video.py +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/react_player/video.pyi +0 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/__init__.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/__init__.pyi +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/cartesian.py +20 -25
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/cartesian.pyi +20 -37
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/charts.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/charts.pyi +0 -12
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/general.pyi +0 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/polar.py +5 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/polar.pyi +4 -10
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/recharts.py +12 -10
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/recharts.pyi +10 -11
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/sonner/toast.py +2 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/sonner/toast.pyi +0 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/suneditor/editor.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/suneditor/editor.pyi +0 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/tags/iter_tag.py +4 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/config.py +47 -35
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/base.py +3 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/compiler.py +8 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/installer.py +24 -15
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/custom_components/custom_components.py +1 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/event.py +58 -60
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/experimental/__init__.py +2 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/experimental/client_state.py +9 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/experimental/layout.pyi +0 -5
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/istate/manager.py +15 -19
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/istate/proxy.py +19 -12
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/model.py +6 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/plugins/base.py +8 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/plugins/tailwind_v3.py +8 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/plugins/tailwind_v4.py +9 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/reflex.py +9 -11
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/route.py +7 -9
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/state.py +66 -70
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/style.py +3 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/testing.py +46 -29
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/build.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/console.py +9 -17
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/exec.py +9 -11
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/format.py +21 -24
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/imports.py +4 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/lazy_loader.py +3 -3
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/misc.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/net.py +2 -2
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/path_ops.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/prerequisites.py +67 -38
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/processes.py +4 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/pyi_generator.py +46 -41
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/redir.py +1 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/serializers.py +4 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/telemetry.py +42 -4
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/types.py +16 -13
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/vars/base.py +96 -109
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/vars/datetime.py +2 -1
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/vars/dep_tracking.py +19 -28
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/vars/number.py +6 -7
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/vars/object.py +5 -6
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/vars/sequence.py +11 -11
- {reflex-0.7.13a1 → reflex-0.7.14a1}/.gitignore +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/LICENSE +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/README.md +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/components/shiki/code.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/next.config.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/utils/client_side_routing.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/utils/helpers/paste.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/.templates/web/utils/state.js +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/__main__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/admin.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/compiler/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/compiler/templates.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/body.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/document.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/error_boundary.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/fragment.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/head.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/link.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/base/strict_mode.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/auto_scroll.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/banner.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/client_side_routing.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/responsive.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/sticky.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/core/upload.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/constants/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/constants/html.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/constants/react.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/constants/reflex.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/element.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/literals.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/moment/moment.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/image.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/link.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/next/video.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/plotly/plotly.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/recharts/general.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/suneditor/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/tags/tag.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/colors.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/config.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/custom_components.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/event.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/route.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/state.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/constants/utils.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/experimental/hooks.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/experimental/layout.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/istate/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/istate/data.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/istate/dynamic.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/istate/storage.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/istate/wrappers.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/middleware/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/middleware/middleware.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/page.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/plugins/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/py.typed +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/codespaces.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/compat.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/decorator.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/exceptions.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/export.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/utils/registry.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/vars/__init__.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/reflex/vars/function.py +0 -0
- {reflex-0.7.13a1 → reflex-0.7.14a1}/scripts/hatch_build.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "reflex"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.14a1"
|
|
4
4
|
description = "Web apps in pure Python."
|
|
5
5
|
license.text = "Apache-2.0"
|
|
6
6
|
authors = [
|
|
@@ -83,44 +83,59 @@ reportIncompatibleMethodOverride = false
|
|
|
83
83
|
target-version = "py310"
|
|
84
84
|
output-format = "concise"
|
|
85
85
|
lint.isort.split-on-trailing-comma = false
|
|
86
|
-
lint.select = [
|
|
87
|
-
"ANN001",
|
|
88
|
-
"B",
|
|
89
|
-
"C4",
|
|
90
|
-
"D",
|
|
91
|
-
"E",
|
|
92
|
-
"ERA",
|
|
93
|
-
"F",
|
|
94
|
-
"FURB",
|
|
95
|
-
"I",
|
|
96
|
-
"N",
|
|
97
|
-
"PERF",
|
|
98
|
-
"PGH",
|
|
99
|
-
"PTH",
|
|
100
|
-
"RUF",
|
|
101
|
-
"SIM",
|
|
102
|
-
"T",
|
|
103
|
-
"TRY",
|
|
104
|
-
"UP",
|
|
105
|
-
"W",
|
|
106
|
-
]
|
|
86
|
+
lint.select = ["ALL"]
|
|
107
87
|
lint.ignore = [
|
|
108
|
-
"
|
|
88
|
+
"A",
|
|
89
|
+
"ANN002",
|
|
90
|
+
"ANN003",
|
|
91
|
+
"ANN2",
|
|
92
|
+
"ANN4",
|
|
93
|
+
"ARG",
|
|
94
|
+
"BLE",
|
|
95
|
+
"C901",
|
|
96
|
+
"COM",
|
|
109
97
|
"D205",
|
|
98
|
+
"DTZ",
|
|
110
99
|
"E501",
|
|
111
100
|
"F403",
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
101
|
+
"FBT",
|
|
102
|
+
"FIX",
|
|
103
|
+
"G004",
|
|
104
|
+
"ISC003",
|
|
105
|
+
"PLC",
|
|
106
|
+
"PLR",
|
|
107
|
+
"PLW",
|
|
108
|
+
"PT011",
|
|
109
|
+
"PT012",
|
|
110
|
+
"PYI",
|
|
115
111
|
"RUF012",
|
|
112
|
+
"S",
|
|
113
|
+
"SLF",
|
|
114
|
+
"SLOT",
|
|
115
|
+
"TC",
|
|
116
|
+
"TD",
|
|
116
117
|
"TRY0",
|
|
117
118
|
"UP038",
|
|
118
119
|
]
|
|
119
120
|
lint.pydocstyle.convention = "google"
|
|
121
|
+
lint.flake8-bugbear.extend-immutable-calls = [
|
|
122
|
+
"reflex.utils.types.Unset",
|
|
123
|
+
"reflex.vars.base.Var.create",
|
|
124
|
+
]
|
|
120
125
|
|
|
121
126
|
[tool.ruff.lint.per-file-ignores]
|
|
122
127
|
"__init__.py" = ["F401"]
|
|
123
|
-
"tests/*.py" = [
|
|
128
|
+
"tests/*.py" = [
|
|
129
|
+
"ANN001",
|
|
130
|
+
"D100",
|
|
131
|
+
"D103",
|
|
132
|
+
"D104",
|
|
133
|
+
"INP",
|
|
134
|
+
"B018",
|
|
135
|
+
"PERF",
|
|
136
|
+
"T",
|
|
137
|
+
"N",
|
|
138
|
+
]
|
|
124
139
|
"benchmarks/*.py" = ["ANN001", "D100", "D103", "D104", "B018", "PERF", "T", "N"]
|
|
125
140
|
"reflex/.templates/*.py" = ["D100", "D103", "D104"]
|
|
126
141
|
"*.pyi" = ["D301", "D415", "D417", "D418", "E742", "N", "PGH"]
|
|
@@ -213,13 +228,13 @@ fail_fast = true
|
|
|
213
228
|
|
|
214
229
|
[[tool.pre-commit.repos]]
|
|
215
230
|
repo = "https://github.com/astral-sh/ruff-pre-commit"
|
|
216
|
-
rev = "v0.11.
|
|
231
|
+
rev = "v0.11.12"
|
|
217
232
|
hooks = [
|
|
218
233
|
{ id = "ruff-format", args = [
|
|
219
234
|
"reflex",
|
|
220
235
|
"tests",
|
|
221
236
|
] },
|
|
222
|
-
{ id = "ruff", args = [
|
|
237
|
+
{ id = "ruff-check", args = [
|
|
223
238
|
"--fix",
|
|
224
239
|
"--exit-non-zero-on-fix",
|
|
225
240
|
], exclude = "^integration/benchmarks/" },
|
|
@@ -245,7 +260,7 @@ hooks = [
|
|
|
245
260
|
|
|
246
261
|
[[tool.pre-commit.repos]]
|
|
247
262
|
repo = "https://github.com/RobertCraigie/pyright-python"
|
|
248
|
-
rev = "v1.1.
|
|
263
|
+
rev = "v1.1.401"
|
|
249
264
|
hooks = [{ id = "pyright", args = ["reflex", "tests"], language = "system" }]
|
|
250
265
|
|
|
251
266
|
[[tool.pre-commit.repos]]
|
|
@@ -229,8 +229,6 @@ def default_error_boundary(*children: Component) -> Component:
|
|
|
229
229
|
class OverlayFragment(Fragment):
|
|
230
230
|
"""Alias for Fragment, used to wrap the overlay_component."""
|
|
231
231
|
|
|
232
|
-
pass
|
|
233
|
-
|
|
234
232
|
|
|
235
233
|
@dataclasses.dataclass(frozen=True)
|
|
236
234
|
class UploadFile(StarletteUploadFile):
|
|
@@ -262,6 +260,7 @@ class UploadFile(StarletteUploadFile):
|
|
|
262
260
|
"""
|
|
263
261
|
if self.path:
|
|
264
262
|
return self.path.name
|
|
263
|
+
return None
|
|
265
264
|
|
|
266
265
|
@property
|
|
267
266
|
def filename(self) -> str | None:
|
|
@@ -481,9 +480,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
481
480
|
# Special case to allow test cases have multiple subclasses of rx.BaseState.
|
|
482
481
|
if not is_testing_env() and BaseState.__subclasses__() != [State]:
|
|
483
482
|
# Only rx.State is allowed as Base State subclass.
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
)
|
|
483
|
+
msg = "rx.BaseState cannot be subclassed directly. Use rx.State instead"
|
|
484
|
+
raise ValueError(msg)
|
|
487
485
|
|
|
488
486
|
get_config(reload=True)
|
|
489
487
|
|
|
@@ -552,9 +550,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
552
550
|
transports=["websocket"],
|
|
553
551
|
)
|
|
554
552
|
elif getattr(self.sio, "async_mode", "") != "asgi":
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
)
|
|
553
|
+
msg = f"Custom `sio` must use `async_mode='asgi'`, not '{self.sio.async_mode}'."
|
|
554
|
+
raise RuntimeError(msg)
|
|
558
555
|
|
|
559
556
|
# Create the socket app. Note event endpoint constant replaces the default 'socket.io' path.
|
|
560
557
|
socket_app = EngineIOApp(self.sio, socketio_path="")
|
|
@@ -633,7 +630,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
633
630
|
compile_future.result()
|
|
634
631
|
|
|
635
632
|
if not self._api:
|
|
636
|
-
|
|
633
|
+
msg = "The app has not been initialized."
|
|
634
|
+
raise ValueError(msg)
|
|
637
635
|
|
|
638
636
|
if self._cached_fastapi_app is not None:
|
|
639
637
|
asgi_app = self._cached_fastapi_app
|
|
@@ -741,7 +739,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
741
739
|
ValueError: if the state has not been initialized.
|
|
742
740
|
"""
|
|
743
741
|
if self._state_manager is None:
|
|
744
|
-
|
|
742
|
+
msg = "The state manager has not been initialized."
|
|
743
|
+
raise ValueError(msg)
|
|
745
744
|
return self._state_manager
|
|
746
745
|
|
|
747
746
|
@staticmethod
|
|
@@ -791,9 +790,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
791
790
|
# If the route is not set, get it from the callable.
|
|
792
791
|
if route is None:
|
|
793
792
|
if not isinstance(component, Callable):
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
)
|
|
793
|
+
msg = "Route must be set if component is not a callable."
|
|
794
|
+
raise exceptions.RouteValueError(msg)
|
|
797
795
|
# Format the route.
|
|
798
796
|
route = format.format_route(component.__name__)
|
|
799
797
|
else:
|
|
@@ -808,9 +806,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
808
806
|
image = image or constants.Page404.IMAGE
|
|
809
807
|
else:
|
|
810
808
|
if component is None:
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
)
|
|
809
|
+
msg = "Component must be set for a non-404 page."
|
|
810
|
+
raise exceptions.PageValueError(msg)
|
|
814
811
|
|
|
815
812
|
# Check if the route given is valid
|
|
816
813
|
verify_route_validity(route)
|
|
@@ -841,11 +838,12 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
841
838
|
else f"`{route}`"
|
|
842
839
|
)
|
|
843
840
|
existing_component = self._unevaluated_pages[route].component
|
|
844
|
-
|
|
841
|
+
msg = (
|
|
845
842
|
f"Tried to add page {readable_name_from_component(component)} with route {route_name} but "
|
|
846
843
|
f"page {readable_name_from_component(existing_component)} with the same route already exists. "
|
|
847
844
|
"Make sure you do not have two pages with the same route."
|
|
848
845
|
)
|
|
846
|
+
raise exceptions.RouteValueError(msg)
|
|
849
847
|
|
|
850
848
|
# Setup dynamic args for the route.
|
|
851
849
|
# this state assignment is only required for tests using the deprecated state kwarg for App
|
|
@@ -930,10 +928,9 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
930
928
|
):
|
|
931
929
|
if rw in segments and r != nr:
|
|
932
930
|
# If the slugs in the segments of both routes are not the same, then the route is invalid
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
elif rw not in segments and r != nr:
|
|
931
|
+
msg = f"You cannot use different slug names for the same dynamic path in {route} and {new_route} ('{r}' != '{nr}')"
|
|
932
|
+
raise RouteValueError(msg)
|
|
933
|
+
if rw not in segments and r != nr:
|
|
937
934
|
# if the section being compared in both routes is not a dynamic segment(i.e not wrapped in brackets)
|
|
938
935
|
# then we are guaranteed that the route is valid and there's no need checking the rest.
|
|
939
936
|
# eg. /posts/[id]/info/[slug1] and /posts/[id]/info1/[slug1] is always going to be valid since
|
|
@@ -1019,11 +1016,13 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1019
1016
|
Example:
|
|
1020
1017
|
>>> _get_frontend_packages({"react": "16.14.0", "react-dom": "16.14.0"})
|
|
1021
1018
|
"""
|
|
1019
|
+
dependencies = constants.PackageJson.DEPENDENCIES
|
|
1020
|
+
dev_dependencies = constants.PackageJson.DEV_DEPENDENCIES
|
|
1022
1021
|
page_imports = {
|
|
1023
1022
|
i
|
|
1024
1023
|
for i, tags in imports.items()
|
|
1025
|
-
if i not in
|
|
1026
|
-
and i not in
|
|
1024
|
+
if i not in dependencies
|
|
1025
|
+
and i not in dev_dependencies
|
|
1027
1026
|
and not any(i.startswith(prefix) for prefix in ["/", "$/", ".", "next/"])
|
|
1028
1027
|
and i != ""
|
|
1029
1028
|
and any(tag.install for tag in tags)
|
|
@@ -1086,9 +1085,7 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1086
1085
|
return component
|
|
1087
1086
|
|
|
1088
1087
|
# recreate OverlayFragment with overlay_component as first child
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
return component
|
|
1088
|
+
return OverlayFragment.create(overlay_component, *children)
|
|
1092
1089
|
|
|
1093
1090
|
def _setup_overlay_component(self):
|
|
1094
1091
|
"""If a State is not used and no overlay_component is specified, do not render the connection modal."""
|
|
@@ -1150,9 +1147,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1150
1147
|
)
|
|
1151
1148
|
for dep in dep_set:
|
|
1152
1149
|
if dep not in state_cls.vars and dep not in state_cls.backend_vars:
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
)
|
|
1150
|
+
msg = f"ComputedVar {var._js_expr} on state {state.__name__} has an invalid dependency {state_name}.{dep}"
|
|
1151
|
+
raise exceptions.VarDependencyError(msg)
|
|
1156
1152
|
|
|
1157
1153
|
for substate in state.class_subclasses:
|
|
1158
1154
|
self._validate_var_dependencies(substate)
|
|
@@ -1235,14 +1231,16 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1235
1231
|
|
|
1236
1232
|
# try to be somewhat accurate - but still not 100%
|
|
1237
1233
|
adhoc_steps_without_executor = 7
|
|
1238
|
-
fixed_pages_within_executor =
|
|
1234
|
+
fixed_pages_within_executor = 4
|
|
1235
|
+
plugin_count = len(config.plugins)
|
|
1239
1236
|
progress.start()
|
|
1240
1237
|
task = progress.add_task(
|
|
1241
1238
|
f"[{get_compilation_time()}] Compiling:",
|
|
1242
1239
|
total=len(self._pages)
|
|
1243
1240
|
+ (len(self._unevaluated_pages) * 2)
|
|
1244
1241
|
+ fixed_pages_within_executor
|
|
1245
|
-
+ adhoc_steps_without_executor
|
|
1242
|
+
+ adhoc_steps_without_executor
|
|
1243
|
+
+ plugin_count,
|
|
1246
1244
|
)
|
|
1247
1245
|
|
|
1248
1246
|
with console.timing("Evaluate Pages (Frontend)"):
|
|
@@ -1342,10 +1340,11 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1342
1340
|
|
|
1343
1341
|
# Catch "static" apps (that do not define a rx.State subclass) which are trying to access rx.State.
|
|
1344
1342
|
if code_uses_state_contexts(stateful_components_code) and self._state is None:
|
|
1345
|
-
|
|
1343
|
+
msg = (
|
|
1346
1344
|
"To access rx.State in frontend components, at least one "
|
|
1347
1345
|
"subclass of rx.State must be defined in the app."
|
|
1348
1346
|
)
|
|
1347
|
+
raise ReflexRuntimeError(msg)
|
|
1349
1348
|
compile_results.append((stateful_components_path, stateful_components_code))
|
|
1350
1349
|
|
|
1351
1350
|
progress.advance(task)
|
|
@@ -1412,9 +1411,17 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1412
1411
|
# Compile the theme.
|
|
1413
1412
|
_submit_work(compile_theme, self.style)
|
|
1414
1413
|
|
|
1414
|
+
def _submit_work_without_advancing(
|
|
1415
|
+
fn: Callable[P, list[tuple[str, str]] | tuple[str, str] | None],
|
|
1416
|
+
*args: P.args,
|
|
1417
|
+
**kwargs: P.kwargs,
|
|
1418
|
+
):
|
|
1419
|
+
f = executor.submit(fn, *args, **kwargs)
|
|
1420
|
+
result_futures.append(f)
|
|
1421
|
+
|
|
1415
1422
|
for plugin in config.plugins:
|
|
1416
1423
|
plugin.pre_compile(
|
|
1417
|
-
add_save_task=
|
|
1424
|
+
add_save_task=_submit_work_without_advancing,
|
|
1418
1425
|
add_modify_task=(
|
|
1419
1426
|
lambda *args, plugin=plugin: modify_files_tasks.append(
|
|
1420
1427
|
(
|
|
@@ -1433,6 +1440,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1433
1440
|
else:
|
|
1434
1441
|
compile_results.append(result)
|
|
1435
1442
|
|
|
1443
|
+
progress.advance(task, advance=len(config.plugins))
|
|
1444
|
+
|
|
1436
1445
|
app_root = self._app_root(app_wrappers=app_wrappers)
|
|
1437
1446
|
|
|
1438
1447
|
# Get imports from AppWrap components.
|
|
@@ -1529,9 +1538,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1529
1538
|
if path.exists():
|
|
1530
1539
|
file_content = path.read_text()
|
|
1531
1540
|
else:
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
)
|
|
1541
|
+
msg = f"Plugin {plugin_name} is trying to modify {path} but it does not exist."
|
|
1542
|
+
raise FileNotFoundError(msg)
|
|
1535
1543
|
output_mapping[path] = modify_fn(file_content)
|
|
1536
1544
|
|
|
1537
1545
|
with console.timing("Write to Disk"):
|
|
@@ -1574,7 +1582,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1574
1582
|
RuntimeError: If the app has not been initialized yet.
|
|
1575
1583
|
"""
|
|
1576
1584
|
if self.event_namespace is None:
|
|
1577
|
-
|
|
1585
|
+
msg = "App has not been initialized yet."
|
|
1586
|
+
raise RuntimeError(msg)
|
|
1578
1587
|
|
|
1579
1588
|
# Get exclusive access to the state.
|
|
1580
1589
|
async with self.state_manager.modify_state(token) as state:
|
|
@@ -1613,7 +1622,8 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1613
1622
|
RuntimeError: If the app has not been initialized yet.
|
|
1614
1623
|
"""
|
|
1615
1624
|
if self.event_namespace is None:
|
|
1616
|
-
|
|
1625
|
+
msg = "App has not been initialized yet."
|
|
1626
|
+
raise RuntimeError(msg)
|
|
1617
1627
|
|
|
1618
1628
|
# Process the event.
|
|
1619
1629
|
async for update in state._process_event(
|
|
@@ -1664,20 +1674,17 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1664
1674
|
_fn_name = type(handler_fn).__name__
|
|
1665
1675
|
|
|
1666
1676
|
if isinstance(handler_fn, functools.partial):
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
)
|
|
1677
|
+
msg = f"Provided custom {handler_domain} exception handler `{_fn_name}` is a partial function. Please provide a named function instead."
|
|
1678
|
+
raise ValueError(msg)
|
|
1670
1679
|
|
|
1671
1680
|
if not callable(handler_fn):
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
)
|
|
1681
|
+
msg = f"Provided custom {handler_domain} exception handler `{_fn_name}` is not a function."
|
|
1682
|
+
raise ValueError(msg)
|
|
1675
1683
|
|
|
1676
1684
|
# Allow named functions only as lambda functions cannot be introspected
|
|
1677
1685
|
if _fn_name == "<lambda>":
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
)
|
|
1686
|
+
msg = f"Provided custom {handler_domain} exception handler `{_fn_name}` is a lambda function. Please use a named function instead."
|
|
1687
|
+
raise ValueError(msg)
|
|
1681
1688
|
|
|
1682
1689
|
# Check if the function has the necessary annotations and types in the right order
|
|
1683
1690
|
argspec = inspect.getfullargspec(handler_fn)
|
|
@@ -1689,22 +1696,21 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1689
1696
|
|
|
1690
1697
|
for required_arg_index, required_arg in enumerate(handler_spec):
|
|
1691
1698
|
if required_arg not in arg_annotations:
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
not list(arg_annotations.keys())[required_arg_index] == required_arg
|
|
1697
|
-
):
|
|
1698
|
-
raise ValueError(
|
|
1699
|
+
msg = f"Provided custom {handler_domain} exception handler `{_fn_name}` does not take the required argument `{required_arg}`"
|
|
1700
|
+
raise ValueError(msg)
|
|
1701
|
+
if list(arg_annotations.keys())[required_arg_index] != required_arg:
|
|
1702
|
+
msg = (
|
|
1699
1703
|
f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong argument order."
|
|
1700
1704
|
f"Expected `{required_arg}` as the {required_arg_index + 1} argument but got `{list(arg_annotations.keys())[required_arg_index]}`"
|
|
1701
1705
|
)
|
|
1706
|
+
raise ValueError(msg)
|
|
1702
1707
|
|
|
1703
1708
|
if not issubclass(arg_annotations[required_arg], Exception):
|
|
1704
|
-
|
|
1709
|
+
msg = (
|
|
1705
1710
|
f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong type for {required_arg} argument."
|
|
1706
1711
|
f"Expected to be `Exception` but got `{arg_annotations[required_arg]}`"
|
|
1707
1712
|
)
|
|
1713
|
+
raise ValueError(msg)
|
|
1708
1714
|
|
|
1709
1715
|
# Check if the return type is valid for backend exception handler
|
|
1710
1716
|
if handler_domain == "backend":
|
|
@@ -1724,10 +1730,11 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1724
1730
|
)
|
|
1725
1731
|
|
|
1726
1732
|
if not valid:
|
|
1727
|
-
|
|
1733
|
+
msg = (
|
|
1728
1734
|
f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong return type."
|
|
1729
1735
|
f"Expected `EventSpec | list[EventSpec] | None` but got `{return_type}`"
|
|
1730
1736
|
)
|
|
1737
|
+
raise ValueError(msg)
|
|
1731
1738
|
|
|
1732
1739
|
|
|
1733
1740
|
async def process(
|
|
@@ -1896,7 +1903,8 @@ def upload(app: App):
|
|
|
1896
1903
|
return Response() # user cancelled
|
|
1897
1904
|
files = files.getlist("files")
|
|
1898
1905
|
if not files:
|
|
1899
|
-
|
|
1906
|
+
msg = "No files were uploaded."
|
|
1907
|
+
raise UploadValueError(msg)
|
|
1900
1908
|
|
|
1901
1909
|
token = request.headers.get("reflex-client-token")
|
|
1902
1910
|
handler = request.headers.get("reflex-event-handler")
|
|
@@ -1923,9 +1931,8 @@ def upload(app: App):
|
|
|
1923
1931
|
# check if there exists any handler args with annotation, list[UploadFile]
|
|
1924
1932
|
if isinstance(func, EventHandler):
|
|
1925
1933
|
if func.is_background:
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
)
|
|
1934
|
+
msg = f"@rx.event(background=True) is not supported for upload handler `{handler}`."
|
|
1935
|
+
raise UploadTypeError(msg)
|
|
1929
1936
|
func = func.fn
|
|
1930
1937
|
if isinstance(func, functools.partial):
|
|
1931
1938
|
func = func.func
|
|
@@ -1938,10 +1945,11 @@ def upload(app: App):
|
|
|
1938
1945
|
break
|
|
1939
1946
|
|
|
1940
1947
|
if not handler_upload_param:
|
|
1941
|
-
|
|
1948
|
+
msg = (
|
|
1942
1949
|
f"`{handler}` handler should have a parameter annotated as "
|
|
1943
1950
|
"list[rx.UploadFile]"
|
|
1944
1951
|
)
|
|
1952
|
+
raise UploadValueError(msg)
|
|
1945
1953
|
|
|
1946
1954
|
# Make a copy of the files as they are closed after the request.
|
|
1947
1955
|
# This behaviour changed from fastapi 0.103.0 to 0.103.1 as the
|
|
@@ -2084,32 +2092,31 @@ class EventNamespace(AsyncNamespace):
|
|
|
2084
2092
|
try:
|
|
2085
2093
|
fields = json.loads(fields)
|
|
2086
2094
|
except json.JSONDecodeError as ex:
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
) from ex
|
|
2095
|
+
msg = f"Failed to deserialize event data: {fields}."
|
|
2096
|
+
raise exceptions.EventDeserializationError(msg) from ex
|
|
2090
2097
|
|
|
2091
2098
|
if not isinstance(fields, dict):
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
)
|
|
2099
|
+
msg = f"Event data must be a dictionary, but received {fields} of type {type(fields)}."
|
|
2100
|
+
raise exceptions.EventDeserializationError(msg)
|
|
2095
2101
|
|
|
2096
2102
|
try:
|
|
2097
2103
|
# Get the event.
|
|
2098
2104
|
event = Event(**{k: v for k, v in fields.items() if k in _EVENT_FIELDS})
|
|
2099
2105
|
except (TypeError, ValueError) as ex:
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
) from ex
|
|
2106
|
+
msg = f"Failed to deserialize event data: {fields}."
|
|
2107
|
+
raise exceptions.EventDeserializationError(msg) from ex
|
|
2103
2108
|
|
|
2104
2109
|
self.token_to_sid[event.token] = sid
|
|
2105
2110
|
self.sid_to_token[sid] = event.token
|
|
2106
2111
|
|
|
2107
2112
|
# Get the event environment.
|
|
2108
2113
|
if self.app.sio is None:
|
|
2109
|
-
|
|
2114
|
+
msg = "Socket.IO is not initialized."
|
|
2115
|
+
raise RuntimeError(msg)
|
|
2110
2116
|
environ = self.app.sio.get_environ(sid, self.namespace)
|
|
2111
2117
|
if environ is None:
|
|
2112
|
-
|
|
2118
|
+
msg = "Socket.IO environ is not initialized."
|
|
2119
|
+
raise RuntimeError(msg)
|
|
2113
2120
|
|
|
2114
2121
|
# Get the client headers.
|
|
2115
2122
|
headers = {
|
|
@@ -67,9 +67,8 @@ class LifespanMixin(AppMixin):
|
|
|
67
67
|
InvalidLifespanTaskTypeError: If the task is a generator function.
|
|
68
68
|
"""
|
|
69
69
|
if inspect.isgeneratorfunction(task) or inspect.isasyncgenfunction(task):
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
)
|
|
70
|
+
msg = f"Task {task.__name__} of type generator must be decorated with contextlib.asynccontextmanager."
|
|
71
|
+
raise InvalidLifespanTaskTypeError(msg)
|
|
73
72
|
|
|
74
73
|
if task_kwargs:
|
|
75
74
|
original_task = task
|
|
@@ -58,9 +58,11 @@ def asset(
|
|
|
58
58
|
cwd = Path.cwd()
|
|
59
59
|
src_file_local = cwd / assets / path
|
|
60
60
|
if subfolder is not None:
|
|
61
|
-
|
|
61
|
+
msg = "Subfolder is not supported for local assets."
|
|
62
|
+
raise ValueError(msg)
|
|
62
63
|
if not backend_only and not src_file_local.exists():
|
|
63
|
-
|
|
64
|
+
msg = f"File not found: {src_file_local}"
|
|
65
|
+
raise FileNotFoundError(msg)
|
|
64
66
|
return f"/{path}"
|
|
65
67
|
|
|
66
68
|
# Shared asset handling
|
|
@@ -73,7 +75,8 @@ def asset(
|
|
|
73
75
|
external = constants.Dirs.EXTERNAL_APP_ASSETS
|
|
74
76
|
src_file_shared = Path(calling_file).parent / path
|
|
75
77
|
if not src_file_shared.exists():
|
|
76
|
-
|
|
78
|
+
msg = f"File not found: {src_file_shared}"
|
|
79
|
+
raise FileNotFoundError(msg)
|
|
77
80
|
|
|
78
81
|
caller_module_path = module.__name__.replace(".", "/")
|
|
79
82
|
subfolder = f"{caller_module_path}/{subfolder}" if subfolder else caller_module_path
|
|
@@ -30,10 +30,11 @@ def validate_field_name(bases: list[type[BaseModel]], field_name: str) -> None:
|
|
|
30
30
|
if not reload and getattr(base, field_name, None):
|
|
31
31
|
pass
|
|
32
32
|
except TypeError as te:
|
|
33
|
-
|
|
33
|
+
msg = (
|
|
34
34
|
f'State var "{field_name}" in {base} has been shadowed by a substate var; '
|
|
35
35
|
f'use a different field name instead".'
|
|
36
|
-
)
|
|
36
|
+
)
|
|
37
|
+
raise VarNameError(msg) from te
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
# monkeypatch pydantic validate_field_name method to skip validating
|