Skip to content

Commit 5595ac5

Browse files
authored
Revert change turning Node.state() into a hook. (#370)
1 parent 7744241 commit 5595ac5

28 files changed

Lines changed: 155 additions & 167 deletions

docs/source/changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ releases are available on [PyPI](https://pypi.org/project/pytask) and
1919
- {pull}`366` adds light and dark logos and fixes some warnings when building the
2020
documentation.
2121
- {pull}`368` fixes an error in `update_plugin_list.py` introduced by {pull}`364`.
22+
- {pull}`369` reverts the changes that turn `Node.state()` into a hook.
2223

2324
## 0.3.1 - 2023-12-25
2425

src/_pytask/capture.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
from _pytask.click import EnumChoice
4444
from _pytask.config import hookimpl
4545
from _pytask.enums import ShowCapture
46-
from _pytask.nodes_utils import Task
46+
from _pytask.nodes import Task
4747

4848

4949
if sys.version_info >= (3, 8):

src/_pytask/clean.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from _pytask.git import get_all_files
2222
from _pytask.git import get_root
2323
from _pytask.git import is_git_installed
24-
from _pytask.nodes_utils import Task
24+
from _pytask.nodes import Task
2525
from _pytask.outcomes import ExitCode
2626
from _pytask.path import find_common_ancestor
2727
from _pytask.path import relative_to

src/_pytask/collect.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
from _pytask.console import format_task_id
2323
from _pytask.exceptions import CollectionError
2424
from _pytask.mark_utils import has_mark
25-
from _pytask.nodes_utils import FilePathNode
26-
from _pytask.nodes_utils import Task
25+
from _pytask.nodes import FilePathNode
26+
from _pytask.nodes import Task
2727
from _pytask.outcomes import CollectionOutcome
2828
from _pytask.outcomes import count_outcomes
2929
from _pytask.path import find_case_sensitive_path

src/_pytask/collect_command.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
if TYPE_CHECKING:
3434
from typing import NoReturn
35-
from _pytask.nodes_utils import Task
35+
from _pytask.nodes import Task
3636

3737

3838
@hookimpl(tryfirst=True)

src/_pytask/collect_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
if TYPE_CHECKING:
2222
from _pytask.session import Session
23-
from _pytask.nodes_utils import Node
23+
from _pytask.nodes import Node
2424

2525

2626
__all__ = ["depends_on", "parse_nodes", "produces"]

src/_pytask/console.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727

2828
if TYPE_CHECKING:
29-
from _pytask.nodes_utils import Task
29+
from _pytask.nodes import Task
3030
from _pytask.outcomes import CollectionOutcome
3131
from _pytask.outcomes import TaskOutcome
3232

src/_pytask/dag.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
from _pytask.mark import Mark
2222
from _pytask.mark_utils import get_marks
2323
from _pytask.mark_utils import has_mark
24-
from _pytask.nodes_utils import FilePathNode
25-
from _pytask.nodes_utils import Node
26-
from _pytask.nodes_utils import Task
24+
from _pytask.nodes import FilePathNode
25+
from _pytask.nodes import Node
26+
from _pytask.nodes import Task
2727
from _pytask.path import find_common_ancestor_of_nodes
2828
from _pytask.report import DagReport
2929
from _pytask.session import Session
@@ -105,9 +105,9 @@ def pytask_dag_select_execution_dag(session: Session, dag: nx.DiGraph) -> None:
105105

106106

107107
@hookimpl
108-
def pytask_dag_validate_dag(session: Session, dag: nx.DiGraph) -> None:
108+
def pytask_dag_validate_dag(dag: nx.DiGraph) -> None:
109109
"""Validate the DAG."""
110-
_check_if_root_nodes_are_available(session, dag)
110+
_check_if_root_nodes_are_available(dag)
111111
_check_if_tasks_have_the_same_products(dag)
112112

113113

@@ -128,11 +128,11 @@ def _have_task_or_neighbors_changed(
128128

129129
@orm.db_session
130130
@hookimpl(trylast=True)
131-
def pytask_dag_has_node_changed(session: Session, node: Node, task_name: str) -> bool:
131+
def pytask_dag_has_node_changed(node: Node, task_name: str) -> bool:
132132
"""Indicate whether a single dependency or product has changed."""
133133
if isinstance(node, (FilePathNode, Task)):
134134
# If node does not exist, we receive None.
135-
file_state = session.hook.pytask_node_state(node=node)
135+
file_state = node.state()
136136
if file_state is None:
137137
return True
138138

@@ -155,7 +155,7 @@ def pytask_dag_has_node_changed(session: Session, node: Node, task_name: str) ->
155155
# to avoid unnecessary and expensive reexecutions of tasks.
156156
file_hash = hashlib.sha256(node.path.read_bytes()).hexdigest()
157157
return file_hash != db_state.file_hash
158-
return None
158+
return node.state()
159159

160160

161161
def _check_if_dag_has_cycles(dag: nx.DiGraph) -> None:
@@ -194,7 +194,7 @@ def _format_cycles(cycles: list[tuple[str, ...]]) -> str:
194194
_TEMPLATE_ERROR += "\n\n(Hint: Sometimes case sensitivity is at fault.)"
195195

196196

197-
def _check_if_root_nodes_are_available(session: Session, dag: nx.DiGraph) -> None:
197+
def _check_if_root_nodes_are_available(dag: nx.DiGraph) -> None:
198198
missing_root_nodes = []
199199
is_task_skipped: dict[str, bool] = {}
200200

@@ -206,9 +206,7 @@ def _check_if_root_nodes_are_available(session: Session, dag: nx.DiGraph) -> Non
206206
node, dag, is_task_skipped
207207
)
208208
if not are_all_tasks_skipped:
209-
node_exists = session.hook.pytask_node_state(
210-
node=dag.nodes[node]["node"]
211-
)
209+
node_exists = dag.nodes[node]["node"].state()
212210
if not node_exists:
213211
missing_root_nodes.append(node)
214212

src/_pytask/dag_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from _pytask.console import format_strings_as_flat_tree
1010
from _pytask.console import TASK_ICON
1111
from _pytask.mark_utils import has_mark
12-
from _pytask.nodes_utils import Task
12+
from _pytask.nodes import Task
1313
from attrs import define
1414
from attrs import field
1515

src/_pytask/database_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import hashlib
55

66
from _pytask.dag_utils import node_and_neighbors
7-
from _pytask.nodes_utils import Task
7+
from _pytask.nodes import Task
88
from _pytask.session import Session
99
from pony import orm
1010

@@ -61,11 +61,11 @@ def update_states_in_database(session: Session, task_name: str) -> None:
6161
for name in node_and_neighbors(session.dag, task_name):
6262
node = session.dag.nodes[name].get("task") or session.dag.nodes[name]["node"]
6363

64-
modification_time = session.hook.pytask_node_state(node=node)
64+
state = node.state()
6565

6666
if isinstance(node, Task):
6767
hash_ = hashlib.sha256(node.path.read_bytes()).hexdigest()
6868
else:
6969
hash_ = ""
7070

71-
_create_or_update_state(task_name, node.name, modification_time, hash_)
71+
_create_or_update_state(task_name, node.name, state, hash_)

0 commit comments

Comments
 (0)