Example #1
0
def test_text_column():
    text_column = TextColumn("[b]foo", highlighter=NullHighlighter())
    task = Task(1, "test", 100, 20, _get_time=lambda: 1.0)
    text = text_column.render(task)
    assert str(text) == "foo"

    text_column = TextColumn("[b]bar", markup=False)
    task = Task(1, "test", 100, 20, _get_time=lambda: 1.0)
    text = text_column.render(task)
    assert text == Text("[b]bar")
Example #2
0
def test_task_create() -> None:
    task = Task(TaskID(1), "foo", 100, 0, _get_time=lambda: 1)
    assert task.elapsed is None
    assert not task.finished
    assert task.percentage == 0.0
    assert task.speed is None
    assert task.time_remaining is None
Example #3
0
def test_download_progress_uses_binary_units() -> None:

    column = DownloadColumn(binary_units=True)
    test_task = Task(1, "test", 1024, 512, _get_time=lambda: 1.0)
    rendered_progress = str(column.render(test_task))
    expected = "0.5/1.0 KiB"
    assert rendered_progress == expected
Example #4
0
def test_download_progress_uses_decimal_units() -> None:

    column = DownloadColumn()
    test_task = Task(1, "test", 1000, 500, _get_time=lambda: 1.0)
    rendered_progress = str(column.render(test_task))
    expected = "0.5/1.0 KB"
    assert rendered_progress == expected
Example #5
0
def test_bar_columns():
    bar_column = BarColumn(100)
    assert bar_column.bar_width == 100
    task = Task(1, "test", 100, 20, _get_time=lambda: 1.0)
    bar = bar_column(task)
    assert isinstance(bar, Bar)
    assert bar.completed == 20
    assert bar.total == 100
Example #6
0
def test_task_start() -> None:
    current_time = 1

    def get_time():
        nonlocal current_time
        return current_time

    task = Task(TaskID(1), "foo", 100, 0, _get_time=get_time)
    task.start_time = get_time()
    assert task.started == True
    assert task.elapsed == 0
    current_time += 1
    assert task.elapsed == 1
    current_time += 1
    task.stop_time = get_time()
    current_time += 1
    assert task.elapsed == 2
Example #7
0
def test_spinner_column():
    column = SpinnerColumn()
    column.set_spinner("dots2")
    task = Task(1, "test", 100, 20, _get_time=lambda: 1.0)
    result = column.render(task)
    print(repr(result))
    expected = "⡿"
    assert str(result) == expected
Example #8
0
def test_time_remaining_column():
    class FakeTask(Task):
        time_remaining = 60

    column = TimeRemainingColumn()
    task = Task(1, "test", 100, 20, _get_time=lambda: 1.0)
    text = column(task)
    assert str(text) == "-:--:--"

    text = column(FakeTask(1, "test", 100, 20, _get_time=lambda: 1.0))
    assert str(text) == "0:01:00"
Example #9
0
    def render(self, task: r_progress.Task) -> r_console.RenderableType:
        # if state is provided in task then use it
        _state_key = task.fields.get("state", None)

        # if state was not provided in task guess it
        if _state_key is None:
            if task.finished:
                _state_key = self.finished_state_key
            else:
                try:
                    _state_key = task.current_state_key
                except AttributeError:
                    # this is firs time for task so set it to start
                    task.current_state_key = self.start_state_key
                    _state_key = task.current_state_key

        # else since state_key is provided by task make sure that
        # it is not finished_state_key ... needed to avoid any race conditions
        else:
            if _state_key == self.finished_state_key:
                raise Exception(
                    f"Please refrain from using `finished_state_key={_state_key}` as "
                    f"this will be automatically set when `task.finished`. "
                    f"This is done to avoid race conditions ..."
                )

        # backup
        task.current_state_key = _state_key  # backup

        # render
        try:
            _current_state = self.states[_state_key]
            if isinstance(_current_state, r_text.Text):
                return _current_state
            elif isinstance(_current_state, r_spinner.Spinner):
                return _current_state.render(task.get_time())
            else:
                raise Exception(f"Unknown type {type(_current_state)}")
        except KeyError:
            raise KeyError(f"Unknown state_key `{_state_key}`. "
                           f"Should be on of {self.states.keys()}")
Example #10
0
def test_spinner_column():
    time = 1.0

    def get_time():
        nonlocal time
        return time

    column = SpinnerColumn()
    column.set_spinner("dots2")
    task = Task(1, "test", 100, 20, _get_time=get_time)
    result = column.render(task)
    print(repr(result))
    expected = "⣾"
    assert str(result) == expected

    time += 1.0
    column.spinner.update(speed=0.5)
    result = column.render(task)
    print(repr(result))
    expected = "⡿"
    assert str(result) == expected
Example #11
0
def test_task_zero_total() -> None:
    task = Task(TaskID(1), "foo", 0, 0, _get_time=lambda: 1)
    assert task.percentage == 0
Example #12
0
def test_renderable_column():
    column = RenderableColumn("foo")
    task = Task(1, "test", 100, 20, _get_time=lambda: 1.0)
    assert column.render(task) == "foo"
Example #13
0
def test_time_elapsed_column():
    column = TimeElapsedColumn()
    task = Task(1, "test", 100, 20, _get_time=lambda: 1.0)
    text = column.render(task)
    assert str(text) == "-:--:--"