Beispiel #1
0
def test_tree_measure():
    tree = Tree("foo")
    tree.add("bar")
    tree.add("musroom risotto")
    console = Console()
    measurement = Measurement.get(console, tree)
    assert measurement == Measurement(11, 19)
Beispiel #2
0
def test_console_width():
    console = Console()
    test = Text("Hello World!\nfoobarbaz")
    assert test.__rich_measure__(console, 80) == Measurement(9, 12)
    assert Text(" " * 4).__rich_measure__(console, 80) == Measurement(4, 4)
    assert Text(" \n  \n   ").__rich_measure__(console,
                                               80) == Measurement(3, 3)
Beispiel #3
0
def test_clamp():
    measurement = Measurement(20, 100)
    assert measurement.clamp(10, 50) == Measurement(20, 50)
    assert measurement.clamp(30, 50) == Measurement(30, 50)
    assert measurement.clamp(None, 50) == Measurement(20, 50)
    assert measurement.clamp(30, None) == Measurement(30, 100)
    assert measurement.clamp(None, None) == Measurement(20, 100)
Beispiel #4
0
def test_styled():
    styled_foo = Styled("foo", "on red")
    console = Console(file=io.StringIO(), force_terminal=True)
    assert Measurement.get(console, styled_foo, 80) == Measurement(3, 3)
    console.print(styled_foo)
    result = console.file.getvalue()
    expected = "\x1b[41mfoo\x1b[0m\n"
    assert result == expected
Beispiel #5
0
def test_rich_measure():

    console = Console()
    assert Table("test_header", width=-1).__rich_measure__(
        console, console.options) == Measurement(0, 0)
    # Check __rich_measure__() for a positive width passed as an argument
    assert Table("test_header", width=None).__rich_measure__(
        console, console.options.update_width(10)) == Measurement(10, 10)
Beispiel #6
0
def render_tables():
    console = Console(
        width=60,
        force_terminal=True,
        file=io.StringIO(),
        legacy_windows=False,
        color_system=None,
    )

    table = Table(title="test table", caption="table caption", expand=True)
    table.add_column("foo",
                     footer=Text("total"),
                     no_wrap=True,
                     overflow="ellipsis")
    table.add_column("bar", justify="center")
    table.add_column("baz", justify="right")

    table.add_row("Averlongwordgoeshere", "banana pancakes", None)

    assert Measurement.get(console, table, 80) == Measurement(41, 48)

    for width in range(10, 60, 5):
        console.print(table, width=width)

    table.expand = False
    console.print(table, justify="left")
    console.print(table, justify="center")
    console.print(table, justify="right")

    assert table.row_count == 1

    table.row_styles = ["red", "yellow"]
    table.add_row("Coffee")
    table.add_row("Coffee", "Chocolate", None, "cinnamon")

    assert table.row_count == 3

    console.print(table)

    table.show_lines = True
    console.print(table)

    table.show_footer = True
    console.print(table)

    table.show_edge = False

    console.print(table)

    table.padding = 1
    console.print(table)

    table.width = 20
    assert Measurement.get(console, table, 80) == Measurement(20, 20)
    console.print(table)

    return console.file.getvalue()
Beispiel #7
0
def test_vertical_center():
    console = Console(color_system=None, height=6)
    console.begin_capture()
    vertical_center = VerticalCenter("foo")
    repr(vertical_center)
    console.print(vertical_center)
    result = console.end_capture()
    print(repr(result))
    expected = "   \n   \nfoo\n   \n   \n   \n"
    assert result == expected
    assert Measurement.get(console, vertical_center) == Measurement(3, 3)
Beispiel #8
0
def test_rich_measure():
    # Check __rich_measure__() for a negative width passed as an argument
    assert Table("test_header",
                 width=None).__rich_measure__(Console(),
                                              -1) == Measurement(0, 0)
    # Check __rich_measure__() for a negative Table.width attribute
    assert Table("test_header",
                 width=-1).__rich_measure__(Console(), 1) == Measurement(0, 0)
    # Check __rich_measure__() for a positive width passed as an argument
    assert Table("test_header",
                 width=None).__rich_measure__(Console(),
                                              10) == Measurement(10, 10)
    # Check __rich_measure__() for a positive Table.width attribute
    assert Table("test_header",
                 width=10).__rich_measure__(Console(),
                                            -1) == Measurement(10, 10)
Beispiel #9
0
def test_measure_pretty():
    """Test measure respects expand_all"""
    # https://github.com/Textualize/rich/issues/1998
    console = Console()
    pretty = Pretty(["alpha", "beta", "delta", "gamma"], expand_all=True)

    measurement = console.measure(pretty)
    assert measurement == Measurement(12, 12)
Beispiel #10
0
def test_min_width():
    table = Table("foo", min_width=30)
    table.add_row("bar")
    assert table.__rich_measure__(Console(), 100) == Measurement(30, 30)
    console = Console(color_system=None)
    console.begin_capture()
    console.print(table)
    output = console.end_capture()
    print(output)
    assert all(len(line) == 30 for line in output.splitlines())
