diff --git a/docs/source/changes.rst b/docs/source/changes.rst index 641b21cc..03625f02 100644 --- a/docs/source/changes.rst +++ b/docs/source/changes.rst @@ -14,6 +14,7 @@ all releases are available on `PyPI `_ and - :gh:`187` allows to enable and disable showing tracebacks and potentially different styles in the future with :confval:`show_traceback=True|False`. - :gh:`188` refactors some code related to :class:`_pytask.enums.ExitCode`. +- :gh:`189` do not display a table in the execution if no task was run. 0.1.4 - 2022-01-04 diff --git a/src/_pytask/live.py b/src/_pytask/live.py index d0582b7e..14160843 100644 --- a/src/_pytask/live.py +++ b/src/_pytask/live.py @@ -156,7 +156,9 @@ def pytask_execute_build(self) -> Generator[None, None, None]: self._live_manager.start() yield self._live_manager.stop(transient=True) - console.print(self._generate_table(reduce_table=False, sort_table=True)) + table = self._generate_table(reduce_table=False, sort_table=True) + if table is not None: + console.print(table) @hookimpl(tryfirst=True) def pytask_execute_task_log_start(self, task: MetaTask) -> bool: @@ -179,53 +181,53 @@ def _generate_table(self, reduce_table: bool, sort_table: bool) -> Optional[Tabl if more entries are requested, the list is filled up with completed tasks. """ - if self._running_tasks or self._reports: - - n_reports_to_display = self._n_entries_in_table - len(self._running_tasks) - if not reduce_table: - relevant_reports = self._reports - elif n_reports_to_display >= 1: - relevant_reports = self._reports[-n_reports_to_display:] - else: - relevant_reports = [] - - if sort_table: - relevant_reports = sorted( - relevant_reports, key=lambda report: report["name"] + n_reports_to_display = self._n_entries_in_table - len(self._running_tasks) + if not reduce_table: + relevant_reports = self._reports + elif n_reports_to_display >= 1: + relevant_reports = self._reports[-n_reports_to_display:] + else: + relevant_reports = [] + + if sort_table: + relevant_reports = sorted( + relevant_reports, key=lambda report: report["name"] + ) + + table = Table() + table.add_column("Task", overflow="fold") + table.add_column("Outcome") + for report in relevant_reports: + if ( + report["outcome"] + in ( + TaskOutcome.SKIP, + TaskOutcome.SKIP_UNCHANGED, + TaskOutcome.SKIP_PREVIOUS_FAILED, + TaskOutcome.PERSISTENCE, ) - - table = Table() - table.add_column("Task", overflow="fold") - table.add_column("Outcome") - for report in relevant_reports: - if ( - report["outcome"] - in ( - TaskOutcome.SKIP, - TaskOutcome.SKIP_UNCHANGED, - TaskOutcome.SKIP_PREVIOUS_FAILED, - TaskOutcome.PERSISTENCE, - ) - and self._verbose < 2 - ): - pass - else: - table.add_row( - format_task_id( - report["task"], - editor_url_scheme=self._editor_url_scheme, - short_name=True, - ), - Text(report["outcome"].symbol, style=report["outcome"].style), - ) - for task in self._running_tasks.values(): + and self._verbose < 2 + ): + pass + else: table.add_row( format_task_id( - task, editor_url_scheme=self._editor_url_scheme, short_name=True + report["task"], + editor_url_scheme=self._editor_url_scheme, + short_name=True, ), - "running", + Text(report["outcome"].symbol, style=report["outcome"].style), ) - else: + for task in self._running_tasks.values(): + table.add_row( + format_task_id( + task, editor_url_scheme=self._editor_url_scheme, short_name=True + ), + "running", + ) + + # If the table is empty, do not display anything. + if table.rows == []: table = None return table diff --git a/tests/test_live.py b/tests/test_live.py index 46205620..da612691 100644 --- a/tests/test_live.py +++ b/tests/test_live.py @@ -131,8 +131,6 @@ def test_live_execution_displays_skips_and_persists(capsys, tmp_path, verbose, o # Test final table with reported outcome. captured = capsys.readouterr() - assert "Task" in captured.out - assert "Outcome" in captured.out if verbose < 2 and outcome in ( TaskOutcome.SKIP, @@ -140,9 +138,15 @@ def test_live_execution_displays_skips_and_persists(capsys, tmp_path, verbose, o TaskOutcome.SKIP_PREVIOUS_FAILED, TaskOutcome.PERSISTENCE, ): + # An empty table is not shown. + assert "Task" not in captured.out + assert "Outcome" not in captured.out + assert "task_module.py::task_example" not in captured.out assert f"│ {outcome.symbol}" not in captured.out else: + assert "Task" in captured.out + assert "Outcome" in captured.out assert "task_module.py::task_example" in captured.out assert f"│ {outcome.symbol}" in captured.out