|
11 | 11 | from _pytask.console import console
|
12 | 12 | from _pytask.console import create_summary_panel
|
13 | 13 | from _pytask.console import create_url_style_for_task
|
| 14 | +from _pytask.console import format_strings_as_flat_tree |
14 | 15 | from _pytask.console import format_task_id
|
15 | 16 | from _pytask.console import unify_styles
|
16 | 17 | from _pytask.dag import descending_tasks
|
|
27 | 28 | from _pytask.report import ExecutionReport
|
28 | 29 | from _pytask.session import Session
|
29 | 30 | from _pytask.shared import get_first_non_none_value
|
| 31 | +from _pytask.shared import reduce_node_name |
30 | 32 | from _pytask.traceback import format_exception_without_traceback
|
31 | 33 | from _pytask.traceback import remove_traceback_from_exc_info
|
32 | 34 | from _pytask.traceback import render_exc_info
|
@@ -167,15 +169,23 @@ def pytask_execute_task(task: Task) -> bool:
|
167 | 169 |
|
168 | 170 | @hookimpl
|
169 | 171 | def pytask_execute_task_teardown(session: Session, task: Task) -> None:
|
170 |
| - """Check if each produced node was indeed produced.""" |
| 172 | + """Check if :class:`_pytask.nodes.FilePathNode` are produced by a task.""" |
| 173 | + missing_nodes = [] |
171 | 174 | for product in session.dag.successors(task.name):
|
172 | 175 | node = session.dag.nodes[product]["node"]
|
173 |
| - try: |
174 |
| - node.state() |
175 |
| - except NodeNotFoundError as e: |
176 |
| - raise NodeNotFoundError( |
177 |
| - f"{node.name} was not produced by {task.name}." |
178 |
| - ) from e |
| 176 | + if isinstance(node, FilePathNode): |
| 177 | + |
| 178 | + try: |
| 179 | + node.state() |
| 180 | + except NodeNotFoundError: |
| 181 | + missing_nodes.append(node) |
| 182 | + |
| 183 | + if missing_nodes: |
| 184 | + paths = [reduce_node_name(i, session.config["paths"]) for i in missing_nodes] |
| 185 | + formatted = format_strings_as_flat_tree( |
| 186 | + paths, "The task did not produce the following files:\n", "" |
| 187 | + ) |
| 188 | + raise NodeNotFoundError(formatted) |
179 | 189 |
|
180 | 190 |
|
181 | 191 | @hookimpl(trylast=True)
|
|
0 commit comments