Skip to content

Don't display a table when no entry is present. #189

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ all releases are available on `PyPI <https://pypi.org/project/pytask>`_ 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
Expand Down
88 changes: 45 additions & 43 deletions src/_pytask/live.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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
Expand Down
8 changes: 6 additions & 2 deletions tests/test_live.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,18 +131,22 @@ 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,
TaskOutcome.SKIP_UNCHANGED,
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

Expand Down