reflex 0.7.4a1__tar.gz → 0.7.4a2__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.4a1 → reflex-0.7.4a2}/PKG-INFO +3 -1
- {reflex-0.7.4a1 → reflex-0.7.4a2}/pyproject.toml +3 -2
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +9 -1
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app.py +4 -2
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/base.py +3 -3
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/compiler/compiler.py +5 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/component.py +6 -3
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/config.py +1 -1
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/reflex.py +8 -4
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/exec.py +39 -33
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/prerequisites.py +73 -2
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/processes.py +48 -16
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/base.py +0 -35
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/datetime.py +10 -34
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/number.py +16 -112
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/sequence.py +15 -108
- {reflex-0.7.4a1 → reflex-0.7.4a2}/.gitignore +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/LICENSE +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/README.md +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/components/shiki/code.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/next.config.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/styles/tailwind.css +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/client_side_routing.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/paste.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/state.js +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/__main__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/admin.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app_mixins/lifespan.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app_mixins/middleware.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app_mixins/mixin.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/assets.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/compiler/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/compiler/templates.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/compiler/utils.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/bare.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/body.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/body.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/document.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/document.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/error_boundary.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/error_boundary.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/fragment.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/head.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/head.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/link.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/link.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/meta.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/script.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/script.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/strict_mode.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/strict_mode.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/auto_scroll.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/auto_scroll.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/banner.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/breakpoints.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/client_side_routing.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/client_side_routing.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/clipboard.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/colors.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/cond.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/debounce.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/foreach.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/html.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/html.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/match.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/responsive.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/sticky.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/sticky.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/upload.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/upload.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/code.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/logo.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/shiki_code_block.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/dynamic.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/constants/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/constants/html.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/constants/react.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/constants/reflex.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/element.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/element.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/forms.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/media.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/media.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/literals.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/lucide/icon.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/lucide/icon.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/markdown/markdown.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/moment/moment.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/base.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/base.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/image.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/image.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/link.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/link.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/video.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/video.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/plotly/plotly.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/plotly/plotly.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/props.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/drawer.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/drawer.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/form.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/data_list.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/data_list.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/icon_button.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/progress.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/progress.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio_cards.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio_group.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/segmented_control.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/select.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/select.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/separator.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/separator.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/skeleton.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/spinner.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/spinner.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/text_field.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/text_field.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/list.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/list.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/video.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/__init__.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/cartesian.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/cartesian.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/charts.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/charts.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/general.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/general.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/recharts.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/recharts.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/sonner/toast.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/sonner/toast.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/suneditor/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/suneditor/editor.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/suneditor/editor.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/iter_tag.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/tag.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/base.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/colors.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/compiler.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/config.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/custom_components.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/event.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/installer.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/route.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/state.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/style.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/utils.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/custom_components/custom_components.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/event.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/client_state.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/hooks.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/layout.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/layout.pyi +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/misc.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/data.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/dynamic.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/proxy.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/storage.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/wrappers.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/middleware/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/middleware/middleware.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/model.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/page.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/py.typed +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/route.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/state.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/style.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/testing.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/build.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/codespaces.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/compat.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/console.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/decorator.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/exceptions.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/export.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/format.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/imports.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/lazy_loader.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/net.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/path_ops.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/pyi_generator.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/redir.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/registry.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/serializers.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/telemetry.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/types.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/__init__.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/dep_tracking.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/function.py +0 -0
- {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/object.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.4a2
|
|
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
|
|
@@ -24,6 +24,7 @@ Requires-Dist: charset-normalizer<4.0,>=3.3.2
|
|
|
24
24
|
Requires-Dist: distro<2.0,>=1.8.0; platform_system == 'Linux'
|
|
25
25
|
Requires-Dist: fastapi!=0.111.0,!=0.111.1,>=0.96.0
|
|
26
26
|
Requires-Dist: granian[reload]>=2.0.0
|
|
27
|
+
Requires-Dist: gunicorn<24.0.0,>=23.0.0
|
|
27
28
|
Requires-Dist: httpx<1.0,>=0.25.1
|
|
28
29
|
Requires-Dist: jinja2<4.0,>=3.1.2
|
|
29
30
|
Requires-Dist: lazy-loader>=0.4
|
|
@@ -44,6 +45,7 @@ Requires-Dist: tomlkit<1.0,>=0.12.4
|
|
|
44
45
|
Requires-Dist: twine<7.0,>=4.0.0
|
|
45
46
|
Requires-Dist: typer<1.0,>=0.15.1
|
|
46
47
|
Requires-Dist: typing-extensions>=4.6.0
|
|
48
|
+
Requires-Dist: uvicorn>=0.20.0
|
|
47
49
|
Requires-Dist: wheel<1.0,>=0.42.0
|
|
48
50
|
Requires-Dist: wrapt<2.0,>=1.17.0
|
|
49
51
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "reflex"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.4a2"
|
|
4
4
|
description = "Web apps in pure Python."
|
|
5
5
|
license = { text = "Apache-2.0" }
|
|
6
6
|
authors = [
|
|
@@ -26,6 +26,7 @@ dependencies = [
|
|
|
26
26
|
"distro >=1.8.0,<2.0; platform_system == 'Linux'",
|
|
27
27
|
"fastapi >=0.96.0,!=0.111.0,!=0.111.1",
|
|
28
28
|
"granian[reload] >=2.0.0",
|
|
29
|
+
"gunicorn >=23.0.0,<24.0.0",
|
|
29
30
|
"httpx >=0.25.1,<1.0",
|
|
30
31
|
"jinja2 >=3.1.2,<4.0",
|
|
31
32
|
"lazy_loader >=0.4",
|
|
@@ -46,6 +47,7 @@ dependencies = [
|
|
|
46
47
|
"twine >=4.0.0,<7.0",
|
|
47
48
|
"typer >=0.15.1,<1.0",
|
|
48
49
|
"typing_extensions >=4.6.0",
|
|
50
|
+
"uvicorn >=0.20.0",
|
|
49
51
|
"wheel >=0.42.0,<1.0",
|
|
50
52
|
"wrapt >=1.17.0,<2.0",
|
|
51
53
|
]
|
|
@@ -161,5 +163,4 @@ dev = [
|
|
|
161
163
|
"ruff ==0.11.0",
|
|
162
164
|
"selenium >=4.11.0,<5.0",
|
|
163
165
|
"toml >=0.10.2,<1.0",
|
|
164
|
-
"uvicorn >=0.20.0",
|
|
165
166
|
]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useTheme } from "next-themes";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
2
|
+
import { useRef, useEffect, useState } from "react";
|
|
3
3
|
import {
|
|
4
4
|
ColorModeContext,
|
|
5
5
|
defaultColorMode,
|
|
@@ -13,6 +13,14 @@ export default function RadixThemesColorModeProvider({ children }) {
|
|
|
13
13
|
const [resolvedColorMode, setResolvedColorMode] = useState(
|
|
14
14
|
defaultColorMode === "dark" ? "dark" : "light",
|
|
15
15
|
);
|
|
16
|
+
const firstUpdate = useRef(true);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (firstUpdate.current) {
|
|
19
|
+
firstUpdate.current = false;
|
|
20
|
+
setRawColorMode(theme);
|
|
21
|
+
setResolvedColorMode(resolvedTheme);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
16
24
|
|
|
17
25
|
useEffect(() => {
|
|
18
26
|
if (isDevMode) {
|
|
@@ -968,7 +968,7 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
968
968
|
# Check the nocompile file.
|
|
969
969
|
if nocompile.exists():
|
|
970
970
|
# Delete the nocompile file
|
|
971
|
-
nocompile.unlink()
|
|
971
|
+
nocompile.unlink(missing_ok=True)
|
|
972
972
|
return False
|
|
973
973
|
|
|
974
974
|
# By default, compile the app.
|
|
@@ -1258,7 +1258,9 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1258
1258
|
compiler.compile_document_root(
|
|
1259
1259
|
self.head_components,
|
|
1260
1260
|
html_lang=self.html_lang,
|
|
1261
|
-
html_custom_attrs=
|
|
1261
|
+
html_custom_attrs=(
|
|
1262
|
+
{**self.html_custom_attrs} if self.html_custom_attrs else {}
|
|
1263
|
+
),
|
|
1262
1264
|
)
|
|
1263
1265
|
)
|
|
1264
1266
|
|
|
@@ -38,7 +38,7 @@ def validate_field_name(bases: list[Type["BaseModel"]], field_name: str) -> None
|
|
|
38
38
|
|
|
39
39
|
# monkeypatch pydantic validate_field_name method to skip validating
|
|
40
40
|
# shadowed state vars when reloading app via utils.prerequisites.get_app(reload=True)
|
|
41
|
-
pydantic_main.validate_field_name = validate_field_name # pyright: ignore [
|
|
41
|
+
pydantic_main.validate_field_name = validate_field_name # pyright: ignore [reportPrivateImportUsage]
|
|
42
42
|
|
|
43
43
|
if TYPE_CHECKING:
|
|
44
44
|
from reflex.vars import Var
|
|
@@ -107,7 +107,7 @@ class Base(BaseModel):
|
|
|
107
107
|
default_value: The default value of the field
|
|
108
108
|
"""
|
|
109
109
|
var_name = var._var_field_name
|
|
110
|
-
new_field = ModelField.infer(
|
|
110
|
+
new_field = ModelField.infer(
|
|
111
111
|
name=var_name,
|
|
112
112
|
value=default_value,
|
|
113
113
|
annotation=var._var_type,
|
|
@@ -128,5 +128,5 @@ class Base(BaseModel):
|
|
|
128
128
|
if isinstance(key, str):
|
|
129
129
|
# Seems like this function signature was wrong all along?
|
|
130
130
|
# If the user wants a field that we know of, get it and pass it off to _get_value
|
|
131
|
-
return getattr(self, key
|
|
131
|
+
return getattr(self, key)
|
|
132
132
|
return key
|
|
@@ -20,6 +20,7 @@ from reflex.config import environment, get_config
|
|
|
20
20
|
from reflex.state import BaseState
|
|
21
21
|
from reflex.style import SYSTEM_COLOR_MODE
|
|
22
22
|
from reflex.utils import console, path_ops
|
|
23
|
+
from reflex.utils.exceptions import ReflexError
|
|
23
24
|
from reflex.utils.exec import is_prod_mode
|
|
24
25
|
from reflex.utils.imports import ImportVar
|
|
25
26
|
from reflex.utils.prerequisites import get_web_dir
|
|
@@ -651,6 +652,8 @@ def into_component(component: Component | ComponentCallable) -> Component:
|
|
|
651
652
|
):
|
|
652
653
|
return converted
|
|
653
654
|
except KeyError as e:
|
|
655
|
+
if isinstance(e, ReflexError):
|
|
656
|
+
raise
|
|
654
657
|
key = e.args[0] if e.args else None
|
|
655
658
|
if key is not None and isinstance(key, Var):
|
|
656
659
|
raise TypeError(
|
|
@@ -658,6 +661,8 @@ def into_component(component: Component | ComponentCallable) -> Component:
|
|
|
658
661
|
).with_traceback(e.__traceback__) from None
|
|
659
662
|
raise
|
|
660
663
|
except TypeError as e:
|
|
664
|
+
if isinstance(e, ReflexError):
|
|
665
|
+
raise
|
|
661
666
|
message = e.args[0] if e.args else None
|
|
662
667
|
if message and isinstance(message, str):
|
|
663
668
|
if message.endswith("has no len()") and (
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import contextlib
|
|
5
6
|
import copy
|
|
6
7
|
import dataclasses
|
|
7
8
|
import functools
|
|
@@ -1974,13 +1975,15 @@ class NoSSRComponent(Component):
|
|
|
1974
1975
|
# Do NOT import the main library/tag statically.
|
|
1975
1976
|
import_name = self._get_import_name()
|
|
1976
1977
|
if import_name is not None:
|
|
1977
|
-
|
|
1978
|
+
with contextlib.suppress(ValueError):
|
|
1979
|
+
_imports[import_name].remove(self.import_var)
|
|
1980
|
+
_imports[import_name].append(
|
|
1978
1981
|
imports.ImportVar(
|
|
1979
1982
|
tag=None,
|
|
1980
1983
|
render=False,
|
|
1981
1984
|
transpile=self._should_transpile(self.library),
|
|
1982
|
-
)
|
|
1983
|
-
|
|
1985
|
+
)
|
|
1986
|
+
)
|
|
1984
1987
|
|
|
1985
1988
|
return imports.merge_imports(
|
|
1986
1989
|
dynamic_import,
|
|
@@ -205,18 +205,22 @@ def _run(
|
|
|
205
205
|
prerequisites.check_latest_package_version(constants.Reflex.MODULE_NAME)
|
|
206
206
|
|
|
207
207
|
# Get the app module.
|
|
208
|
-
app_task = prerequisites.
|
|
208
|
+
app_task = prerequisites.compile_or_validate_app
|
|
209
|
+
args = (frontend,)
|
|
209
210
|
|
|
210
211
|
# Granian fails if the app is already imported.
|
|
211
212
|
if should_use_granian():
|
|
212
213
|
import concurrent.futures
|
|
213
214
|
|
|
214
215
|
compile_future = concurrent.futures.ProcessPoolExecutor(max_workers=1).submit(
|
|
215
|
-
app_task
|
|
216
|
+
app_task,
|
|
217
|
+
*args,
|
|
216
218
|
)
|
|
217
|
-
compile_future.result()
|
|
219
|
+
validation_result = compile_future.result()
|
|
218
220
|
else:
|
|
219
|
-
app_task()
|
|
221
|
+
validation_result = app_task(*args)
|
|
222
|
+
if not validation_result:
|
|
223
|
+
raise typer.Exit(1)
|
|
220
224
|
|
|
221
225
|
# Warn if schema is not up to date.
|
|
222
226
|
prerequisites.check_schema_up_to_date()
|
|
@@ -189,9 +189,11 @@ def run_frontend_prod(root: Path, port: str, backend_present: bool = True):
|
|
|
189
189
|
|
|
190
190
|
@once
|
|
191
191
|
def _warn_user_about_uvicorn():
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
192
|
+
# When we eventually switch to Granian by default, we should enable this warning.
|
|
193
|
+
if False:
|
|
194
|
+
console.warn(
|
|
195
|
+
"Using Uvicorn for backend as it is installed. This behavior will change in 0.8.0 to use Granian by default."
|
|
196
|
+
)
|
|
195
197
|
|
|
196
198
|
|
|
197
199
|
def should_use_granian():
|
|
@@ -357,70 +359,74 @@ def run_granian_backend(host: str, port: int, loglevel: LogLevel):
|
|
|
357
359
|
).serve()
|
|
358
360
|
|
|
359
361
|
|
|
362
|
+
def _deprecate_asgi_config(
|
|
363
|
+
config_name: str,
|
|
364
|
+
reason: str = "",
|
|
365
|
+
):
|
|
366
|
+
# When we eventually switch to Granian by default, we should enable this deprecation.
|
|
367
|
+
if False:
|
|
368
|
+
console.deprecate(
|
|
369
|
+
f"config.{config_name}",
|
|
370
|
+
reason=reason,
|
|
371
|
+
deprecation_version="0.7.5",
|
|
372
|
+
removal_version="0.8.0",
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
|
|
360
376
|
@once
|
|
361
377
|
def _get_backend_workers():
|
|
362
378
|
from reflex.utils import processes
|
|
363
379
|
|
|
364
380
|
config = get_config()
|
|
365
381
|
|
|
382
|
+
gunicorn_workers = config.gunicorn_workers or 0
|
|
383
|
+
|
|
366
384
|
if config.gunicorn_workers is not None:
|
|
367
|
-
|
|
368
|
-
"
|
|
369
|
-
|
|
370
|
-
deprecation_version="0.7.4",
|
|
371
|
-
removal_version="0.8.0",
|
|
385
|
+
_deprecate_asgi_config(
|
|
386
|
+
"gunicorn_workers",
|
|
387
|
+
"If you're using Granian, use GRANIAN_WORKERS instead.",
|
|
372
388
|
)
|
|
373
389
|
|
|
374
|
-
return (
|
|
375
|
-
processes.get_num_workers()
|
|
376
|
-
if not config.gunicorn_workers
|
|
377
|
-
else config.gunicorn_workers
|
|
378
|
-
)
|
|
390
|
+
return gunicorn_workers if gunicorn_workers else processes.get_num_workers()
|
|
379
391
|
|
|
380
392
|
|
|
381
393
|
@once
|
|
382
394
|
def _get_backend_timeout():
|
|
383
395
|
config = get_config()
|
|
384
396
|
|
|
397
|
+
timeout = config.timeout or 120
|
|
398
|
+
|
|
385
399
|
if config.timeout is not None:
|
|
386
|
-
|
|
387
|
-
"
|
|
388
|
-
|
|
389
|
-
deprecation_version="0.7.4",
|
|
390
|
-
removal_version="0.8.0",
|
|
400
|
+
_deprecate_asgi_config(
|
|
401
|
+
"timeout",
|
|
402
|
+
"If you're using Granian, use GRANIAN_WORKERS_LIFETIME instead.",
|
|
391
403
|
)
|
|
392
404
|
|
|
393
|
-
return
|
|
405
|
+
return timeout
|
|
394
406
|
|
|
395
407
|
|
|
396
408
|
@once
|
|
397
409
|
def _get_backend_max_requests():
|
|
398
410
|
config = get_config()
|
|
399
411
|
|
|
412
|
+
gunicorn_max_requests = config.gunicorn_max_requests or 120
|
|
413
|
+
|
|
400
414
|
if config.gunicorn_max_requests is not None:
|
|
401
|
-
|
|
402
|
-
"config.gunicorn_max_requests",
|
|
403
|
-
reason="",
|
|
404
|
-
deprecation_version="0.7.4",
|
|
405
|
-
removal_version="0.8.0",
|
|
406
|
-
)
|
|
415
|
+
_deprecate_asgi_config("gunicorn_max_requests")
|
|
407
416
|
|
|
408
|
-
return
|
|
417
|
+
return gunicorn_max_requests
|
|
409
418
|
|
|
410
419
|
|
|
411
420
|
@once
|
|
412
421
|
def _get_backend_max_requests_jitter():
|
|
413
422
|
config = get_config()
|
|
414
423
|
|
|
424
|
+
gunicorn_max_requests_jitter = config.gunicorn_max_requests_jitter or 25
|
|
425
|
+
|
|
415
426
|
if config.gunicorn_max_requests_jitter is not None:
|
|
416
|
-
|
|
417
|
-
"config.gunicorn_max_requests_jitter",
|
|
418
|
-
reason="",
|
|
419
|
-
deprecation_version="0.7.4",
|
|
420
|
-
removal_version="0.8.0",
|
|
421
|
-
)
|
|
427
|
+
_deprecate_asgi_config("gunicorn_max_requests_jitter")
|
|
422
428
|
|
|
423
|
-
return
|
|
429
|
+
return gunicorn_max_requests_jitter
|
|
424
430
|
|
|
425
431
|
|
|
426
432
|
def run_backend_prod(
|
|
@@ -8,6 +8,7 @@ import functools
|
|
|
8
8
|
import importlib
|
|
9
9
|
import importlib.metadata
|
|
10
10
|
import importlib.util
|
|
11
|
+
import io
|
|
11
12
|
import json
|
|
12
13
|
import os
|
|
13
14
|
import platform
|
|
@@ -183,7 +184,7 @@ def get_node_version() -> version.Version | None:
|
|
|
183
184
|
try:
|
|
184
185
|
result = processes.new_process([node_path, "-v"], run=True)
|
|
185
186
|
# The output will be in the form "vX.Y.Z", but version.parse() can handle it
|
|
186
|
-
return version.parse(result.stdout)
|
|
187
|
+
return version.parse(result.stdout)
|
|
187
188
|
except (FileNotFoundError, TypeError):
|
|
188
189
|
return None
|
|
189
190
|
|
|
@@ -200,7 +201,7 @@ def get_bun_version() -> version.Version | None:
|
|
|
200
201
|
try:
|
|
201
202
|
# Run the bun -v command and capture the output
|
|
202
203
|
result = processes.new_process([str(bun_path), "-v"], run=True)
|
|
203
|
-
return version.parse(str(result.stdout))
|
|
204
|
+
return version.parse(str(result.stdout))
|
|
204
205
|
except FileNotFoundError:
|
|
205
206
|
return None
|
|
206
207
|
except version.InvalidVersion as e:
|
|
@@ -449,6 +450,76 @@ def compile_app(reload: bool = False, export: bool = False) -> None:
|
|
|
449
450
|
get_compiled_app(reload=reload, export=export)
|
|
450
451
|
|
|
451
452
|
|
|
453
|
+
def _can_colorize() -> bool:
|
|
454
|
+
"""Check if the output can be colorized.
|
|
455
|
+
|
|
456
|
+
Copied from _colorize.can_colorize.
|
|
457
|
+
|
|
458
|
+
https://raw.githubusercontent.com/python/cpython/refs/heads/main/Lib/_colorize.py
|
|
459
|
+
|
|
460
|
+
Returns:
|
|
461
|
+
If the output can be colorized
|
|
462
|
+
"""
|
|
463
|
+
file = sys.stdout
|
|
464
|
+
|
|
465
|
+
if not sys.flags.ignore_environment:
|
|
466
|
+
if os.environ.get("PYTHON_COLORS") == "0":
|
|
467
|
+
return False
|
|
468
|
+
if os.environ.get("PYTHON_COLORS") == "1":
|
|
469
|
+
return True
|
|
470
|
+
if os.environ.get("NO_COLOR"):
|
|
471
|
+
return False
|
|
472
|
+
if os.environ.get("FORCE_COLOR"):
|
|
473
|
+
return True
|
|
474
|
+
if os.environ.get("TERM") == "dumb":
|
|
475
|
+
return False
|
|
476
|
+
|
|
477
|
+
if not hasattr(file, "fileno"):
|
|
478
|
+
return False
|
|
479
|
+
|
|
480
|
+
if sys.platform == "win32":
|
|
481
|
+
try:
|
|
482
|
+
import nt
|
|
483
|
+
|
|
484
|
+
if not nt._supports_virtual_terminal():
|
|
485
|
+
return False
|
|
486
|
+
except (ImportError, AttributeError):
|
|
487
|
+
return False
|
|
488
|
+
|
|
489
|
+
try:
|
|
490
|
+
return os.isatty(file.fileno())
|
|
491
|
+
except io.UnsupportedOperation:
|
|
492
|
+
return file.isatty()
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
def compile_or_validate_app(compile: bool = False) -> bool:
|
|
496
|
+
"""Compile or validate the app module based on the default config.
|
|
497
|
+
|
|
498
|
+
Args:
|
|
499
|
+
compile: Whether to compile the app.
|
|
500
|
+
|
|
501
|
+
Returns:
|
|
502
|
+
If the app is compiled successfully.
|
|
503
|
+
"""
|
|
504
|
+
try:
|
|
505
|
+
if compile:
|
|
506
|
+
compile_app()
|
|
507
|
+
else:
|
|
508
|
+
validate_app()
|
|
509
|
+
except Exception as e:
|
|
510
|
+
import traceback
|
|
511
|
+
|
|
512
|
+
sys_exception = sys.exception()
|
|
513
|
+
|
|
514
|
+
try:
|
|
515
|
+
colorize = _can_colorize()
|
|
516
|
+
traceback.print_exception(e, colorize=colorize) # pyright: ignore[reportCallIssue]
|
|
517
|
+
except Exception:
|
|
518
|
+
traceback.print_exception(sys_exception)
|
|
519
|
+
return False
|
|
520
|
+
return True
|
|
521
|
+
|
|
522
|
+
|
|
452
523
|
def get_redis() -> Redis | None:
|
|
453
524
|
"""Get the asynchronous redis client.
|
|
454
525
|
|
|
@@ -10,7 +10,7 @@ import signal
|
|
|
10
10
|
import subprocess
|
|
11
11
|
from concurrent import futures
|
|
12
12
|
from pathlib import Path
|
|
13
|
-
from typing import Any, Callable, Generator, Sequence, Tuple
|
|
13
|
+
from typing import Any, Callable, Generator, Literal, Sequence, Tuple, overload
|
|
14
14
|
|
|
15
15
|
import psutil
|
|
16
16
|
import typer
|
|
@@ -142,12 +142,30 @@ def handle_port(service_name: str, port: int, auto_increment: bool) -> int:
|
|
|
142
142
|
raise typer.Exit()
|
|
143
143
|
|
|
144
144
|
|
|
145
|
+
@overload
|
|
146
|
+
def new_process(
|
|
147
|
+
args: str | list[str] | list[str | None] | list[str | Path | None],
|
|
148
|
+
run: Literal[False] = False,
|
|
149
|
+
show_logs: bool = False,
|
|
150
|
+
**kwargs,
|
|
151
|
+
) -> subprocess.Popen[str]: ...
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@overload
|
|
155
|
+
def new_process(
|
|
156
|
+
args: str | list[str] | list[str | None] | list[str | Path | None],
|
|
157
|
+
run: Literal[True],
|
|
158
|
+
show_logs: bool = False,
|
|
159
|
+
**kwargs,
|
|
160
|
+
) -> subprocess.CompletedProcess[str]: ...
|
|
161
|
+
|
|
162
|
+
|
|
145
163
|
def new_process(
|
|
146
164
|
args: str | list[str] | list[str | None] | list[str | Path | None],
|
|
147
165
|
run: bool = False,
|
|
148
166
|
show_logs: bool = False,
|
|
149
167
|
**kwargs,
|
|
150
|
-
):
|
|
168
|
+
) -> subprocess.CompletedProcess[str] | subprocess.Popen[str]:
|
|
151
169
|
"""Wrapper over subprocess.Popen to unify the launch of child processes.
|
|
152
170
|
|
|
153
171
|
Args:
|
|
@@ -163,7 +181,8 @@ def new_process(
|
|
|
163
181
|
Exit: When attempting to run a command with a None value.
|
|
164
182
|
"""
|
|
165
183
|
# Check for invalid command first.
|
|
166
|
-
if isinstance(args, list)
|
|
184
|
+
non_empty_args = list(filter(None, args)) if isinstance(args, list) else [args]
|
|
185
|
+
if isinstance(args, list) and len(non_empty_args) != len(args):
|
|
167
186
|
console.error(f"Invalid command: {args}")
|
|
168
187
|
raise typer.Exit(1)
|
|
169
188
|
|
|
@@ -190,9 +209,15 @@ def new_process(
|
|
|
190
209
|
"errors": "replace", # Avoid UnicodeDecodeError in unknown command output
|
|
191
210
|
**kwargs,
|
|
192
211
|
}
|
|
193
|
-
console.debug(f"Running command: {
|
|
194
|
-
|
|
195
|
-
|
|
212
|
+
console.debug(f"Running command: {non_empty_args}")
|
|
213
|
+
|
|
214
|
+
def subprocess_p_open(args: subprocess._CMD, **kwargs):
|
|
215
|
+
return subprocess.Popen(args, **kwargs)
|
|
216
|
+
|
|
217
|
+
fn: Callable[..., subprocess.CompletedProcess[str] | subprocess.Popen[str]] = (
|
|
218
|
+
subprocess.run if run else subprocess_p_open
|
|
219
|
+
)
|
|
220
|
+
return fn(non_empty_args, **kwargs)
|
|
196
221
|
|
|
197
222
|
|
|
198
223
|
@contextlib.contextmanager
|
|
@@ -311,6 +336,7 @@ def show_status(
|
|
|
311
336
|
process: subprocess.Popen,
|
|
312
337
|
suppress_errors: bool = False,
|
|
313
338
|
analytics_enabled: bool = False,
|
|
339
|
+
prior_processes: Tuple[subprocess.Popen, ...] = (),
|
|
314
340
|
):
|
|
315
341
|
"""Show the status of a process.
|
|
316
342
|
|
|
@@ -319,15 +345,17 @@ def show_status(
|
|
|
319
345
|
process: The process.
|
|
320
346
|
suppress_errors: If True, do not exit if errors are encountered (for fallback).
|
|
321
347
|
analytics_enabled: Whether analytics are enabled for this command.
|
|
348
|
+
prior_processes: The prior processes that have been run.
|
|
322
349
|
"""
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
350
|
+
for one_process in (*prior_processes, process):
|
|
351
|
+
with console.status(message) as status:
|
|
352
|
+
for line in stream_logs(
|
|
353
|
+
message,
|
|
354
|
+
one_process,
|
|
355
|
+
suppress_errors=suppress_errors,
|
|
356
|
+
analytics_enabled=analytics_enabled,
|
|
357
|
+
):
|
|
358
|
+
status.update(f"{message} {line}")
|
|
331
359
|
|
|
332
360
|
|
|
333
361
|
def show_progress(message: str, process: subprocess.Popen, checkpoints: list[str]):
|
|
@@ -381,6 +409,7 @@ def run_process_with_fallbacks(
|
|
|
381
409
|
show_status_message: str,
|
|
382
410
|
fallbacks: str | Sequence[str] | Sequence[Sequence[str]] | None = None,
|
|
383
411
|
analytics_enabled: bool = False,
|
|
412
|
+
prior_processes: Tuple[subprocess.Popen, ...] = (),
|
|
384
413
|
**kwargs,
|
|
385
414
|
):
|
|
386
415
|
"""Run subprocess and retry using fallback command if initial command fails.
|
|
@@ -390,7 +419,8 @@ def run_process_with_fallbacks(
|
|
|
390
419
|
show_status_message: The status message to be displayed in the console.
|
|
391
420
|
fallbacks: The fallback command to run if the initial command fails.
|
|
392
421
|
analytics_enabled: Whether analytics are enabled for this command.
|
|
393
|
-
|
|
422
|
+
prior_processes: The prior processes that have been run.
|
|
423
|
+
**kwargs: Kwargs to pass to new_process function.
|
|
394
424
|
"""
|
|
395
425
|
process = new_process(get_command_with_loglevel(args), **kwargs)
|
|
396
426
|
if not fallbacks:
|
|
@@ -399,6 +429,7 @@ def run_process_with_fallbacks(
|
|
|
399
429
|
show_status_message,
|
|
400
430
|
process,
|
|
401
431
|
analytics_enabled=analytics_enabled,
|
|
432
|
+
prior_processes=prior_processes,
|
|
402
433
|
)
|
|
403
434
|
else:
|
|
404
435
|
# Suppress errors for initial command, because we will try to fallback
|
|
@@ -411,7 +442,7 @@ def run_process_with_fallbacks(
|
|
|
411
442
|
# retry with fallback command.
|
|
412
443
|
fallback_with_args = (
|
|
413
444
|
[current_fallback, *args[1:]]
|
|
414
|
-
if isinstance(
|
|
445
|
+
if isinstance(current_fallback, str)
|
|
415
446
|
else [*current_fallback, *args[1:]]
|
|
416
447
|
)
|
|
417
448
|
console.warn(
|
|
@@ -422,6 +453,7 @@ def run_process_with_fallbacks(
|
|
|
422
453
|
show_status_message=show_status_message,
|
|
423
454
|
fallbacks=next_fallbacks,
|
|
424
455
|
analytics_enabled=analytics_enabled,
|
|
456
|
+
prior_processes=(*prior_processes, process),
|
|
425
457
|
**kwargs,
|
|
426
458
|
)
|
|
427
459
|
|
|
@@ -3016,41 +3016,6 @@ _decode_var_pattern = re.compile(_decode_var_pattern_re, flags=re.DOTALL)
|
|
|
3016
3016
|
_global_vars: dict[int, Var] = {}
|
|
3017
3017
|
|
|
3018
3018
|
|
|
3019
|
-
def _extract_var_data(value: Iterable) -> list[VarData | None]:
|
|
3020
|
-
"""Extract the var imports and hooks from an iterable containing a Var.
|
|
3021
|
-
|
|
3022
|
-
Args:
|
|
3023
|
-
value: The iterable to extract the VarData from
|
|
3024
|
-
|
|
3025
|
-
Returns:
|
|
3026
|
-
The extracted VarDatas.
|
|
3027
|
-
"""
|
|
3028
|
-
from reflex.style import Style
|
|
3029
|
-
from reflex.vars import Var
|
|
3030
|
-
|
|
3031
|
-
var_datas = []
|
|
3032
|
-
with contextlib.suppress(TypeError):
|
|
3033
|
-
for sub in value:
|
|
3034
|
-
if isinstance(sub, Var):
|
|
3035
|
-
var_datas.append(sub._var_data)
|
|
3036
|
-
elif not isinstance(sub, str):
|
|
3037
|
-
# Recurse into dict values.
|
|
3038
|
-
if hasattr(sub, "values") and callable(sub.values):
|
|
3039
|
-
var_datas.extend(_extract_var_data(sub.values())) # pyright: ignore [reportArgumentType]
|
|
3040
|
-
# Recurse into iterable values (or dict keys).
|
|
3041
|
-
var_datas.extend(_extract_var_data(sub))
|
|
3042
|
-
|
|
3043
|
-
# Style objects should already have _var_data.
|
|
3044
|
-
if isinstance(value, Style):
|
|
3045
|
-
var_datas.append(value._var_data)
|
|
3046
|
-
else:
|
|
3047
|
-
# Recurse when value is a dict itself.
|
|
3048
|
-
values = getattr(value, "values", None)
|
|
3049
|
-
if callable(values):
|
|
3050
|
-
var_datas.extend(_extract_var_data(values())) # pyright: ignore [reportArgumentType]
|
|
3051
|
-
return var_datas
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
3019
|
dispatchers: dict[GenericType, Callable[[Var], Var]] = {}
|
|
3055
3020
|
|
|
3056
3021
|
|