From dffb3cb03e5f5eb970fde10cb9dcd14c76533d10 Mon Sep 17 00:00:00 2001 From: Tobias Raabe Date: Wed, 30 Jun 2021 09:11:05 +0200 Subject: [PATCH 1/2] A single KeyboardInterrupt interrupts execution and reports from previous tasks are shown. --- src/_pytask/execute.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/_pytask/execute.py b/src/_pytask/execute.py index 929b9e59..48acfe1a 100644 --- a/src/_pytask/execute.py +++ b/src/_pytask/execute.py @@ -67,6 +67,9 @@ def pytask_execute_task_protocol(session, task): session.hook.pytask_execute_task_setup(session=session, task=task) session.hook.pytask_execute_task(session=session, task=task) session.hook.pytask_execute_task_teardown(session=session, task=task) + except KeyboardInterrupt: + report = ExecutionReport.from_task_and_exception(task, sys.exc_info()) + session.should_stop = True except Exception: report = ExecutionReport.from_task_and_exception(task, sys.exc_info()) else: From 44641fe115091a28163ed1246584ba519670529c Mon Sep 17 00:00:00 2001 From: Tobias Raabe Date: Wed, 30 Jun 2021 22:38:36 +0200 Subject: [PATCH 2/2] last changes. --- docs/changes.rst | 2 ++ src/_pytask/execute.py | 4 +++- src/_pytask/live.py | 1 - src/_pytask/logging.py | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index 82b5462a..077991d1 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -16,6 +16,8 @@ all releases are available on `PyPI `_ and - :gh:`116` and :gh:`117` fix :gh:`104` which prevented to skip tasks with missing dependencies. - :gh:`118` makes the path to the configuration in the session header os-specific. +- :gh:`120` implements that a single ``KeyboardInterrupt`` stops the execution and + previously collected reports are shown. 0.0.16 - 2021-06-25 diff --git a/src/_pytask/execute.py b/src/_pytask/execute.py index 48acfe1a..31d44223 100644 --- a/src/_pytask/execute.py +++ b/src/_pytask/execute.py @@ -14,6 +14,7 @@ from _pytask.nodes import FilePathNode from _pytask.report import ExecutionReport from _pytask.shared import reduce_node_name +from _pytask.traceback import remove_traceback_from_exc_info from rich.traceback import Traceback @@ -68,7 +69,8 @@ def pytask_execute_task_protocol(session, task): session.hook.pytask_execute_task(session=session, task=task) session.hook.pytask_execute_task_teardown(session=session, task=task) except KeyboardInterrupt: - report = ExecutionReport.from_task_and_exception(task, sys.exc_info()) + short_exc_info = remove_traceback_from_exc_info(sys.exc_info()) + report = ExecutionReport.from_task_and_exception(task, short_exc_info) session.should_stop = True except Exception: report = ExecutionReport.from_task_and_exception(task, sys.exc_info()) diff --git a/src/_pytask/live.py b/src/_pytask/live.py index 3e20582c..eacad47f 100644 --- a/src/_pytask/live.py +++ b/src/_pytask/live.py @@ -167,5 +167,4 @@ def _generate_status(self): if self._n_errors > 0: msg += f" {self._n_errors} errors." status = Status(msg, spinner="dots") - status._name = "collection_status" return status diff --git a/src/_pytask/logging.py b/src/_pytask/logging.py index dcda9f60..2c794d2d 100644 --- a/src/_pytask/logging.py +++ b/src/_pytask/logging.py @@ -97,4 +97,6 @@ def _style_infos(infos: List[Tuple[Any]]) -> str: for value, description, color in infos: if value: message.append(f"[{color}]{value} {description}[/]") + if not message: + message = ["nothing to report"] return ", ".join(message)