Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from typing import Optional, TYPE_CHECKING
|
|
|
|
from .jupyter import JupyterMixin
|
|
from .measure import Measurement
|
|
|
|
if TYPE_CHECKING:
|
|
from .console import Console, ConsoleOptions, RenderableType, RenderResult
|
|
|
|
|
|
class Constrain(JupyterMixin):
|
|
"""Constrain the width of a renderable to a given number of characters.
|
|
|
|
Args:
|
|
renderable (RenderableType): A renderable object.
|
|
width (int, optional): The maximum width (in characters) to render. Defaults to 80.
|
|
"""
|
|
|
|
def __init__(self, renderable: "RenderableType", width: Optional[int] = 80) -> None:
|
|
self.renderable = renderable
|
|
self.width = width
|
|
|
|
def __rich_console__(
|
|
self, console: "Console", options: "ConsoleOptions"
|
|
) -> "RenderResult":
|
|
if self.width is None:
|
|
yield self.renderable
|
|
else:
|
|
child_options = options.update_width(min(self.width, options.max_width))
|
|
yield from console.render(self.renderable, child_options)
|
|
|
|
def __rich_measure__(
|
|
self, console: "Console", options: "ConsoleOptions"
|
|
) -> "Measurement":
|
|
if self.width is not None:
|
|
options = options.update_width(self.width)
|
|
measurement = Measurement.get(console, options, self.renderable)
|
|
return measurement
|