python (3.12.0)
1 from typing import Optional, TYPE_CHECKING
2
3 from .jupyter import JupyterMixin
4 from .measure import Measurement
5
6 if TYPE_CHECKING:
7 from .console import Console, ConsoleOptions, RenderableType, RenderResult
8
9
10 class ESC[4;38;5;81mConstrain(ESC[4;38;5;149mJupyterMixin):
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 = renderable
20 self.width = width
21
22 def __rich_console__(
23 self, console: "Console", options: "ConsoleOptions"
24 ) -> "RenderResult":
25 if self.width is None:
26 yield self.renderable
27 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 measurement