Aluode/PerceptionLabPortable
0
1from typing import Optional, TYPE_CHECKING2 3from .jupyter import JupyterMixin4from .measure import Measurement5 6if TYPE_CHECKING:7 from .console import Console, ConsoleOptions, RenderableType, RenderResult8 9 10class Constrain(JupyterMixin):11 """Constrain the width of a renderable to a given number of characters.12 13 Args:14 renderable (RenderableType): A renderable object.15 width (int, optional): The maximum width (in characters) to render. Defaults to 80.16 """17 18 def __init__(self, renderable: "RenderableType", width: Optional[int] = 80) -> None:19 self.renderable = renderable20 self.width = width21 22 def __rich_console__(23 self, console: "Console", options: "ConsoleOptions"24 ) -> "RenderResult":25 if self.width is None:26 yield self.renderable27 else:28 child_options = options.update_width(min(self.width, options.max_width))29 yield from console.render(self.renderable, child_options)30 31 def __rich_measure__(32 self, console: "Console", options: "ConsoleOptions"33 ) -> "Measurement":34 if self.width is not None:35 options = options.update_width(self.width)36 measurement = Measurement.get(console, options, self.renderable)37 return measurement38 