Beispiel #11
0
    def measure(self, renderable: RenderableType, max_width=100_000) -> int:
        """Get the optimal width for a widget or renderable.

        Args:
            renderable (RenderableType): A renderable (including Widget)
            max_width ([type], optional): Maximum width. Defaults to 100_000.

        Returns:
            int: Number of cells required to render.
        """
        measurement = Measurement.get(
            self.console, self.console.options.update(max_width=max_width), renderable
        )
        return measurement.maximum
    def __rich_measure__(self, console: Console,
                         max_width: int) -> Measurement:
        width = 0
        for backend in self.backends.values():
            panel = Panel.fit(
                Backend(backend.used, backend.available),
                box=box.SQUARE,
                title=emojify_device(backend.device),
            )
            size = measure_renderables(console, console.options, [panel])
            width += size.minimum

        width += len(self.backends) - 1
        return Measurement(width, width)
Beispiel #13
0
    def _change_width(self):
        original_width = Measurement.get(console, self.table).maximum
        width_ranges = [
            [original_width, console.width, 2],
            [console.width, original_width, -2],
            [original_width, 90, -2],
            [90, original_width + 1, 2],
        ]

        for width_range in width_ranges:
            for width in range(*width_range):
                with beat(self.delay_time):
                    self.table.width = width

            with beat(self.delay_time):
                self.table.width = None
def present_hyperparameters(console, hyperparameters):

    assert isinstance(hyperparameters,
                      dict), "Hyperparameters must be a dictionary"

    table = Table(show_header=True, header_style="bold green")
    table.add_column("Hyperparameter Name",
                     style="dim",
                     width=25,
                     justify="center")
    table.add_column("Value", justify="center", width=15)
    table.width = Measurement.get(console, table, console.width).maximum

    Align.center(table)

    for key in hyperparameters:

        table.add_row('[red]' + key + '[/red]', str(hyperparameters[key]))

    console.print(table)
Beispiel #15
0
def test_measure():
    console = Console(file=io.StringIO(), width=20)
    _min, _max = Measurement.get(console, Align("foo bar", "left"), 20)
    assert _min == 3
    assert _max == 7
Beispiel #16
0
def test_span():
    measurement = Measurement(10, 100)
    assert measurement.span == 90
Beispiel #17
0
def test_measure_renderables():
    # Test measure_renderables returning a null Measurement object
    assert measure_renderables(Console(), None, None) == Measurement(0, 0)
    # Test measure_renderables returning a valid Measurement object
    assert measure_renderables(Console(width=1), ["test"], 1) == Measurement(1, 1)
Beispiel #18
0
def test_null_get():
    # Test negative console.width passed into get method
    assert Measurement.get(Console(width=-1), None) == Measurement(0, 0)
    # Test negative max_width passed into get method
    assert Measurement.get(Console(), None, -1) == Measurement(0, 0)
Beispiel #19
0
def test_measure_renderables():
    console = Console()
    assert measure_renderables(console, console.options,
                               "") == Measurement(0, 0)
    assert measure_renderables(console, console.options.update_width(0),
                               "hello") == Measurement(0, 0)
Beispiel #20
0
 def set_table_settings(self):
     original_width = Measurement.get(console, self.table).maximum
     self.table.row_styles = ["none", "dim"]
     self.table.border_style = "bright_yellow"
     self.table.pad_edge = False
     self.table.box = box.SIMPLE_HEAVY
Beispiel #21
0
def test_rich_measure():
    console = Console(width=80, color_system=None, force_terminal=True)
    spinner = Spinner("dots", "Foo")
    min_width, max_width = Measurement.get(console, console.options, spinner)
    assert min_width == 3
    assert max_width == 5
Beispiel #22
0
 def __rich_measure__(self, console: "Console",
                      options: ConsoleOptions) -> Measurement:
     return Measurement(1, options.max_width)
Beispiel #23
0
        console.print(table, justify="center")

    table.caption = "Made with [b magenta]Rich[/]"
    with beat(10):
        console.print(table, justify="center")

    for row in TABLE_DATA:
        table.add_row(*row)
        with beat(10):
            console.print(table, justify="center")

    table.show_footer = True
    with beat(10):
        console.print(table, justify="center")

    table_width = Measurement.get(console, table, console.width).maximum

    table.columns[2].justify = "right"
    with beat(10):
        console.print(table, justify="center")

    table.columns[3].justify = "right"
    with beat(10):
        console.print(table, justify="center")

    table.columns[4].justify = "right"
    with beat(10):
        console.print(table, justify="center")

    table.columns[2].header_style = "bold red"
    with beat(10):
Beispiel #24
0
 def __rich_measure__(self, console: "Console",
                      max_width: int) -> Measurement:
     return Measurement(1, max_width)
Beispiel #25
0
def test_no_renderable():
    console = Console()
    text = Text()

    with pytest.raises(NotRenderableError):
        Measurement.get(console, None, console.width)