Esempio n. 1
0
 def render(self) -> RenderableType:
     style = Style(
         bgcolor=(Color.parse("#555555" if self.mouse_over else "#444444")),
         color=Color.parse(
             "bright_yellow" if self.grabbed else "bright_magenta"),
     )
     return ScrollBarRender(
         virtual_size=self.virtual_size,
         window_size=self.window_size,
         position=self.position,
         vertical=self.vertical,
         style=style,
     )
Esempio n. 2
0
def test_rich() -> None:
    color = Color.parse("red")
    as_text = color.__rich__()
    print(repr(as_text))
    print(repr(as_text.spans))
    assert as_text == Text("<color 'red' (standard)⬤ >",
                           spans=[Span(23, 24, Style(color=color))])
Esempio n. 3
0
def test_get_ansi_codes() -> None:
    assert Color.parse("default").get_ansi_codes() == ("39",)
    assert Color.parse("default").get_ansi_codes(False) == ("49",)
    assert Color.parse("red").get_ansi_codes() == ("31",)
    assert Color.parse("red").get_ansi_codes(False) == ("41",)
    assert Color.parse("color(1)").get_ansi_codes() == ("31",)
    assert Color.parse("color(1)").get_ansi_codes(False) == ("41",)
    assert Color.parse("#ff0000").get_ansi_codes() == ("38", "2", "255", "0", "0")
    assert Color.parse("#ff0000").get_ansi_codes(False) == ("48", "2", "255", "0", "0")
Esempio n. 4
0
def test_get_ansi_codes() -> None:
    assert Color.parse("default").get_ansi_codes() == ["39"]
    assert Color.parse("default").get_ansi_codes(False) == ["49"]
    assert Color.parse("red").get_ansi_codes() == ["31"]
    assert Color.parse("red").get_ansi_codes(False) == ["41"]
    assert Color.parse("1").get_ansi_codes() == ["38", "5", "1"]
    assert Color.parse("1").get_ansi_codes(False) == ["48", "5", "1"]
    assert Color.parse("#ff0000").get_ansi_codes() == ["38", "2", "255", "0", "0"]
    assert Color.parse("#ff0000").get_ansi_codes(False) == ["48", "2", "255", "0", "0"]
Esempio n. 5
0
def test_downgrade() -> None:

    assert Color.parse("9").downgrade(0) == Color("9", ColorType.EIGHT_BIT, 9, None)

    assert Color.parse("#000000").downgrade(ColorSystem.EIGHT_BIT) == Color(
        "#000000", ColorType.EIGHT_BIT, 16, None
    )

    assert Color.parse("#ffffff").downgrade(ColorSystem.EIGHT_BIT) == Color(
        "#ffffff", ColorType.EIGHT_BIT, 231, None
    )

    assert Color.parse("#404142").downgrade(ColorSystem.EIGHT_BIT) == Color(
        "#404142", ColorType.EIGHT_BIT, 237, None
    )

    assert Color.parse("#ff0000").downgrade(ColorSystem.EIGHT_BIT) == Color(
        "#ff0000", ColorType.EIGHT_BIT, 196, None
    )
    assert Color.parse("#ff0000").downgrade(ColorSystem.STANDARD) == Color(
        "#ff0000", ColorType.STANDARD, 1, None
    )

    assert Color.parse("9").downgrade(ColorSystem.STANDARD) == Color(
        "9", ColorType.STANDARD, 1, None
    )
Esempio n. 6
0
 def setup(self):
     self.console = Console(
         file=StringIO(), color_system="truecolor", legacy_windows=False, width=100
     )
     self.color = Color.parse("#0d1da0")
     # Warm cache
     self.color.downgrade(ColorSystem.EIGHT_BIT)
     self.color.downgrade(ColorSystem.STANDARD)
     self.color.downgrade(ColorSystem.WINDOWS)
Esempio n. 7
0
    def __rich_console__(self, console: Console,
                         options: ConsoleOptions) -> RenderResult:
        size = ((options.height or console.height) if self.vertical else
                (options.max_width or console.width))
        thickness = ((options.max_width or console.width) if self.vertical else
                     (options.height or console.height))

        _style = console.get_style(self.style)

        bar = self.render_bar(
            size=size,
            window_size=self.window_size,
            virtual_size=self.virtual_size,
            position=self.position,
            vertical=self.vertical,
            thickness=thickness,
            back_color=_style.bgcolor or Color.parse("#555555"),
            bar_color=_style.color or Color.parse("bright_magenta"),
        )
        yield bar
