Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from typing import TYPE_CHECKING
|
|
|
|
from .measure import Measurement
|
|
from .segment import Segment
|
|
from .style import StyleType
|
|
|
|
if TYPE_CHECKING:
|
|
from .console import Console, ConsoleOptions, RenderResult, RenderableType
|
|
|
|
|
|
class Styled:
|
|
"""Apply a style to a renderable.
|
|
|
|
Args:
|
|
renderable (RenderableType): Any renderable.
|
|
style (StyleType): A style to apply across the entire renderable.
|
|
"""
|
|
|
|
def __init__(self, renderable: "RenderableType", style: "StyleType") -> None:
|
|
self.renderable = renderable
|
|
self.style = style
|
|
|
|
def __rich_console__(
|
|
self, console: "Console", options: "ConsoleOptions"
|
|
) -> "RenderResult":
|
|
style = console.get_style(self.style)
|
|
rendered_segments = console.render(self.renderable, options)
|
|
segments = Segment.apply_style(rendered_segments, style)
|
|
return segments
|
|
|
|
def __rich_measure__(
|
|
self, console: "Console", options: "ConsoleOptions"
|
|
) -> Measurement:
|
|
return Measurement.get(console, options, self.renderable)
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover
|
|
from pip._vendor.rich import print
|
|
from pip._vendor.rich.panel import Panel
|
|
|
|
panel = Styled(Panel("hello"), "on blue")
|
|
print(panel)
|