codekingpro/portable-devtools
114k
1"""Package with Display implementations for urwid."""2 3from __future__ import annotations4 5import importlib.util6import sys7import typing8 9from . import raw10from .common import (11 BLACK,12 BROWN,13 DARK_BLUE,14 DARK_CYAN,15 DARK_GRAY,16 DARK_GREEN,17 DARK_MAGENTA,18 DARK_RED,19 DEFAULT,20 LIGHT_BLUE,21 LIGHT_CYAN,22 LIGHT_GRAY,23 LIGHT_GREEN,24 LIGHT_MAGENTA,25 LIGHT_RED,26 UPDATE_PALETTE_ENTRY,27 WHITE,28 YELLOW,29 AttrSpec,30 AttrSpecError,31 BaseScreen,32 RealTerminal,33 ScreenError,34)35 36if typing.TYPE_CHECKING:37 import types38 39__all__ = (40 "BLACK",41 "BROWN",42 "DARK_BLUE",43 "DARK_CYAN",44 "DARK_GRAY",45 "DARK_GREEN",46 "DARK_MAGENTA",47 "DARK_RED",48 "DEFAULT",49 "LIGHT_BLUE",50 "LIGHT_CYAN",51 "LIGHT_GRAY",52 "LIGHT_GREEN",53 "LIGHT_MAGENTA",54 "LIGHT_RED",55 "UPDATE_PALETTE_ENTRY",56 "WHITE",57 "YELLOW",58 "AttrSpec",59 "AttrSpecError",60 "BaseScreen",61 "RealTerminal",62 "ScreenError",63 # Lazy imported64 "html_fragment",65 "lcd",66 "raw",67 "web",68)69 70try:71 from . import curses72 73 __all__ += ("curses",)74except ImportError:75 pass76 77 78def lazy_import(name: str, package: str | None = None) -> types.ModuleType:79 """Lazy import implementation from Python documentation.80 81 Useful for cases where no warnings expected for moved modules.82 """83 spec = importlib.util.find_spec(name, package)84 if not spec:85 raise ImportError(f"No module named {name!r}")86 if not spec.loader:87 raise ImportError(f"Module named {name!r} is invalid")88 89 loader = importlib.util.LazyLoader(spec.loader)90 spec.loader = loader91 module = importlib.util.module_from_spec(spec)92 if not package:93 sys.modules[name] = module94 else:95 sys.modules[f"{package.rstrip('.')}.{name.lstrip('.')}"] = module96 loader.exec_module(module)97 return module98 99 100html_fragment = lazy_import(".html_fragment", __package__)101lcd = lazy_import(".lcd", __package__)102web = lazy_import(".web", __package__)103 