Esempio n. 8
0
def test_truecolor() -> None:
    assert Color.parse("#ff0000").get_truecolor() == ColorTriplet(255, 0, 0)
    assert Color.parse("red").get_truecolor() == ColorTriplet(128, 0, 0)
    assert Color.parse("1").get_truecolor() == ColorTriplet(128, 0, 0)
    assert Color.parse("17").get_truecolor() == ColorTriplet(0, 0, 95)
    assert Color.parse("default").get_truecolor() == ColorTriplet(0, 0, 0)
    assert Color.parse("default").get_truecolor(foreground=False) == ColorTriplet(
        255, 255, 255
    )
Esempio n. 9
0
def test_truecolor() -> None:
    assert Color.parse("#ff0000").get_truecolor() == ColorTriplet(255, 0, 0)
    assert Color.parse("red").get_truecolor() == ColorTriplet(128, 0, 0)
    assert Color.parse("color(1)").get_truecolor() == ColorTriplet(128, 0, 0)
    assert Color.parse("color(17)").get_truecolor() == ColorTriplet(0, 0, 95)
    assert Color.parse("default").get_truecolor() == ColorTriplet(0, 0, 0)
    assert Color.parse("default").get_truecolor(
        foreground=False) == ColorTriplet(255, 255, 255)
    assert Color("red", ColorType.WINDOWS,
                 number=1).get_truecolor() == ColorTriplet(197, 15, 31)
Esempio n. 10
0
def test_parse_success() -> None:
    assert Color.parse("default") == Color("default", ColorType.DEFAULT, None, None)
    assert Color.parse("red") == Color("red", ColorType.STANDARD, 1, None)
    assert Color.parse("bright_red") == Color("bright_red", ColorType.STANDARD, 9, None)
    assert Color.parse("yellow4") == Color("yellow4", ColorType.EIGHT_BIT, 106, None)
    assert Color.parse("color(100)") == Color(
        "color(100)", ColorType.EIGHT_BIT, 100, None
    )
    assert Color.parse("#112233") == Color(
        "#112233", ColorType.TRUECOLOR, None, ColorTriplet(0x11, 0x22, 0x33)
    )
    assert Color.parse("rgb(90,100,110)") == Color(
        "rgb(90,100,110)", ColorType.TRUECOLOR, None, ColorTriplet(90, 100, 110)
    )
Esempio n. 11
0
# -*- coding: utf-8 -*-
########################################################################
#                                                                      #
#                                                                      #
#                                                                      #
# MIT License                                                          #
# Copyright (c) 2021 Michael Nikitenko                                 #
#                                                                      #
########################################################################

from rich import inspect
from rich.color import Color

if __name__ == '__main__':
    color = Color.parse("red")
    inspect(color,
            methods=True)  # Выводит всю инфу по классу в удобочитаемом виде
Esempio n. 12
0
def test_parse_error() -> None:
    with pytest.raises(ColorParseError):
        Color.parse("256")
    with pytest.raises(ColorParseError):
        Color.parse("rgb(999,0,0)")
    with pytest.raises(ColorParseError):
        Color.parse("rgb(0,0)")
    with pytest.raises(ColorParseError):
        Color.parse("rgb(0,0,0,0)")
    with pytest.raises(ColorParseError):
        Color.parse("nosuchcolor")
    with pytest.raises(ColorParseError):
        Color.parse("#xxyyzz")
Esempio n. 13
0
def test_system() -> None:
    assert Color.parse("default").system == ColorSystem.STANDARD
    assert Color.parse("red").system == ColorSystem.STANDARD
    assert Color.parse("#ff0000").system == ColorSystem.TRUECOLOR
Esempio n. 14
0
def test_repr() -> None:
    assert repr(Color.parse("red")) == "<color 'red' (standard)>"
Esempio n. 15
0
def test_str() -> None:
    assert str(
        Color.parse("red")) == "\x1b[31m⬤  \x1b[0m<color 'red' (standard)>"
Esempio n. 16
0
 def setup(self):
     self.console = Console(
         file=StringIO(), color_system="truecolor", legacy_windows=False, width=100
     )
     self.color = Color.parse("#0d1da0")
Esempio n. 17
0

if __name__ == "__main__":  # type: ignore
    from rich import print

    inspect = Inspect({}, docs=True, methods=True, dunder=True)
    print(inspect)

    t = Text("Hello, World")
    print(Inspect(t))

    from rich.style import Style
    from rich.color import Color

    print(Inspect(Style.parse("bold red on black"), methods=True, docs=True))
    print(Inspect(Color.parse("#ffe326"), methods=True, docs=True))

    from rich import get_console

    print(Inspect(get_console(), methods=False))

    print(Inspect(open("foo.txt", "wt"), methods=False))

    print(Inspect("Hello", methods=False, dunder=True))
    print(Inspect(inspect, methods=False, dunder=False, docs=False))

    class Foo:
        @property
        def broken(self):
            1 / 0
