diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d6d0b9b..a32bd9a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ chronological order. Releases follow [semantic versioning](https://semver.org/) releases are available on [PyPI](https://pypi.org/project/pytask) and [Anaconda.org](https://anaconda.org/conda-forge/pytask). +## 0.5.6 - 2025-xx-xx + +- {pull}`696` allows setting the status of a task in the `pytask_execute_task_log_start` hook which enables pending tasks to be displayed by pytask-parallel. + ## 0.5.5 - 2025-07-25 - {pull}`692` documents how to use pytask with workspaces. diff --git a/src/_pytask/execute.py b/src/_pytask/execute.py index d52b6fa0..ca345e21 100644 --- a/src/_pytask/execute.py +++ b/src/_pytask/execute.py @@ -25,6 +25,7 @@ from _pytask.exceptions import ExecutionError from _pytask.exceptions import NodeLoadError from _pytask.exceptions import NodeNotFoundError +from _pytask.logging_utils import TaskExecutionStatus from _pytask.mark import Mark from _pytask.mark_utils import has_mark from _pytask.node_protocols import PNode @@ -99,7 +100,9 @@ def pytask_execute_build(session: Session) -> bool | None: @hookimpl def pytask_execute_task_protocol(session: Session, task: PTask) -> ExecutionReport: """Follow the protocol to execute each task.""" - session.hook.pytask_execute_task_log_start(session=session, task=task) + session.hook.pytask_execute_task_log_start( + session=session, task=task, status=TaskExecutionStatus.RUNNING + ) try: session.hook.pytask_execute_task_setup(session=session, task=task) session.hook.pytask_execute_task(session=session, task=task) diff --git a/src/_pytask/hookspecs.py b/src/_pytask/hookspecs.py index 02ce0721..4f8bfab9 100644 --- a/src/_pytask/hookspecs.py +++ b/src/_pytask/hookspecs.py @@ -18,6 +18,7 @@ import click from pluggy import PluginManager + from _pytask.logging_utils import TaskExecutionStatus from _pytask.models import NodeInfo from _pytask.node_protocols import PNode from _pytask.node_protocols import PProvisionalNode @@ -255,7 +256,9 @@ def pytask_execute_task_protocol(session: Session, task: PTask) -> ExecutionRepo @hookspec(firstresult=True) -def pytask_execute_task_log_start(session: Session, task: PTask) -> None: +def pytask_execute_task_log_start( + session: Session, task: PTask, status: TaskExecutionStatus +) -> None: """Start logging of task execution. This hook can be used to provide more verbose output during the execution. diff --git a/src/_pytask/live.py b/src/_pytask/live.py index 577d08b1..f9e75aaa 100644 --- a/src/_pytask/live.py +++ b/src/_pytask/live.py @@ -20,7 +20,6 @@ from _pytask.console import console from _pytask.console import format_task_name -from _pytask.logging_utils import TaskExecutionStatus from _pytask.outcomes import CollectionOutcome from _pytask.outcomes import Exit from _pytask.outcomes import TaskOutcome @@ -29,6 +28,7 @@ if TYPE_CHECKING: from collections.abc import Generator + from _pytask.logging_utils import TaskExecutionStatus from _pytask.node_protocols import PTask from _pytask.reports import CollectionReport from _pytask.reports import ExecutionReport @@ -165,7 +165,6 @@ class LiveExecution: n_entries_in_table: int verbose: int editor_url_scheme: str - initial_status: TaskExecutionStatus = TaskExecutionStatus.RUNNING sort_final_table: bool = False n_tasks: int | str = "x" _reports: list[_ReportEntry] = field(factory=list) @@ -186,9 +185,11 @@ def pytask_execute_build(self) -> Generator[None, None, None]: console.print(table) @hookimpl(tryfirst=True) - def pytask_execute_task_log_start(self, task: PTask) -> bool: + def pytask_execute_task_log_start( + self, task: PTask, status: TaskExecutionStatus + ) -> bool: """Mark a new task as running.""" - self.add_task(new_running_task=task, status=self.initial_status) + self.add_task(new_running_task=task, status=status) return True @hookimpl