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")
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
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
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
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
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
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
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"
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()}")
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
def test_task_zero_total() -> None: task = Task(TaskID(1), "foo", 0, 0, _get_time=lambda: 1) assert task.percentage == 0
def test_renderable_column(): column = RenderableColumn("foo") task = Task(1, "test", 100, 20, _get_time=lambda: 1.0) assert column.render(task) == "foo"
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) == "-:--:--"