ai-station/.venv/lib/python3.12/site-packages/textual/widgets/__init__.py

117 lines
3.7 KiB
Python

from __future__ import annotations
import typing
from importlib import import_module
from textual.case import camel_to_snake
# For any new built-in Widget we create, not only do we have to import them here and add them to `__all__`,
# but also to the `__init__.pyi` file in this same folder - otherwise text editors and type checkers won't
# be able to "see" them.
if typing.TYPE_CHECKING:
from textual.widget import Widget
from textual.widgets._button import Button
from textual.widgets._checkbox import Checkbox
from textual.widgets._collapsible import Collapsible
from textual.widgets._content_switcher import ContentSwitcher
from textual.widgets._data_table import DataTable
from textual.widgets._digits import Digits
from textual.widgets._directory_tree import DirectoryTree
from textual.widgets._footer import Footer
from textual.widgets._header import Header
from textual.widgets._help_panel import HelpPanel
from textual.widgets._input import Input
from textual.widgets._key_panel import KeyPanel
from textual.widgets._label import Label
from textual.widgets._link import Link
from textual.widgets._list_item import ListItem
from textual.widgets._list_view import ListView
from textual.widgets._loading_indicator import LoadingIndicator
from textual.widgets._log import Log
from textual.widgets._markdown import Markdown, MarkdownViewer
from textual.widgets._masked_input import MaskedInput
from textual.widgets._option_list import OptionList
from textual.widgets._placeholder import Placeholder
from textual.widgets._pretty import Pretty
from textual.widgets._progress_bar import ProgressBar
from textual.widgets._radio_button import RadioButton
from textual.widgets._radio_set import RadioSet
from textual.widgets._rich_log import RichLog
from textual.widgets._rule import Rule
from textual.widgets._select import Select
from textual.widgets._selection_list import SelectionList
from textual.widgets._sparkline import Sparkline
from textual.widgets._static import Static
from textual.widgets._switch import Switch
from textual.widgets._tabbed_content import TabbedContent, TabPane
from textual.widgets._tabs import Tab, Tabs
from textual.widgets._text_area import TextArea
from textual.widgets._tooltip import Tooltip
from textual.widgets._tree import Tree
from textual.widgets._welcome import Welcome
__all__ = [
"Button",
"Checkbox",
"Collapsible",
"ContentSwitcher",
"DataTable",
"Digits",
"DirectoryTree",
"Footer",
"Header",
"HelpPanel",
"Input",
"KeyPanel",
"Label",
"Link",
"ListItem",
"ListView",
"LoadingIndicator",
"Log",
"Markdown",
"MarkdownViewer",
"MaskedInput",
"OptionList",
"Placeholder",
"Pretty",
"ProgressBar",
"RadioButton",
"RadioSet",
"RichLog",
"Rule",
"Select",
"SelectionList",
"Sparkline",
"Static",
"Switch",
"Tab",
"TabbedContent",
"TabPane",
"Tabs",
"TextArea",
"Tooltip",
"Tree",
"Welcome",
]
_WIDGETS_LAZY_LOADING_CACHE: dict[str, type[Widget]] = {}
# Let's decrease startup time by lazy loading our Widgets:
def __getattr__(widget_class: str) -> type[Widget]:
try:
return _WIDGETS_LAZY_LOADING_CACHE[widget_class]
except KeyError:
pass
if widget_class not in __all__:
raise AttributeError(f"Package 'textual.widgets' has no class '{widget_class}'")
widget_module_path = f"._{camel_to_snake(widget_class)}"
module = import_module(widget_module_path, package="textual.widgets")
class_ = getattr(module, widget_class)
_WIDGETS_LAZY_LOADING_CACHE[widget_class] = class_
return class_