Esempio n. 18
0
    def render_bar(
            cls,
            size: int = 25,
            virtual_size: float = 50,
            window_size: float = 20,
            position: float = 0,
            ascii_only: bool = False,
            thickness: int = 1,
            vertical: bool = True,
            back_color: Color = Color.parse("#555555"),
            bar_color: Color = Color.parse("bright_magenta"),
    ) -> Segments:

        if vertical:
            if ascii_only:
                bars = ["|", "|", "|", "|", "|", "|", "|", "|"]
            else:
                bars = ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"]
        else:
            if ascii_only:
                bars = ["-", "-", "-", "-", "-", "-", "-", "-"]
            else:
                bars = ["█", "▉", "▊", "▋", "▌", "▍", "▎", "▏"]

        back = back_color
        bar = bar_color

        width_thickness = thickness if vertical else 1

        _Segment = Segment
        _Style = Style
        blank = " " * width_thickness

        foreground_meta = {"@mouse.up": "release", "@mouse.down": "grab"}
        if window_size and size and virtual_size:
            step_size = virtual_size / size

            start = int(position / step_size * 8)
            end = start + max(8, int(window_size / step_size * 8))

            start_index, start_bar = divmod(start, 8)
            end_index, end_bar = divmod(end, 8)

            upper = {"@click": "scroll_up"}
            lower = {"@click": "scroll_down"}

            upper_back_segment = Segment(blank, _Style(bgcolor=back,
                                                       meta=upper))
            lower_back_segment = Segment(blank, _Style(bgcolor=back,
                                                       meta=lower))

            segments = [upper_back_segment] * int(size)
            segments[end_index:] = [lower_back_segment] * (size - end_index)

            segments[start_index:end_index] = [
                _Segment(blank, _Style(bgcolor=bar, meta=foreground_meta))
            ] * (end_index - start_index)

            if start_index < len(segments):
                segments[start_index] = _Segment(
                    bars[7 - start_bar] * width_thickness,
                    _Style(bgcolor=back, color=bar, meta=foreground_meta)
                    if vertical else _Style(
                        bgcolor=bar, color=back, meta=foreground_meta),
                )
            if end_index < len(segments):
                segments[end_index] = _Segment(
                    bars[7 - end_bar] * width_thickness,
                    _Style(bgcolor=bar, color=back, meta=foreground_meta)
                    if vertical else _Style(
                        bgcolor=back, color=bar, meta=foreground_meta),
                )
        else:
            segments = [_Segment(blank)] * int(size)
        if vertical:
            return Segments(segments, new_lines=True)
        else:
            return Segments((segments + [_Segment.line()]) * thickness,
                            new_lines=False)
Esempio n. 19
0
def test_str() -> None:
    assert str(Color.parse("red")) == "<color 'red' 1 (standard)>"
Esempio n. 20
0
def test_downgrade() -> None:

    assert Color.parse("color(9)").downgrade(0) == Color(
        "color(9)", ColorType.STANDARD, 9, None)

    assert Color.parse("#000000").downgrade(ColorSystem.EIGHT_BIT) == Color(
        "#000000", ColorType.EIGHT_BIT, 16, None)

    assert Color.parse("#ffffff").downgrade(ColorSystem.EIGHT_BIT) == Color(
        "#ffffff", ColorType.EIGHT_BIT, 231, None)

    assert Color.parse("#404142").downgrade(ColorSystem.EIGHT_BIT) == Color(
        "#404142", ColorType.EIGHT_BIT, 237, None)

    assert Color.parse("#ff0000").downgrade(ColorSystem.EIGHT_BIT) == Color(
        "#ff0000", ColorType.EIGHT_BIT, 196, None)

    assert Color.parse("#ff0000").downgrade(ColorSystem.STANDARD) == Color(
        "#ff0000", ColorType.STANDARD, 1, None)

    assert Color.parse("color(9)").downgrade(ColorSystem.STANDARD) == Color(
        "color(9)", ColorType.STANDARD, 9, None)

    assert Color.parse("color(20)").downgrade(ColorSystem.STANDARD) == Color(
        "color(20)", ColorType.STANDARD, 4, None)

    assert Color.parse("red").downgrade(ColorSystem.WINDOWS) == Color(
        "red", ColorType.WINDOWS, 1, None)

    assert Color.parse("bright_red").downgrade(ColorSystem.WINDOWS) == Color(
        "bright_red", ColorType.WINDOWS, 9, None)

    assert Color.parse("#ff0000").downgrade(ColorSystem.WINDOWS) == Color(
        "#ff0000", ColorType.WINDOWS, 1, None)

    assert Color.parse("color(255)").downgrade(ColorSystem.WINDOWS) == Color(
        "color(255)", ColorType.WINDOWS, 15, None)

    assert Color.parse("#00ff00").downgrade(ColorSystem.STANDARD) == Color(
        "#00ff00", ColorType.STANDARD, 2, None)