mentoria/venv/lib/python3.12/site-packages/style/styled_string_builder.py
2025-03-20 13:51:17 -03:00

45 lines
1.4 KiB
Python

import types
from style.ansi import _styles
from style.styled_string import _StyledString
_module_name = __name__.split('.')[0]
class _StyledStringBuilder(types.ModuleType):
_enabled = True
@property
def enabled(self):
return _StyledStringBuilder._enabled
@enabled.setter
def enabled(self, value):
_StyledStringBuilder._enabled = value
def __init__(self, style_list, is_root=False):
super(_StyledStringBuilder, self).__init__(_module_name)
self._style_list = style_list
self._is_root = is_root
def __call__(self, *objects, **kwargs):
if self._is_root:
raise TypeError('%r object is not callable' % self.__class__.__bases__[0].__name__)
sep = kwargs.get('sep', ' ')
if type(sep) is not str:
raise TypeError('sep must be None or a string, not %r' % sep.__class__.__name__)
return _StyledString(self._style_list, sep, *objects)
def __getattr__(self, attr):
if attr in _styles:
if self._is_root:
new_style_list = self._style_list[:]
new_style_list.append(_styles[attr])
return _StyledStringBuilder(new_style_list)
self._style_list.append(_styles[attr])
return self
raise AttributeError('%r object has no attribute %r' % (self.__class__.__name__, attr))