Lazy import modules in reflex (#2144)

This commit is contained in:
Nikhil Rao 2023-11-13 19:48:12 -08:00 committed by GitHub
parent 8b935862c2
commit 33e4816950
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 994 additions and 212 deletions

View File

@ -4,44 +4,314 @@ Anything imported here will be available in the default Reflex import as `rx.*`.
To signal to typecheckers that something should be reexported,
we use the Flask "import name as name" syntax.
"""
import importlib
from typing import Type
from . import el as el
from .admin import AdminDash as AdminDash
from .app import App as App
from .app import UploadFile as UploadFile
from .base import Base as Base
from .compiler.utils import get_asset_path
from .components import *
from .components.component import custom_component as memo
from .components.graphing import recharts as recharts
from .config import Config as Config
from .config import DBConfig as DBConfig
from .constants import Env as Env
from .event import EventChain as EventChain
from .event import FileUpload as upload_files
from .event import background as background
from .event import call_script as call_script
from .event import clear_local_storage as clear_local_storage
from .event import console_log as console_log
from .event import download as download
from .event import prevent_default as prevent_default
from .event import redirect as redirect
from .event import remove_cookie as remove_cookie
from .event import remove_local_storage as remove_local_storage
from .event import set_clipboard as set_clipboard
from .event import set_focus as set_focus
from .event import set_value as set_value
from .event import stop_propagation as stop_propagation
from .event import window_alert as window_alert
from .middleware import Middleware as Middleware
from .model import Model as Model
from .model import session as session
from .page import page as page
from .state import ComputedVar as var
from .state import Cookie as Cookie
from .state import LocalStorage as LocalStorage
from .state import State as State
from .style import color_mode as color_mode
from .style import toggle_color_mode as toggle_color_mode
from .vars import Var as Var
from .vars import cached_var as cached_var
from reflex.page import page as page
from reflex.utils.format import to_snake_case
_ALL_COMPONENTS = [
"Accordion",
"AccordionButton",
"AccordionIcon",
"AccordionItem",
"AccordionPanel",
"Alert",
"AlertDescription",
"AlertDialog",
"AlertDialogBody",
"AlertDialogContent",
"AlertDialogFooter",
"AlertDialogHeader",
"AlertDialogOverlay",
"AlertIcon",
"AlertTitle",
"AspectRatio",
"Audio",
"Avatar",
"AvatarBadge",
"AvatarGroup",
"Badge",
"Box",
"Breadcrumb",
"BreadcrumbItem",
"BreadcrumbLink",
"BreadcrumbSeparator",
"Button",
"ButtonGroup",
"Card",
"CardBody",
"CardFooter",
"CardHeader",
"Center",
"Checkbox",
"CheckboxGroup",
"CircularProgress",
"CircularProgressLabel",
"Circle",
"Code",
"CodeBlock",
"Collapse",
"ColorModeButton",
"ColorModeIcon",
"ColorModeSwitch",
"Component",
"Cond",
"Container",
"DataTable",
"DataEditor",
"DebounceInput",
"Divider",
"Drawer",
"DrawerBody",
"DrawerCloseButton",
"DrawerContent",
"DrawerFooter",
"DrawerHeader",
"DrawerOverlay",
"Editable",
"EditableInput",
"EditablePreview",
"EditableTextarea",
"Editor",
"Email",
"Fade",
"Flex",
"Foreach",
"Form",
"FormControl",
"FormErrorMessage",
"FormHelperText",
"FormLabel",
"Fragment",
"Grid",
"GridItem",
"Heading",
"Highlight",
"Hstack",
"Html",
"Icon",
"IconButton",
"Image",
"Input",
"InputGroup",
"InputLeftAddon",
"InputLeftElement",
"InputRightAddon",
"InputRightElement",
"Kbd",
"Link",
"LinkBox",
"LinkOverlay",
"List",
"ListItem",
"Markdown",
"Menu",
"MenuButton",
"MenuDivider",
"MenuGroup",
"MenuItem",
"MenuItemOption",
"MenuList",
"MenuOptionGroup",
"Modal",
"ModalBody",
"ModalCloseButton",
"ModalContent",
"ModalFooter",
"ModalHeader",
"ModalOverlay",
"Moment",
"MultiSelect",
"MultiSelectOption",
"NextLink",
"NumberDecrementStepper",
"NumberIncrementStepper",
"NumberInput",
"NumberInputField",
"NumberInputStepper",
"Option",
"OrderedList",
"Password",
"PinInput",
"PinInputField",
"Plotly",
"Popover",
"PopoverAnchor",
"PopoverArrow",
"PopoverBody",
"PopoverCloseButton",
"PopoverContent",
"PopoverFooter",
"PopoverHeader",
"PopoverTrigger",
"Progress",
"Radio",
"RadioGroup",
"RangeSlider",
"RangeSliderFilledTrack",
"RangeSliderThumb",
"RangeSliderTrack",
"ResponsiveGrid",
"ScaleFade",
"Script",
"Select",
"Skeleton",
"SkeletonCircle",
"SkeletonText",
"Slide",
"SlideFade",
"Slider",
"SliderFilledTrack",
"SliderMark",
"SliderThumb",
"SliderTrack",
"Spacer",
"Span",
"Spinner",
"Square",
"Stack",
"Stat",
"StatArrow",
"StatGroup",
"StatHelpText",
"StatLabel",
"StatArrow",
"StatGroup",
"StatHelpText",
"StatLabel",
"StatNumber",
"Step",
"StepDescription",
"StepIcon",
"StepIndicator",
"StepNumber",
"StepSeparator",
"StepStatus",
"StepTitle",
"Stepper",
"Switch",
"Tab",
"TabList",
"TabPanel",
"TabPanels",
"Table",
"TableCaption",
"TableContainer",
"Tabs",
"Tag",
"TagCloseButton",
"TagLabel",
"TagLeftIcon",
"TagRightIcon",
"Tbody",
"Td",
"Text",
"TextArea",
"Tfoot",
"Th",
"Thead",
"Tooltip",
"Tr",
"UnorderedList",
"Upload",
"Video",
"VisuallyHidden",
"Vstack",
"Wrap",
"WrapItem",
]
_ALL_COMPONENTS += [to_snake_case(component) for component in _ALL_COMPONENTS]
_ALL_COMPONENTS += [
"components",
"desktop_only",
"mobile_only",
"tablet_only",
"mobile_and_tablet",
"tablet_and_desktop",
"selected_files",
"clear_selected_files",
"EditorOptions",
]
_MAPPING = {
"reflex.admin": ["admin", "AdminDash"],
"reflex.app": ["app", "App", "UploadFile"],
"reflex.base": ["base", "Base"],
"reflex.compiler": ["compiler"],
"reflex.compiler.utils": ["get_asset_path"],
"reflex.components": _ALL_COMPONENTS,
"reflex.components.component": ["memo"],
"reflex.components.graphing": ["recharts"],
"reflex.config": ["config", "Config", "DBConfig"],
"reflex.constants": ["constants", "Env"],
"reflex.el": ["el"],
"reflex.event": [
"event",
"EventChain",
"background",
"call_script",
"clear_local_storage",
"console_log",
"download",
"prevent_default",
"redirect",
"remove_cookie",
"remove_local_storage",
"set_clipboard",
"set_focus",
"set_value",
"stop_propagation",
"upload_files",
"window_alert",
],
"reflex.middleware": ["middleware", "Middleware"],
"reflex.model": ["model", "session", "Model"],
"reflex.page": ["page"],
"reflex.route": ["route"],
"reflex.state": ["state", "var", "Cookie", "LocalStorage", "State"],
"reflex.style": ["style", "color_mode", "toggle_color_mode"],
"reflex.testing": ["testing"],
"reflex.utils": ["utils"],
"reflex.vars": ["vars", "cached_var", "Var"],
}
_MAPPING = {value: key for key, values in _MAPPING.items() for value in values}
def _removeprefix(text, prefix):
return text[text.startswith(prefix) and len(prefix) :]
__all__ = [_removeprefix(mod, "reflex.") for mod in _MAPPING]
def __getattr__(name: str) -> Type:
"""Lazy load all modules.
Args:
name: name of the module to load.
Returns:
The module or the attribute of the module.
Raises:
AttributeError: If the module or the attribute does not exist.
"""
try:
# Check for import of a module that is not in the mapping.
if name not in _MAPPING:
# If the name does not start with reflex, add it.
if not name.startswith("reflex") and name != "__all__":
name = f"reflex.{name}"
return importlib.import_module(name)
# Import the module.
module = importlib.import_module(_MAPPING[name])
# Get the attribute from the module if the name is not the module itself.
return (
getattr(module, name) if name != _MAPPING[name].rsplit(".")[-1] else module
)
except ModuleNotFoundError:
raise AttributeError(f"module 'reflex' has no attribute {name}") from None

473
reflex/__init__.pyi Normal file
View File

@ -0,0 +1,473 @@
from reflex import admin as admin
from reflex.admin import AdminDash as AdminDash
from reflex import app as app
from reflex.app import App as App
from reflex.app import UploadFile as UploadFile
from reflex import base as base
from reflex.base import Base as Base
from reflex import compiler as compiler
from reflex.compiler.utils import get_asset_path as get_asset_path
from reflex.components import Accordion as Accordion
from reflex.components import AccordionButton as AccordionButton
from reflex.components import AccordionIcon as AccordionIcon
from reflex.components import AccordionItem as AccordionItem
from reflex.components import AccordionPanel as AccordionPanel
from reflex.components import Alert as Alert
from reflex.components import AlertDescription as AlertDescription
from reflex.components import AlertDialog as AlertDialog
from reflex.components import AlertDialogBody as AlertDialogBody
from reflex.components import AlertDialogContent as AlertDialogContent
from reflex.components import AlertDialogFooter as AlertDialogFooter
from reflex.components import AlertDialogHeader as AlertDialogHeader
from reflex.components import AlertDialogOverlay as AlertDialogOverlay
from reflex.components import AlertIcon as AlertIcon
from reflex.components import AlertTitle as AlertTitle
from reflex.components import AspectRatio as AspectRatio
from reflex.components import Audio as Audio
from reflex.components import Avatar as Avatar
from reflex.components import AvatarBadge as AvatarBadge
from reflex.components import AvatarGroup as AvatarGroup
from reflex.components import Badge as Badge
from reflex.components import Box as Box
from reflex.components import Breadcrumb as Breadcrumb
from reflex.components import BreadcrumbItem as BreadcrumbItem
from reflex.components import BreadcrumbLink as BreadcrumbLink
from reflex.components import BreadcrumbSeparator as BreadcrumbSeparator
from reflex.components import Button as Button
from reflex.components import ButtonGroup as ButtonGroup
from reflex.components import Card as Card
from reflex.components import CardBody as CardBody
from reflex.components import CardFooter as CardFooter
from reflex.components import CardHeader as CardHeader
from reflex.components import Center as Center
from reflex.components import Checkbox as Checkbox
from reflex.components import CheckboxGroup as CheckboxGroup
from reflex.components import CircularProgress as CircularProgress
from reflex.components import CircularProgressLabel as CircularProgressLabel
from reflex.components import Circle as Circle
from reflex.components import Code as Code
from reflex.components import CodeBlock as CodeBlock
from reflex.components import Collapse as Collapse
from reflex.components import ColorModeButton as ColorModeButton
from reflex.components import ColorModeIcon as ColorModeIcon
from reflex.components import ColorModeSwitch as ColorModeSwitch
from reflex.components import Component as Component
from reflex.components import Cond as Cond
from reflex.components import Container as Container
from reflex.components import DataTable as DataTable
from reflex.components import DataEditor as DataEditor
from reflex.components import DebounceInput as DebounceInput
from reflex.components import Divider as Divider
from reflex.components import Drawer as Drawer
from reflex.components import DrawerBody as DrawerBody
from reflex.components import DrawerCloseButton as DrawerCloseButton
from reflex.components import DrawerContent as DrawerContent
from reflex.components import DrawerFooter as DrawerFooter
from reflex.components import DrawerHeader as DrawerHeader
from reflex.components import DrawerOverlay as DrawerOverlay
from reflex.components import Editable as Editable
from reflex.components import EditableInput as EditableInput
from reflex.components import EditablePreview as EditablePreview
from reflex.components import EditableTextarea as EditableTextarea
from reflex.components import Editor as Editor
from reflex.components import Email as Email
from reflex.components import Fade as Fade
from reflex.components import Flex as Flex
from reflex.components import Foreach as Foreach
from reflex.components import Form as Form
from reflex.components import FormControl as FormControl
from reflex.components import FormErrorMessage as FormErrorMessage
from reflex.components import FormHelperText as FormHelperText
from reflex.components import FormLabel as FormLabel
from reflex.components import Fragment as Fragment
from reflex.components import Grid as Grid
from reflex.components import GridItem as GridItem
from reflex.components import Heading as Heading
from reflex.components import Highlight as Highlight
from reflex.components import Hstack as Hstack
from reflex.components import Html as Html
from reflex.components import Icon as Icon
from reflex.components import IconButton as IconButton
from reflex.components import Image as Image
from reflex.components import Input as Input
from reflex.components import InputGroup as InputGroup
from reflex.components import InputLeftAddon as InputLeftAddon
from reflex.components import InputLeftElement as InputLeftElement
from reflex.components import InputRightAddon as InputRightAddon
from reflex.components import InputRightElement as InputRightElement
from reflex.components import Kbd as Kbd
from reflex.components import Link as Link
from reflex.components import LinkBox as LinkBox
from reflex.components import LinkOverlay as LinkOverlay
from reflex.components import List as List
from reflex.components import ListItem as ListItem
from reflex.components import Markdown as Markdown
from reflex.components import Menu as Menu
from reflex.components import MenuButton as MenuButton
from reflex.components import MenuDivider as MenuDivider
from reflex.components import MenuGroup as MenuGroup
from reflex.components import MenuItem as MenuItem
from reflex.components import MenuItemOption as MenuItemOption
from reflex.components import MenuList as MenuList
from reflex.components import MenuOptionGroup as MenuOptionGroup
from reflex.components import Modal as Modal
from reflex.components import ModalBody as ModalBody
from reflex.components import ModalCloseButton as ModalCloseButton
from reflex.components import ModalContent as ModalContent
from reflex.components import ModalFooter as ModalFooter
from reflex.components import ModalHeader as ModalHeader
from reflex.components import ModalOverlay as ModalOverlay
from reflex.components import Moment as Moment
from reflex.components import MultiSelect as MultiSelect
from reflex.components import MultiSelectOption as MultiSelectOption
from reflex.components import NextLink as NextLink
from reflex.components import NumberDecrementStepper as NumberDecrementStepper
from reflex.components import NumberIncrementStepper as NumberIncrementStepper
from reflex.components import NumberInput as NumberInput
from reflex.components import NumberInputField as NumberInputField
from reflex.components import NumberInputStepper as NumberInputStepper
from reflex.components import Option as Option
from reflex.components import OrderedList as OrderedList
from reflex.components import Password as Password
from reflex.components import PinInput as PinInput
from reflex.components import PinInputField as PinInputField
from reflex.components import Plotly as Plotly
from reflex.components import Popover as Popover
from reflex.components import PopoverAnchor as PopoverAnchor
from reflex.components import PopoverArrow as PopoverArrow
from reflex.components import PopoverBody as PopoverBody
from reflex.components import PopoverCloseButton as PopoverCloseButton
from reflex.components import PopoverContent as PopoverContent
from reflex.components import PopoverFooter as PopoverFooter
from reflex.components import PopoverHeader as PopoverHeader
from reflex.components import PopoverTrigger as PopoverTrigger
from reflex.components import Progress as Progress
from reflex.components import Radio as Radio
from reflex.components import RadioGroup as RadioGroup
from reflex.components import RangeSlider as RangeSlider
from reflex.components import RangeSliderFilledTrack as RangeSliderFilledTrack
from reflex.components import RangeSliderThumb as RangeSliderThumb
from reflex.components import RangeSliderTrack as RangeSliderTrack
from reflex.components import ResponsiveGrid as ResponsiveGrid
from reflex.components import ScaleFade as ScaleFade
from reflex.components import Script as Script
from reflex.components import Select as Select
from reflex.components import Skeleton as Skeleton
from reflex.components import SkeletonCircle as SkeletonCircle
from reflex.components import SkeletonText as SkeletonText
from reflex.components import Slide as Slide
from reflex.components import SlideFade as SlideFade
from reflex.components import Slider as Slider
from reflex.components import SliderFilledTrack as SliderFilledTrack
from reflex.components import SliderMark as SliderMark
from reflex.components import SliderThumb as SliderThumb
from reflex.components import SliderTrack as SliderTrack
from reflex.components import Spacer as Spacer
from reflex.components import Span as Span
from reflex.components import Spinner as Spinner
from reflex.components import Square as Square
from reflex.components import Stack as Stack
from reflex.components import Stat as Stat
from reflex.components import StatArrow as StatArrow
from reflex.components import StatGroup as StatGroup
from reflex.components import StatHelpText as StatHelpText
from reflex.components import StatLabel as StatLabel
from reflex.components import StatNumber as StatNumber
from reflex.components import Step as Step
from reflex.components import StepDescription as StepDescription
from reflex.components import StepIcon as StepIcon
from reflex.components import StepIndicator as StepIndicator
from reflex.components import StepNumber as StepNumber
from reflex.components import StepSeparator as StepSeparator
from reflex.components import StepStatus as StepStatus
from reflex.components import StepTitle as StepTitle
from reflex.components import Stepper as Stepper
from reflex.components import Switch as Switch
from reflex.components import Tab as Tab
from reflex.components import TabList as TabList
from reflex.components import TabPanel as TabPanel
from reflex.components import TabPanels as TabPanels
from reflex.components import Table as Table
from reflex.components import TableCaption as TableCaption
from reflex.components import TableContainer as TableContainer
from reflex.components import Tabs as Tabs
from reflex.components import Tag as Tag
from reflex.components import TagCloseButton as TagCloseButton
from reflex.components import TagLabel as TagLabel
from reflex.components import TagLeftIcon as TagLeftIcon
from reflex.components import TagRightIcon as TagRightIcon
from reflex.components import Tbody as Tbody
from reflex.components import Td as Td
from reflex.components import Text as Text
from reflex.components import TextArea as TextArea
from reflex.components import Tfoot as Tfoot
from reflex.components import Th as Th
from reflex.components import Thead as Thead
from reflex.components import Tooltip as Tooltip
from reflex.components import Tr as Tr
from reflex.components import UnorderedList as UnorderedList
from reflex.components import Upload as Upload
from reflex.components import Video as Video
from reflex.components import VisuallyHidden as VisuallyHidden
from reflex.components import Vstack as Vstack
from reflex.components import Wrap as Wrap
from reflex.components import WrapItem as WrapItem
from reflex.components import accordion as accordion
from reflex.components import accordion_button as accordion_button
from reflex.components import accordion_icon as accordion_icon
from reflex.components import accordion_item as accordion_item
from reflex.components import accordion_panel as accordion_panel
from reflex.components import alert as alert
from reflex.components import alert_description as alert_description
from reflex.components import alert_dialog as alert_dialog
from reflex.components import alert_dialog_body as alert_dialog_body
from reflex.components import alert_dialog_content as alert_dialog_content
from reflex.components import alert_dialog_footer as alert_dialog_footer
from reflex.components import alert_dialog_header as alert_dialog_header
from reflex.components import alert_dialog_overlay as alert_dialog_overlay
from reflex.components import alert_icon as alert_icon
from reflex.components import alert_title as alert_title
from reflex.components import aspect_ratio as aspect_ratio
from reflex.components import audio as audio
from reflex.components import avatar as avatar
from reflex.components import avatar_badge as avatar_badge
from reflex.components import avatar_group as avatar_group
from reflex.components import badge as badge
from reflex.components import box as box
from reflex.components import breadcrumb as breadcrumb
from reflex.components import breadcrumb_item as breadcrumb_item
from reflex.components import breadcrumb_link as breadcrumb_link
from reflex.components import breadcrumb_separator as breadcrumb_separator
from reflex.components import button as button
from reflex.components import button_group as button_group
from reflex.components import card as card
from reflex.components import card_body as card_body
from reflex.components import card_footer as card_footer
from reflex.components import card_header as card_header
from reflex.components import center as center
from reflex.components import checkbox as checkbox
from reflex.components import checkbox_group as checkbox_group
from reflex.components import circular_progress as circular_progress
from reflex.components import circular_progress_label as circular_progress_label
from reflex.components import circle as circle
from reflex.components import code as code
from reflex.components import code_block as code_block
from reflex.components import collapse as collapse
from reflex.components import color_mode_button as color_mode_button
from reflex.components import color_mode_icon as color_mode_icon
from reflex.components import color_mode_switch as color_mode_switch
from reflex.components import component as component
from reflex.components import cond as cond
from reflex.components import container as container
from reflex.components import data_table as data_table
from reflex.components import data_editor as data_editor
from reflex.components import debounce_input as debounce_input
from reflex.components import divider as divider
from reflex.components import drawer as drawer
from reflex.components import drawer_body as drawer_body
from reflex.components import drawer_close_button as drawer_close_button
from reflex.components import drawer_content as drawer_content
from reflex.components import drawer_footer as drawer_footer
from reflex.components import drawer_header as drawer_header
from reflex.components import drawer_overlay as drawer_overlay
from reflex.components import editable as editable
from reflex.components import editable_input as editable_input
from reflex.components import editable_preview as editable_preview
from reflex.components import editable_textarea as editable_textarea
from reflex.components import editor as editor
from reflex.components import email as email
from reflex.components import fade as fade
from reflex.components import flex as flex
from reflex.components import foreach as foreach
from reflex.components import form as form
from reflex.components import form_control as form_control
from reflex.components import form_error_message as form_error_message
from reflex.components import form_helper_text as form_helper_text
from reflex.components import form_label as form_label
from reflex.components import fragment as fragment
from reflex.components import grid as grid
from reflex.components import grid_item as grid_item
from reflex.components import heading as heading
from reflex.components import highlight as highlight
from reflex.components import hstack as hstack
from reflex.components import html as html
from reflex.components import icon as icon
from reflex.components import icon_button as icon_button
from reflex.components import image as image
from reflex.components import input as input
from reflex.components import input_group as input_group
from reflex.components import input_left_addon as input_left_addon
from reflex.components import input_left_element as input_left_element
from reflex.components import input_right_addon as input_right_addon
from reflex.components import input_right_element as input_right_element
from reflex.components import kbd as kbd
from reflex.components import link as link
from reflex.components import link_box as link_box
from reflex.components import link_overlay as link_overlay
from reflex.components import list as list
from reflex.components import list_item as list_item
from reflex.components import markdown as markdown
from reflex.components import menu as menu
from reflex.components import menu_button as menu_button
from reflex.components import menu_divider as menu_divider
from reflex.components import menu_group as menu_group
from reflex.components import menu_item as menu_item
from reflex.components import menu_item_option as menu_item_option
from reflex.components import menu_list as menu_list
from reflex.components import menu_option_group as menu_option_group
from reflex.components import modal as modal
from reflex.components import modal_body as modal_body
from reflex.components import modal_close_button as modal_close_button
from reflex.components import modal_content as modal_content
from reflex.components import modal_footer as modal_footer
from reflex.components import modal_header as modal_header
from reflex.components import modal_overlay as modal_overlay
from reflex.components import moment as moment
from reflex.components import multi_select as multi_select
from reflex.components import multi_select_option as multi_select_option
from reflex.components import next_link as next_link
from reflex.components import number_decrement_stepper as number_decrement_stepper
from reflex.components import number_increment_stepper as number_increment_stepper
from reflex.components import number_input as number_input
from reflex.components import number_input_field as number_input_field
from reflex.components import number_input_stepper as number_input_stepper
from reflex.components import option as option
from reflex.components import ordered_list as ordered_list
from reflex.components import password as password
from reflex.components import pin_input as pin_input
from reflex.components import pin_input_field as pin_input_field
from reflex.components import plotly as plotly
from reflex.components import popover as popover
from reflex.components import popover_anchor as popover_anchor
from reflex.components import popover_arrow as popover_arrow
from reflex.components import popover_body as popover_body
from reflex.components import popover_close_button as popover_close_button
from reflex.components import popover_content as popover_content
from reflex.components import popover_footer as popover_footer
from reflex.components import popover_header as popover_header
from reflex.components import popover_trigger as popover_trigger
from reflex.components import progress as progress
from reflex.components import radio as radio
from reflex.components import radio_group as radio_group
from reflex.components import range_slider as range_slider
from reflex.components import range_slider_filled_track as range_slider_filled_track
from reflex.components import range_slider_thumb as range_slider_thumb
from reflex.components import range_slider_track as range_slider_track
from reflex.components import responsive_grid as responsive_grid
from reflex.components import scale_fade as scale_fade
from reflex.components import script as script
from reflex.components import select as select
from reflex.components import skeleton as skeleton
from reflex.components import skeleton_circle as skeleton_circle
from reflex.components import skeleton_text as skeleton_text
from reflex.components import slide as slide
from reflex.components import slide_fade as slide_fade
from reflex.components import slider as slider
from reflex.components import slider_filled_track as slider_filled_track
from reflex.components import slider_mark as slider_mark
from reflex.components import slider_thumb as slider_thumb
from reflex.components import slider_track as slider_track
from reflex.components import spacer as spacer
from reflex.components import span as span
from reflex.components import spinner as spinner
from reflex.components import square as square
from reflex.components import stack as stack
from reflex.components import stat as stat
from reflex.components import stat_arrow as stat_arrow
from reflex.components import stat_group as stat_group
from reflex.components import stat_help_text as stat_help_text
from reflex.components import stat_label as stat_label
from reflex.components import stat_number as stat_number
from reflex.components import step as step
from reflex.components import step_description as step_description
from reflex.components import step_icon as step_icon
from reflex.components import step_indicator as step_indicator
from reflex.components import step_number as step_number
from reflex.components import step_separator as step_separator
from reflex.components import step_status as step_status
from reflex.components import step_title as step_title
from reflex.components import stepper as stepper
from reflex.components import switch as switch
from reflex.components import tab as tab
from reflex.components import tab_list as tab_list
from reflex.components import tab_panel as tab_panel
from reflex.components import tab_panels as tab_panels
from reflex.components import table as table
from reflex.components import table_caption as table_caption
from reflex.components import table_container as table_container
from reflex.components import tabs as tabs
from reflex.components import tag as tag
from reflex.components import tag_close_button as tag_close_button
from reflex.components import tag_label as tag_label
from reflex.components import tag_left_icon as tag_left_icon
from reflex.components import tag_right_icon as tag_right_icon
from reflex.components import tbody as tbody
from reflex.components import td as td
from reflex.components import text as text
from reflex.components import text_area as text_area
from reflex.components import tfoot as tfoot
from reflex.components import th as th
from reflex.components import thead as thead
from reflex.components import tooltip as tooltip
from reflex.components import tr as tr
from reflex.components import unordered_list as unordered_list
from reflex.components import upload as upload
from reflex.components import video as video
from reflex.components import visually_hidden as visually_hidden
from reflex.components import vstack as vstack
from reflex.components import wrap as wrap
from reflex.components import wrap_item as wrap_item
from reflex import components as components
from reflex.components import desktop_only as desktop_only
from reflex.components import mobile_only as mobile_only
from reflex.components import tablet_only as tablet_only
from reflex.components import mobile_and_tablet as mobile_and_tablet
from reflex.components import tablet_and_desktop as tablet_and_desktop
from reflex.components import selected_files as selected_files
from reflex.components import clear_selected_files as clear_selected_files
from reflex.components import EditorOptions as EditorOptions
from reflex.components.component import memo as memo
from reflex.components.graphing import recharts as recharts
from reflex import config as config
from reflex.config import Config as Config
from reflex.config import DBConfig as DBConfig
from reflex import constants as constants
from reflex.constants import Env as Env
from reflex import el as el
from reflex import event as event
from reflex.event import EventChain as EventChain
from reflex.event import background as background
from reflex.event import call_script as call_script
from reflex.event import clear_local_storage as clear_local_storage
from reflex.event import console_log as console_log
from reflex.event import download as download
from reflex.event import prevent_default as prevent_default
from reflex.event import redirect as redirect
from reflex.event import remove_cookie as remove_cookie
from reflex.event import remove_local_storage as remove_local_storage
from reflex.event import set_clipboard as set_clipboard
from reflex.event import set_focus as set_focus
from reflex.event import set_value as set_value
from reflex.event import stop_propagation as stop_propagation
from reflex.event import upload_files as upload_files
from reflex.event import window_alert as window_alert
from reflex import middleware as middleware
from reflex.middleware import Middleware as Middleware
from reflex import model as model
from reflex.model import session as session
from reflex.model import Model as Model
from reflex.page import page as page
from reflex import route as route
from reflex import state as state
from reflex.state import var as var
from reflex.state import Cookie as Cookie
from reflex.state import LocalStorage as LocalStorage
from reflex.state import State as State
from reflex import style as style
from reflex.style import color_mode as color_mode
from reflex.style import toggle_color_mode as toggle_color_mode
from reflex import testing as testing
from reflex import utils as utils
from reflex import vars as vars
from reflex.vars import cached_var as cached_var
from reflex.vars import Var as Var

View File

@ -26,172 +26,61 @@ from .typography import *
# Add the convenience methods for all the components manually.
# This is necessary for static type checking to work.
component = Component.create
badge = Badge.create
code = Code.create
code_block = CodeBlock.create
connection_banner = ConnectionBanner.create
connection_modal = ConnectionModal.create
data_editor = DataEditor.create
data_editor_theme = DataEditorTheme
data_table = DataTable.create
divider = Divider.create
list = List.create
list_item = ListItem.create
ordered_list = OrderedList.create
unordered_list = UnorderedList.create
stat = Stat.create
stat_arrow = StatArrow.create
stat_group = StatGroup.create
stat_help_text = StatHelpText.create
stat_label = StatLabel.create
stat_number = StatNumber.create
tag = Tag.create
tag_label = TagLabel.create
tag_left_icon = TagLeftIcon.create
tag_right_icon = TagRightIcon.create
tag_close_button = TagCloseButton.create
table = Table.create
table_caption = TableCaption.create
table_container = TableContainer.create
tbody = Tbody.create
td = Td.create
tfoot = Tfoot.create
th = Th.create
thead = Thead.create
tr = Tr.create
accordion = Accordion.create
accordion_button = AccordionButton.create
accordion_icon = AccordionIcon.create
accordion_item = AccordionItem.create
accordion_panel = AccordionPanel.create
tab = Tab.create
tab_list = TabList.create
tab_panel = TabPanel.create
tab_panels = TabPanels.create
tabs = Tabs.create
visually_hidden = VisuallyHidden.create
fade = Fade.create
scale_fade = ScaleFade.create
slide = Slide.create
slide_fade = SlideFade.create
collapse = Collapse.create
alert = Alert.create
alert_description = AlertDescription.create
alert_icon = AlertIcon.create
alert_title = AlertTitle.create
card = Card.create
card_body = CardBody.create
card_footer = CardFooter.create
card_header = CardHeader.create
circular_progress = CircularProgress.create
circular_progress_label = CircularProgressLabel.create
progress = Progress.create
skeleton = Skeleton.create
skeleton_circle = SkeletonCircle.create
skeleton_text = SkeletonText.create
spinner = Spinner.create
button = Button.create
button_group = ButtonGroup.create
checkbox = Checkbox.create
checkbox_group = CheckboxGroup.create
date_picker = DatePicker.create
date_time_picker = DateTimePicker.create
debounce_input = DebounceInput.create
editable = Editable.create
editable_input = EditableInput.create
editable_preview = EditablePreview.create
editable_textarea = EditableTextarea.create
editor = Editor.create
form = Form.create
form_control = FormControl.create
form_error_message = FormErrorMessage.create
form_helper_text = FormHelperText.create
form_label = FormLabel.create
icon_button = IconButton.create
input = Input.create
input_group = InputGroup.create
input_left_addon = InputLeftAddon.create
input_right_addon = InputRightAddon.create
input_left_element = InputLeftElement.create
input_right_element = InputRightElement.create
moment = Moment.create
multi_select = MultiSelect.create
multi_select_option = MultiSelectOption
number_decrement_stepper = NumberDecrementStepper.create
number_increment_stepper = NumberIncrementStepper.create
number_input = NumberInput.create
number_input_field = NumberInputField.create
number_input_stepper = NumberInputStepper.create
option = Option.create
password = Password.create
email = Email.create
pin_input = PinInput.create
pin_input_field = PinInputField.create
radio = Radio.create
radio_group = RadioGroup.create
range_slider = RangeSlider.create
range_slider_filled_track = RangeSliderFilledTrack.create
range_slider_thumb = RangeSliderThumb.create
range_slider_track = RangeSliderTrack.create
select = Select.create
slider = Slider.create
slider_filled_track = SliderFilledTrack.create
slider_mark = SliderMark.create
slider_thumb = SliderThumb.create
slider_track = SliderTrack.create
switch = Switch.create
text_area = TextArea.create
upload = Upload.create
plotly = Plotly.create
box = Box.create
center = Center.create
circle = Circle.create
container = Container.create
flex = Flex.create
foreach = Foreach.create
fragment = Fragment.create
grid = Grid.create
grid_item = GridItem.create
hstack = Hstack.create
html = Html.create
responsive_grid = ResponsiveGrid.create
spacer = Spacer.create
square = Square.create
stack = Stack.create
vstack = Vstack.create
wrap = Wrap.create
wrap_item = WrapItem.create
avatar = Avatar.create
avatar_badge = AvatarBadge.create
avatar_group = AvatarGroup.create
icon = Icon.create
image = Image.create
video = Video.create
audio = Audio.create
breadcrumb = Breadcrumb.create
breadcrumb_item = BreadcrumbItem.create
breadcrumb_link = BreadcrumbLink.create
breadcrumb_separator = BreadcrumbSeparator.create
link = Link.create
link_box = LinkBox.create
link_overlay = LinkOverlay.create
next_link = NextLink.create
step = Step.create
step_description = StepDescription.create
step_icon = StepIcon.create
step_indicator = StepIndicator.create
step_number = StepNumber.create
step_separator = StepSeparator.create
step_status = StepStatus.create
step_title = StepTitle.create
stepper = Stepper.create
alert_dialog = AlertDialog.create
alert_dialog_body = AlertDialogBody.create
alert_dialog_content = AlertDialogContent.create
alert_dialog_footer = AlertDialogFooter.create
alert_dialog_header = AlertDialogHeader.create
alert_dialog_overlay = AlertDialogOverlay.create
alert_icon = AlertIcon.create
alert_title = AlertTitle.create
aspect_ratio = AspectRatio.create
audio = Audio.create
avatar = Avatar.create
avatar_badge = AvatarBadge.create
avatar_group = AvatarGroup.create
badge = Badge.create
box = Box.create
breadcrumb = Breadcrumb.create
breadcrumb_item = BreadcrumbItem.create
breadcrumb_link = BreadcrumbLink.create
breadcrumb_separator = BreadcrumbSeparator.create
button = Button.create
button_group = ButtonGroup.create
card = Card.create
card_body = CardBody.create
card_footer = CardFooter.create
card_header = CardHeader.create
center = Center.create
checkbox = Checkbox.create
checkbox_group = CheckboxGroup.create
circle = Circle.create
circular_progress = CircularProgress.create
circular_progress_label = CircularProgressLabel.create
code = Code.create
code_block = CodeBlock.create
collapse = Collapse.create
color_mode_button = ColorModeButton.create
color_mode_icon = ColorModeIcon.create
color_mode_switch = ColorModeSwitch.create
component = Component.create
connection_banner = ConnectionBanner.create
connection_modal = ConnectionModal.create
container = Container.create
data_editor = DataEditor.create
data_editor_theme = DataEditorTheme
data_table = DataTable.create
date_picker = DatePicker.create
date_time_picker = DateTimePicker.create
debounce_input = DebounceInput.create
divider = Divider.create
drawer = Drawer.create
drawer_body = DrawerBody.create
drawer_close_button = DrawerCloseButton.create
@ -199,6 +88,43 @@ drawer_content = DrawerContent.create
drawer_footer = DrawerFooter.create
drawer_header = DrawerHeader.create
drawer_overlay = DrawerOverlay.create
editable = Editable.create
editable_input = EditableInput.create
editable_preview = EditablePreview.create
editable_textarea = EditableTextarea.create
editor = Editor.create
email = Email.create
fade = Fade.create
flex = Flex.create
foreach = Foreach.create
form = Form.create
form_control = FormControl.create
form_error_message = FormErrorMessage.create
form_helper_text = FormHelperText.create
form_label = FormLabel.create
fragment = Fragment.create
grid = Grid.create
grid_item = GridItem.create
heading = Heading.create
highlight = Highlight.create
hstack = Hstack.create
html = Html.create
icon = Icon.create
icon_button = IconButton.create
image = Image.create
input = Input.create
input_group = InputGroup.create
input_left_addon = InputLeftAddon.create
input_left_element = InputLeftElement.create
input_right_addon = InputRightAddon.create
input_right_element = InputRightElement.create
kbd = Kbd.create
link = Link.create
link_box = LinkBox.create
link_overlay = LinkOverlay.create
list = List.create
list_item = ListItem.create
markdown = Markdown.create
menu = Menu.create
menu_button = MenuButton.create
menu_divider = MenuDivider.create
@ -214,6 +140,21 @@ modal_content = ModalContent.create
modal_footer = ModalFooter.create
modal_header = ModalHeader.create
modal_overlay = ModalOverlay.create
moment = Moment.create
multi_select = MultiSelect.create
multi_select_option = MultiSelectOption
next_link = NextLink.create
number_decrement_stepper = NumberDecrementStepper.create
number_increment_stepper = NumberIncrementStepper.create
number_input = NumberInput.create
number_input_field = NumberInputField.create
number_input_stepper = NumberInputStepper.create
option = Option.create
ordered_list = OrderedList.create
password = Password.create
pin_input = PinInput.create
pin_input_field = PinInputField.create
plotly = Plotly.create
popover = Popover.create
popover_anchor = PopoverAnchor.create
popover_arrow = PopoverArrow.create
@ -223,15 +164,74 @@ popover_content = PopoverContent.create
popover_footer = PopoverFooter.create
popover_header = PopoverHeader.create
popover_trigger = PopoverTrigger.create
tooltip = Tooltip.create
heading = Heading.create
highlight = Highlight.create
markdown = Markdown.create
span = Span.create
text = Text.create
progress = Progress.create
radio = Radio.create
radio_group = RadioGroup.create
range_slider = RangeSlider.create
range_slider_filled_track = RangeSliderFilledTrack.create
range_slider_thumb = RangeSliderThumb.create
range_slider_track = RangeSliderTrack.create
responsive_grid = ResponsiveGrid.create
scale_fade = ScaleFade.create
script = Script.create
aspect_ratio = AspectRatio.create
kbd = KeyboardKey.create
color_mode_button = ColorModeButton.create
color_mode_icon = ColorModeIcon.create
color_mode_switch = ColorModeSwitch.create
select = Select.create
skeleton = Skeleton.create
skeleton_circle = SkeletonCircle.create
skeleton_text = SkeletonText.create
slide = Slide.create
slide_fade = SlideFade.create
slider = Slider.create
slider_filled_track = SliderFilledTrack.create
slider_mark = SliderMark.create
slider_thumb = SliderThumb.create
slider_track = SliderTrack.create
spacer = Spacer.create
span = Span.create
spinner = Spinner.create
square = Square.create
stack = Stack.create
stat = Stat.create
stat_arrow = StatArrow.create
stat_group = StatGroup.create
stat_help_text = StatHelpText.create
stat_label = StatLabel.create
stat_number = StatNumber.create
step = Step.create
step_description = StepDescription.create
step_icon = StepIcon.create
step_indicator = StepIndicator.create
step_number = StepNumber.create
step_separator = StepSeparator.create
step_status = StepStatus.create
step_title = StepTitle.create
stepper = Stepper.create
switch = Switch.create
tab = Tab.create
tab_list = TabList.create
tab_panel = TabPanel.create
tab_panels = TabPanels.create
table = Table.create
table_caption = TableCaption.create
table_container = TableContainer.create
tabs = Tabs.create
tag = Tag.create
tag_close_button = TagCloseButton.create
tag_label = TagLabel.create
tag_left_icon = TagLeftIcon.create
tag_right_icon = TagRightIcon.create
tbody = Tbody.create
td = Td.create
text = Text.create
text_area = TextArea.create
tfoot = Tfoot.create
th = Th.create
thead = Thead.create
tooltip = Tooltip.create
tr = Tr.create
unordered_list = UnorderedList.create
upload = Upload.create
video = Video.create
visually_hidden = VisuallyHidden.create
vstack = Vstack.create
wrap = Wrap.create
wrap_item = WrapItem.create

View File

@ -1000,6 +1000,10 @@ def custom_component(
return wrapper
# Alias memo to custom_component.
memo = custom_component
class NoSSRComponent(Component):
"""A dynamic component that is not rendered on the server."""

View File

@ -7,7 +7,7 @@ from .code import LiteralCodeLanguage as LiteralCodeLanguage
from .dataeditor import DataEditor, DataEditorTheme
from .datatable import DataTable
from .divider import Divider
from .keyboard_key import KeyboardKey
from .keyboard_key import KeyboardKey as Kbd
from .list import List, ListItem, OrderedList, UnorderedList
from .moment import Moment
from .stat import Stat, StatArrow, StatGroup, StatHelpText, StatLabel, StatNumber

View File

@ -270,6 +270,10 @@ class FileUpload(Base):
pass
# Alias for rx.upload_files
upload_files = FileUpload
# Special server-side events.
def server_side(name: str, sig: inspect.Signature, **kwargs) -> EventSpec:
"""A server-side event.

View File

@ -2,8 +2,7 @@
from __future__ import annotations
from reflex.components.component import Component
from reflex.event import EventHandler
from typing import Any
DECORATED_PAGES = []
@ -14,8 +13,8 @@ def page(
image: str | None = None,
description: str | None = None,
meta: str | None = None,
script_tags: list[Component] | None = None,
on_load: EventHandler | list[EventHandler] | None = None,
script_tags: list[Any] | None = None,
on_load: Any | list[Any] | None = None,
):
"""Decorate a function as a page.

17
reflex/page.pyi Normal file
View File

@ -0,0 +1,17 @@
"""The page decorator and associated variables and functions."""
from reflex.components.component import Component
from reflex.event import EventHandler
DECORATED_PAGES: list
def page(
route: str | None = None,
title: str | None = None,
image: str | None = None,
description: str | None = None,
meta: str | None = None,
script_tags: list[Component] | None = None,
on_load: EventHandler | list[EventHandler] | None = None,
): ...
def get_decorated_pages() -> list[dict]: ...

View File

@ -47,6 +47,7 @@ from reflex.utils.serializers import SerializedType, serialize, serializer
from reflex.vars import BaseVar, ComputedVar, Var
Delta = Dict[str, Any]
var = ComputedVar
class HeaderData(Base):

View File

@ -609,6 +609,19 @@ class PyiGenerator:
self._scan_folder(target)
def generate_init():
"""Generate a pyi file for the main __init__.py."""
from reflex import _MAPPING # type: ignore
imports = [
f"from {path if mod != path.rsplit('.')[-1] or mod == 'page' else '.'.join(path.rsplit('.')[:-1])} import {mod} as {mod}"
for mod, path in _MAPPING.items()
]
with open("reflex/__init__.pyi", "w") as pyi_file:
pyi_file.writelines("\n".join(imports))
if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("blib2to3.pgen2.driver").setLevel(logging.INFO)
@ -617,3 +630,4 @@ if __name__ == "__main__":
logger.info(f"Running .pyi generator for {targets}")
gen = PyiGenerator()
gen.scan_all(targets)
generate_init()

View File

@ -905,7 +905,7 @@ class InterdependentState(State):
Returns:
ComputedVar v1x2 multiplied by 2
"""
return self.v1x2 * 2
return self.v1x2 * 2 # type: ignore
@pytest.fixture
@ -1105,7 +1105,7 @@ def test_computed_var_cached_depends_on_non_cached():
@rx.cached_var
def dep_v(self) -> int:
return self.no_cache_v
return self.no_cache_v # type: ignore
@rx.cached_var
def comp_v(self) -> int:
@ -1148,7 +1148,7 @@ def test_computed_var_depends_on_parent_non_cached():
class ChildState(ParentState):
@rx.cached_var
def dep_v(self) -> int:
return self.no_cache_v
return self.no_cache_v # type: ignore
ps = ParentState()
cs = ps.substates[ChildState.get_name()]