__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
import configparser
from typing import Dict, List, IO, Mapping, Optional
from .default_styles import DEFAULT_STYLES
from .style import Style, StyleType
class Theme:
"""A container for style information, used by :class:`~rich.console.Console`.
Args:
styles (Dict[str, Style], optional): A mapping of style names on to styles. Defaults to None for a theme with no styles.
inherit (bool, optional): Inherit default styles. Defaults to True.
"""
styles: Dict[str, Style]
def __init__(
self, styles: Optional[Mapping[str, StyleType]] = None, inherit: bool = True
):
self.styles = DEFAULT_STYLES.copy() if inherit else {}
if styles is not None:
self.styles.update(
{
name: style if isinstance(style, Style) else Style.parse(style)
for name, style in styles.items()
}
)
@property
def config(self) -> str:
"""Get contents of a config file for this theme."""
config = "[styles]\n" + "\n".join(
f"{name} = {style}" for name, style in sorted(self.styles.items())
)
return config
@classmethod
def from_file(
cls, config_file: IO[str], source: Optional[str] = None, inherit: bool = True
) -> "Theme":
"""Load a theme from a text mode file.
Args:
config_file (IO[str]): An open conf file.
source (str, optional): The filename of the open file. Defaults to None.
inherit (bool, optional): Inherit default styles. Defaults to True.
Returns:
Theme: A New theme instance.
"""
config = configparser.ConfigParser()
config.read_file(config_file, source=source)
styles = {name: Style.parse(value) for name, value in config.items("styles")}
theme = Theme(styles, inherit=inherit)
return theme
@classmethod
def read(
cls, path: str, inherit: bool = True, encoding: Optional[str] = None
) -> "Theme":
"""Read a theme from a path.
Args:
path (str): Path to a config file readable by Python configparser module.
inherit (bool, optional): Inherit default styles. Defaults to True.
encoding (str, optional): Encoding of the config file. Defaults to None.
Returns:
Theme: A new theme instance.
"""
with open(path, "rt", encoding=encoding) as config_file:
return cls.from_file(config_file, source=path, inherit=inherit)
class ThemeStackError(Exception):
"""Base exception for errors related to the theme stack."""
class ThemeStack:
"""A stack of themes.
Args:
theme (Theme): A theme instance
"""
def __init__(self, theme: Theme) -> None:
self._entries: List[Dict[str, Style]] = [theme.styles]
self.get = self._entries[-1].get
def push_theme(self, theme: Theme, inherit: bool = True) -> None:
"""Push a theme on the top of the stack.
Args:
theme (Theme): A Theme instance.
inherit (boolean, optional): Inherit styles from current top of stack.
"""
styles: Dict[str, Style]
styles = (
{**self._entries[-1], **theme.styles} if inherit else theme.styles.copy()
)
self._entries.append(styles)
self.get = self._entries[-1].get
def pop_theme(self) -> None:
"""Pop (and discard) the top-most theme."""
if len(self._entries) == 1:
raise ThemeStackError("Unable to pop base theme")
self._entries.pop()
self.get = self._entries[-1].get
if __name__ == "__main__": # pragma: no cover
theme = Theme()
print(theme.config)
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 5.92 KB | 0644 |
|
| __main__.py | File | 8.14 KB | 0644 |
|
| _cell_widths.py | File | 9.97 KB | 0644 |
|
| _emoji_codes.py | File | 136.95 KB | 0644 |
|
| _emoji_replace.py | File | 1.04 KB | 0644 |
|
| _export_format.py | File | 2.08 KB | 0644 |
|
| _extension.py | File | 241 B | 0644 |
|
| _fileno.py | File | 799 B | 0644 |
|
| _inspect.py | File | 9.47 KB | 0644 |
|
| _log_render.py | File | 3.14 KB | 0644 |
|
| _loop.py | File | 1.21 KB | 0644 |
|
| _null_file.py | File | 1.35 KB | 0644 |
|
| _palettes.py | File | 6.9 KB | 0644 |
|
| _pick.py | File | 423 B | 0644 |
|
| _ratio.py | File | 5.33 KB | 0644 |
|
| _spinners.py | File | 19.45 KB | 0644 |
|
| _stack.py | File | 351 B | 0644 |
|
| _timer.py | File | 417 B | 0644 |
|
| _win32_console.py | File | 22.25 KB | 0644 |
|
| _windows.py | File | 1.86 KB | 0644 |
|
| _windows_renderer.py | File | 2.69 KB | 0644 |
|
| _wrap.py | File | 3.32 KB | 0644 |
|
| abc.py | File | 878 B | 0644 |
|
| align.py | File | 10.08 KB | 0644 |
|
| ansi.py | File | 6.74 KB | 0644 |
|
| bar.py | File | 3.19 KB | 0644 |
|
| box.py | File | 10.53 KB | 0644 |
|
| cells.py | File | 4.67 KB | 0644 |
|
| color.py | File | 17.8 KB | 0644 |
|
| color_triplet.py | File | 1.03 KB | 0644 |
|
| columns.py | File | 6.96 KB | 0644 |
|
| console.py | File | 96.78 KB | 0644 |
|
| constrain.py | File | 1.26 KB | 0644 |
|
| containers.py | File | 5.37 KB | 0644 |
|
| control.py | File | 6.45 KB | 0644 |
|
| default_styles.py | File | 7.86 KB | 0644 |
|
| diagnose.py | File | 924 B | 0644 |
|
| emoji.py | File | 2.41 KB | 0644 |
|
| errors.py | File | 642 B | 0644 |
|
| file_proxy.py | File | 1.64 KB | 0644 |
|
| filesize.py | File | 2.45 KB | 0644 |
|
| highlighter.py | File | 9.36 KB | 0644 |
|
| json.py | File | 4.9 KB | 0644 |
|
| jupyter.py | File | 3.15 KB | 0644 |
|
| layout.py | File | 13.62 KB | 0644 |
|
| live.py | File | 13.94 KB | 0644 |
|
| live_render.py | File | 3.57 KB | 0644 |
|
| logging.py | File | 11.61 KB | 0644 |
|
| markdown.py | File | 25.55 KB | 0644 |
|
| markup.py | File | 8.23 KB | 0644 |
|
| measure.py | File | 5.18 KB | 0644 |
|
| padding.py | File | 4.84 KB | 0644 |
|
| pager.py | File | 828 B | 0644 |
|
| palette.py | File | 3.21 KB | 0644 |
|
| panel.py | File | 10.45 KB | 0644 |
|
| pretty.py | File | 34.97 KB | 0644 |
|
| progress.py | File | 58.3 KB | 0644 |
|
| progress_bar.py | File | 7.97 KB | 0644 |
|
| prompt.py | File | 11.03 KB | 0644 |
|
| protocol.py | File | 1.33 KB | 0644 |
|
| py.typed | File | 0 B | 0644 |
|
| region.py | File | 166 B | 0644 |
|
| repr.py | File | 4.32 KB | 0644 |
|
| rule.py | File | 4.48 KB | 0644 |
|
| scope.py | File | 2.76 KB | 0644 |
|
| screen.py | File | 1.54 KB | 0644 |
|
| segment.py | File | 23.64 KB | 0644 |
|
| spinner.py | File | 4.24 KB | 0644 |
|
| status.py | File | 4.32 KB | 0644 |
|
| style.py | File | 26.44 KB | 0644 |
|
| styled.py | File | 1.21 KB | 0644 |
|
| syntax.py | File | 34.54 KB | 0644 |
|
| table.py | File | 38.71 KB | 0644 |
|
| terminal_theme.py | File | 3.29 KB | 0644 |
|
| text.py | File | 46.19 KB | 0644 |
|
| theme.py | File | 3.69 KB | 0644 |
|
| themes.py | File | 102 B | 0644 |
|
| traceback.py | File | 28.84 KB | 0644 |
|
| tree.py | File | 8.89 KB | 0644 |
|