jobflow 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jobflow-0.2.0/src/jobflow.egg-info → jobflow-0.2.1}/PKG-INFO +20 -20
- {jobflow-0.2.0 → jobflow-0.2.1}/pyproject.toml +19 -17
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/core/flow.py +5 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/core/job.py +42 -22
- {jobflow-0.2.0 → jobflow-0.2.1/src/jobflow.egg-info}/PKG-INFO +20 -20
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow.egg-info/requires.txt +19 -19
- {jobflow-0.2.0 → jobflow-0.2.1}/tests/test_settings.py +1 -1
- {jobflow-0.2.0 → jobflow-0.2.1}/LICENSE +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/README.md +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/setup.cfg +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/__init__.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/_version.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/core/__init__.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/core/maker.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/core/reference.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/core/schemas.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/core/state.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/core/store.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/managers/__init__.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/managers/fireworks.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/managers/local.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/py.typed +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/settings.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/utils/__init__.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/utils/dict_mods.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/utils/enum.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/utils/find.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/utils/graph.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/utils/log.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/utils/uid.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow/utils/uuid.py +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow.egg-info/SOURCES.txt +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow.egg-info/dependency_links.txt +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/src/jobflow.egg-info/top_level.txt +0 -0
- {jobflow-0.2.0 → jobflow-0.2.1}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jobflow
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: jobflow is a library for writing computational workflows
|
|
5
5
|
Author-email: Alex Ganose <a.ganose@imperial.ac.uk>
|
|
6
6
|
License: modified BSD
|
|
@@ -25,18 +25,18 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
25
25
|
Requires-Python: >=3.10
|
|
26
26
|
Description-Content-Type: text/markdown
|
|
27
27
|
License-File: LICENSE
|
|
28
|
-
Requires-Dist: PyYAML
|
|
29
|
-
Requires-Dist: maggma>=0.
|
|
28
|
+
Requires-Dist: PyYAML>=6.0.1
|
|
29
|
+
Requires-Dist: maggma>=0.72.0
|
|
30
30
|
Requires-Dist: monty>=2023.9.25
|
|
31
|
-
Requires-Dist: networkx
|
|
31
|
+
Requires-Dist: networkx>=3.2.1
|
|
32
32
|
Requires-Dist: pydantic-settings>=2.0.3
|
|
33
|
-
Requires-Dist: pydantic>=2.
|
|
34
|
-
Requires-Dist: pydash
|
|
33
|
+
Requires-Dist: pydantic>=2.4
|
|
34
|
+
Requires-Dist: pydash>=8.0.1
|
|
35
35
|
Provides-Extra: ulid
|
|
36
36
|
Requires-Dist: python-ulid; extra == "ulid"
|
|
37
37
|
Provides-Extra: docs
|
|
38
38
|
Requires-Dist: autodoc_pydantic==2.2.0; extra == "docs"
|
|
39
|
-
Requires-Dist: furo==
|
|
39
|
+
Requires-Dist: furo==2025.9.25; extra == "docs"
|
|
40
40
|
Requires-Dist: ipython==9.3.0; extra == "docs"
|
|
41
41
|
Requires-Dist: myst_parser==4.0.1; extra == "docs"
|
|
42
42
|
Requires-Dist: nbsphinx==0.9.7; extra == "docs"
|
|
@@ -46,28 +46,28 @@ Provides-Extra: dev
|
|
|
46
46
|
Requires-Dist: pre-commit>=2.12.1; extra == "dev"
|
|
47
47
|
Requires-Dist: typing_extensions; python_version < "3.11" and extra == "dev"
|
|
48
48
|
Provides-Extra: tests
|
|
49
|
-
Requires-Dist: moto==5.1.
|
|
50
|
-
Requires-Dist: pytest-cov==
|
|
51
|
-
Requires-Dist: pytest==8.4.
|
|
49
|
+
Requires-Dist: moto==5.1.16; extra == "tests"
|
|
50
|
+
Requires-Dist: pytest-cov==7.0.0; extra == "tests"
|
|
51
|
+
Requires-Dist: pytest==8.4.2; extra == "tests"
|
|
52
52
|
Provides-Extra: vis
|
|
53
53
|
Requires-Dist: matplotlib; extra == "vis"
|
|
54
54
|
Requires-Dist: pydot; extra == "vis"
|
|
55
55
|
Provides-Extra: fireworks
|
|
56
56
|
Requires-Dist: FireWorks; extra == "fireworks"
|
|
57
57
|
Provides-Extra: strict
|
|
58
|
-
Requires-Dist: FireWorks==2.0.
|
|
59
|
-
Requires-Dist: PyYAML==6.0.
|
|
60
|
-
Requires-Dist: maggma==0.
|
|
61
|
-
Requires-Dist: matplotlib==3.10.
|
|
58
|
+
Requires-Dist: FireWorks==2.0.6; extra == "strict"
|
|
59
|
+
Requires-Dist: PyYAML==6.0.3; extra == "strict"
|
|
60
|
+
Requires-Dist: maggma==0.72.0; extra == "strict"
|
|
61
|
+
Requires-Dist: matplotlib==3.10.7; extra == "strict"
|
|
62
62
|
Requires-Dist: monty==2025.3.3; extra == "strict"
|
|
63
|
-
Requires-Dist: moto==5.1.
|
|
63
|
+
Requires-Dist: moto==5.1.16; extra == "strict"
|
|
64
64
|
Requires-Dist: networkx==3.4.2; extra == "strict"
|
|
65
|
-
Requires-Dist: pydantic-settings==2.
|
|
66
|
-
Requires-Dist: pydantic==2.
|
|
65
|
+
Requires-Dist: pydantic-settings==2.11.0; extra == "strict"
|
|
66
|
+
Requires-Dist: pydantic==2.12.3; extra == "strict"
|
|
67
67
|
Requires-Dist: pydash==8.0.5; extra == "strict"
|
|
68
|
-
Requires-Dist: pydot==4.0.
|
|
69
|
-
Requires-Dist: python-ulid==3.
|
|
70
|
-
Requires-Dist: typing-extensions==4.
|
|
68
|
+
Requires-Dist: pydot==4.0.1; extra == "strict"
|
|
69
|
+
Requires-Dist: python-ulid==3.1.0; extra == "strict"
|
|
70
|
+
Requires-Dist: typing-extensions==4.15.0; extra == "strict"
|
|
71
71
|
Dynamic: license-file
|
|
72
72
|
|
|
73
73
|
<div align="center">
|
|
@@ -27,20 +27,20 @@ classifiers = [
|
|
|
27
27
|
]
|
|
28
28
|
requires-python = ">=3.10"
|
|
29
29
|
dependencies = [
|
|
30
|
-
"PyYAML",
|
|
31
|
-
"maggma>=0.
|
|
30
|
+
"PyYAML>=6.0.1",
|
|
31
|
+
"maggma>=0.72.0",
|
|
32
32
|
"monty>=2023.9.25",
|
|
33
|
-
"networkx",
|
|
33
|
+
"networkx>=3.2.1",
|
|
34
34
|
"pydantic-settings>=2.0.3",
|
|
35
|
-
"pydantic>=2.
|
|
36
|
-
"pydash",
|
|
35
|
+
"pydantic>=2.4",
|
|
36
|
+
"pydash>=8.0.1",
|
|
37
37
|
]
|
|
38
38
|
|
|
39
39
|
[project.optional-dependencies]
|
|
40
40
|
ulid = ["python-ulid"]
|
|
41
41
|
docs = [
|
|
42
42
|
"autodoc_pydantic==2.2.0",
|
|
43
|
-
"furo==
|
|
43
|
+
"furo==2025.9.25",
|
|
44
44
|
"ipython==9.3.0",
|
|
45
45
|
"myst_parser==4.0.1",
|
|
46
46
|
"nbsphinx==0.9.7",
|
|
@@ -48,23 +48,23 @@ docs = [
|
|
|
48
48
|
"sphinx==8.1.3",
|
|
49
49
|
]
|
|
50
50
|
dev = ["pre-commit>=2.12.1", "typing_extensions; python_version < '3.11'"]
|
|
51
|
-
tests = ["moto==5.1.
|
|
51
|
+
tests = ["moto==5.1.16", "pytest-cov==7.0.0", "pytest==8.4.2"]
|
|
52
52
|
vis = ["matplotlib", "pydot"]
|
|
53
53
|
fireworks = ["FireWorks"]
|
|
54
54
|
strict = [
|
|
55
|
-
"FireWorks==2.0.
|
|
56
|
-
"PyYAML==6.0.
|
|
57
|
-
"maggma==0.
|
|
58
|
-
"matplotlib==3.10.
|
|
55
|
+
"FireWorks==2.0.6",
|
|
56
|
+
"PyYAML==6.0.3",
|
|
57
|
+
"maggma==0.72.0",
|
|
58
|
+
"matplotlib==3.10.7",
|
|
59
59
|
"monty==2025.3.3",
|
|
60
|
-
"moto==5.1.
|
|
60
|
+
"moto==5.1.16",
|
|
61
61
|
"networkx==3.4.2",
|
|
62
|
-
"pydantic-settings==2.
|
|
63
|
-
"pydantic==2.
|
|
62
|
+
"pydantic-settings==2.11.0",
|
|
63
|
+
"pydantic==2.12.3",
|
|
64
64
|
"pydash==8.0.5",
|
|
65
|
-
"pydot==4.0.
|
|
66
|
-
"python-ulid==3.
|
|
67
|
-
"typing-extensions==4.
|
|
65
|
+
"pydot==4.0.1",
|
|
66
|
+
"python-ulid==3.1.0",
|
|
67
|
+
"typing-extensions==4.15.0",
|
|
68
68
|
]
|
|
69
69
|
|
|
70
70
|
[project.urls]
|
|
@@ -163,6 +163,7 @@ ignore = [
|
|
|
163
163
|
"FBT001",
|
|
164
164
|
"FBT002",
|
|
165
165
|
"ISC001",
|
|
166
|
+
"PLC0415", # import should be at the top-level of a file
|
|
166
167
|
"PLR0911", # too-many-return-statements
|
|
167
168
|
"PLR0912", # too-many-branches
|
|
168
169
|
"PLR0913", # too-many-arguments
|
|
@@ -180,5 +181,6 @@ isort.known-first-party = ["jobflow"]
|
|
|
180
181
|
# D: pydocstyle
|
|
181
182
|
# PLR2004: magic-value-comparison
|
|
182
183
|
# PT004: pytest-missing-fixture-name-underscore
|
|
184
|
+
|
|
183
185
|
"**/tests/*" = ["ANN", "ARG001", "D", "PLR2004", "PT004", "S101"]
|
|
184
186
|
"docs/tutorials/*" = ["D", "PLR2004"]
|
|
@@ -706,6 +706,7 @@ class Flow(MSONable):
|
|
|
706
706
|
function_filter: Callable = None,
|
|
707
707
|
attributes: list[str] | str = None,
|
|
708
708
|
dynamic: bool = True,
|
|
709
|
+
dict_mod: bool = False,
|
|
709
710
|
):
|
|
710
711
|
"""
|
|
711
712
|
Update the job config of all Jobs in the Flow.
|
|
@@ -728,6 +729,9 @@ class Flow(MSONable):
|
|
|
728
729
|
dynamic
|
|
729
730
|
The updates will be propagated to Jobs/Flows dynamically generated at
|
|
730
731
|
runtime.
|
|
732
|
+
dict_mod
|
|
733
|
+
Use the dict mod language to apply updates. See :obj:`.DictMods` for more
|
|
734
|
+
details.
|
|
731
735
|
|
|
732
736
|
Examples
|
|
733
737
|
--------
|
|
@@ -767,6 +771,7 @@ class Flow(MSONable):
|
|
|
767
771
|
function_filter=function_filter,
|
|
768
772
|
attributes=attributes,
|
|
769
773
|
dynamic=dynamic,
|
|
774
|
+
dict_mod=dict_mod,
|
|
770
775
|
)
|
|
771
776
|
|
|
772
777
|
def add_hosts_uuids(
|
|
@@ -1022,6 +1022,7 @@ class Job(MSONable):
|
|
|
1022
1022
|
function_filter: Callable = None,
|
|
1023
1023
|
attributes: list[str] | str = None,
|
|
1024
1024
|
dynamic: bool = True,
|
|
1025
|
+
dict_mod: bool = False,
|
|
1025
1026
|
):
|
|
1026
1027
|
"""
|
|
1027
1028
|
Update the job config.
|
|
@@ -1045,6 +1046,9 @@ class Job(MSONable):
|
|
|
1045
1046
|
dynamic
|
|
1046
1047
|
The updates will be propagated to Jobs/Flows dynamically generated at
|
|
1047
1048
|
runtime.
|
|
1049
|
+
dict_mod
|
|
1050
|
+
Use the dict mod language to apply updates. See :obj:`.DictMods` for more
|
|
1051
|
+
details.
|
|
1048
1052
|
|
|
1049
1053
|
Examples
|
|
1050
1054
|
--------
|
|
@@ -1096,12 +1100,23 @@ class Job(MSONable):
|
|
|
1096
1100
|
At variance, if `dynamic` is set to `False` the `manager_config` option will
|
|
1097
1101
|
only be set for the `test_job` and not for the generated Jobs.
|
|
1098
1102
|
"""
|
|
1103
|
+
from jobflow.utils.dict_mods import apply_mod
|
|
1104
|
+
|
|
1105
|
+
if dict_mod and attributes:
|
|
1106
|
+
raise ValueError("dict_mod and attributes options cannot be used together")
|
|
1107
|
+
|
|
1108
|
+
if dict_mod and isinstance(config, JobConfig):
|
|
1109
|
+
raise ValueError(
|
|
1110
|
+
"If dict_mod is selected the update config cannot be a JobConfig object"
|
|
1111
|
+
)
|
|
1112
|
+
|
|
1099
1113
|
if dynamic:
|
|
1100
1114
|
dict_input = {
|
|
1101
1115
|
"config": config,
|
|
1102
1116
|
"name_filter": name_filter,
|
|
1103
1117
|
"function_filter": function_filter,
|
|
1104
1118
|
"attributes": attributes,
|
|
1119
|
+
"dict_mod": dict_mod,
|
|
1105
1120
|
}
|
|
1106
1121
|
self.config_updates.append(dict_input)
|
|
1107
1122
|
|
|
@@ -1119,29 +1134,34 @@ class Job(MSONable):
|
|
|
1119
1134
|
return
|
|
1120
1135
|
|
|
1121
1136
|
# if we get to here then we pass all the filters
|
|
1122
|
-
if
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
attributes = [attributes] if isinstance(attributes, str) else attributes
|
|
1128
|
-
if not set(attributes).issubset(set(config.keys())):
|
|
1129
|
-
raise ValueError(
|
|
1130
|
-
"Specified attributes include a key that is not present in the "
|
|
1131
|
-
"config dictionary."
|
|
1132
|
-
)
|
|
1133
|
-
config = JobConfig(**config)
|
|
1134
|
-
|
|
1135
|
-
if attributes is None:
|
|
1136
|
-
# overwrite the whole config
|
|
1137
|
-
self.config = config
|
|
1137
|
+
if dict_mod:
|
|
1138
|
+
conf_dict = self.config.as_dict()
|
|
1139
|
+
apply_mod(config, conf_dict)
|
|
1140
|
+
self.config = JobConfig.from_dict(conf_dict)
|
|
1138
1141
|
else:
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1142
|
+
if isinstance(config, dict):
|
|
1143
|
+
# convert dict specification to a JobConfig but set the attributes
|
|
1144
|
+
if attributes is None:
|
|
1145
|
+
attributes = list(config.keys())
|
|
1146
|
+
|
|
1147
|
+
attributes = [attributes] if isinstance(attributes, str) else attributes
|
|
1148
|
+
if not set(attributes).issubset(set(config.keys())):
|
|
1149
|
+
raise ValueError(
|
|
1150
|
+
"Specified attributes include a key that is not present in the "
|
|
1151
|
+
"config dictionary."
|
|
1152
|
+
)
|
|
1153
|
+
config = JobConfig(**config)
|
|
1154
|
+
|
|
1155
|
+
if attributes is None:
|
|
1156
|
+
# overwrite the whole config
|
|
1157
|
+
self.config = config
|
|
1158
|
+
else:
|
|
1159
|
+
# only update the specified attributes
|
|
1160
|
+
attributes = [attributes] if isinstance(attributes, str) else attributes
|
|
1161
|
+
for attr in attributes:
|
|
1162
|
+
if not hasattr(self.config, attr):
|
|
1163
|
+
raise ValueError(f"Unknown JobConfig attribute: {attr}")
|
|
1164
|
+
setattr(self.config, attr, getattr(config, attr))
|
|
1145
1165
|
|
|
1146
1166
|
def as_dict(self) -> dict:
|
|
1147
1167
|
"""Serialize the job as a dictionary."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jobflow
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: jobflow is a library for writing computational workflows
|
|
5
5
|
Author-email: Alex Ganose <a.ganose@imperial.ac.uk>
|
|
6
6
|
License: modified BSD
|
|
@@ -25,18 +25,18 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
25
25
|
Requires-Python: >=3.10
|
|
26
26
|
Description-Content-Type: text/markdown
|
|
27
27
|
License-File: LICENSE
|
|
28
|
-
Requires-Dist: PyYAML
|
|
29
|
-
Requires-Dist: maggma>=0.
|
|
28
|
+
Requires-Dist: PyYAML>=6.0.1
|
|
29
|
+
Requires-Dist: maggma>=0.72.0
|
|
30
30
|
Requires-Dist: monty>=2023.9.25
|
|
31
|
-
Requires-Dist: networkx
|
|
31
|
+
Requires-Dist: networkx>=3.2.1
|
|
32
32
|
Requires-Dist: pydantic-settings>=2.0.3
|
|
33
|
-
Requires-Dist: pydantic>=2.
|
|
34
|
-
Requires-Dist: pydash
|
|
33
|
+
Requires-Dist: pydantic>=2.4
|
|
34
|
+
Requires-Dist: pydash>=8.0.1
|
|
35
35
|
Provides-Extra: ulid
|
|
36
36
|
Requires-Dist: python-ulid; extra == "ulid"
|
|
37
37
|
Provides-Extra: docs
|
|
38
38
|
Requires-Dist: autodoc_pydantic==2.2.0; extra == "docs"
|
|
39
|
-
Requires-Dist: furo==
|
|
39
|
+
Requires-Dist: furo==2025.9.25; extra == "docs"
|
|
40
40
|
Requires-Dist: ipython==9.3.0; extra == "docs"
|
|
41
41
|
Requires-Dist: myst_parser==4.0.1; extra == "docs"
|
|
42
42
|
Requires-Dist: nbsphinx==0.9.7; extra == "docs"
|
|
@@ -46,28 +46,28 @@ Provides-Extra: dev
|
|
|
46
46
|
Requires-Dist: pre-commit>=2.12.1; extra == "dev"
|
|
47
47
|
Requires-Dist: typing_extensions; python_version < "3.11" and extra == "dev"
|
|
48
48
|
Provides-Extra: tests
|
|
49
|
-
Requires-Dist: moto==5.1.
|
|
50
|
-
Requires-Dist: pytest-cov==
|
|
51
|
-
Requires-Dist: pytest==8.4.
|
|
49
|
+
Requires-Dist: moto==5.1.16; extra == "tests"
|
|
50
|
+
Requires-Dist: pytest-cov==7.0.0; extra == "tests"
|
|
51
|
+
Requires-Dist: pytest==8.4.2; extra == "tests"
|
|
52
52
|
Provides-Extra: vis
|
|
53
53
|
Requires-Dist: matplotlib; extra == "vis"
|
|
54
54
|
Requires-Dist: pydot; extra == "vis"
|
|
55
55
|
Provides-Extra: fireworks
|
|
56
56
|
Requires-Dist: FireWorks; extra == "fireworks"
|
|
57
57
|
Provides-Extra: strict
|
|
58
|
-
Requires-Dist: FireWorks==2.0.
|
|
59
|
-
Requires-Dist: PyYAML==6.0.
|
|
60
|
-
Requires-Dist: maggma==0.
|
|
61
|
-
Requires-Dist: matplotlib==3.10.
|
|
58
|
+
Requires-Dist: FireWorks==2.0.6; extra == "strict"
|
|
59
|
+
Requires-Dist: PyYAML==6.0.3; extra == "strict"
|
|
60
|
+
Requires-Dist: maggma==0.72.0; extra == "strict"
|
|
61
|
+
Requires-Dist: matplotlib==3.10.7; extra == "strict"
|
|
62
62
|
Requires-Dist: monty==2025.3.3; extra == "strict"
|
|
63
|
-
Requires-Dist: moto==5.1.
|
|
63
|
+
Requires-Dist: moto==5.1.16; extra == "strict"
|
|
64
64
|
Requires-Dist: networkx==3.4.2; extra == "strict"
|
|
65
|
-
Requires-Dist: pydantic-settings==2.
|
|
66
|
-
Requires-Dist: pydantic==2.
|
|
65
|
+
Requires-Dist: pydantic-settings==2.11.0; extra == "strict"
|
|
66
|
+
Requires-Dist: pydantic==2.12.3; extra == "strict"
|
|
67
67
|
Requires-Dist: pydash==8.0.5; extra == "strict"
|
|
68
|
-
Requires-Dist: pydot==4.0.
|
|
69
|
-
Requires-Dist: python-ulid==3.
|
|
70
|
-
Requires-Dist: typing-extensions==4.
|
|
68
|
+
Requires-Dist: pydot==4.0.1; extra == "strict"
|
|
69
|
+
Requires-Dist: python-ulid==3.1.0; extra == "strict"
|
|
70
|
+
Requires-Dist: typing-extensions==4.15.0; extra == "strict"
|
|
71
71
|
Dynamic: license-file
|
|
72
72
|
|
|
73
73
|
<div align="center">
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
PyYAML
|
|
2
|
-
maggma>=0.
|
|
1
|
+
PyYAML>=6.0.1
|
|
2
|
+
maggma>=0.72.0
|
|
3
3
|
monty>=2023.9.25
|
|
4
|
-
networkx
|
|
4
|
+
networkx>=3.2.1
|
|
5
5
|
pydantic-settings>=2.0.3
|
|
6
|
-
pydantic>=2.
|
|
7
|
-
pydash
|
|
6
|
+
pydantic>=2.4
|
|
7
|
+
pydash>=8.0.1
|
|
8
8
|
|
|
9
9
|
[dev]
|
|
10
10
|
pre-commit>=2.12.1
|
|
@@ -14,7 +14,7 @@ typing_extensions
|
|
|
14
14
|
|
|
15
15
|
[docs]
|
|
16
16
|
autodoc_pydantic==2.2.0
|
|
17
|
-
furo==
|
|
17
|
+
furo==2025.9.25
|
|
18
18
|
ipython==9.3.0
|
|
19
19
|
myst_parser==4.0.1
|
|
20
20
|
nbsphinx==0.9.7
|
|
@@ -25,24 +25,24 @@ sphinx==8.1.3
|
|
|
25
25
|
FireWorks
|
|
26
26
|
|
|
27
27
|
[strict]
|
|
28
|
-
FireWorks==2.0.
|
|
29
|
-
PyYAML==6.0.
|
|
30
|
-
maggma==0.
|
|
31
|
-
matplotlib==3.10.
|
|
28
|
+
FireWorks==2.0.6
|
|
29
|
+
PyYAML==6.0.3
|
|
30
|
+
maggma==0.72.0
|
|
31
|
+
matplotlib==3.10.7
|
|
32
32
|
monty==2025.3.3
|
|
33
|
-
moto==5.1.
|
|
33
|
+
moto==5.1.16
|
|
34
34
|
networkx==3.4.2
|
|
35
|
-
pydantic-settings==2.
|
|
36
|
-
pydantic==2.
|
|
35
|
+
pydantic-settings==2.11.0
|
|
36
|
+
pydantic==2.12.3
|
|
37
37
|
pydash==8.0.5
|
|
38
|
-
pydot==4.0.
|
|
39
|
-
python-ulid==3.
|
|
40
|
-
typing-extensions==4.
|
|
38
|
+
pydot==4.0.1
|
|
39
|
+
python-ulid==3.1.0
|
|
40
|
+
typing-extensions==4.15.0
|
|
41
41
|
|
|
42
42
|
[tests]
|
|
43
|
-
moto==5.1.
|
|
44
|
-
pytest-cov==
|
|
45
|
-
pytest==8.4.
|
|
43
|
+
moto==5.1.16
|
|
44
|
+
pytest-cov==7.0.0
|
|
45
|
+
pytest==8.4.2
|
|
46
46
|
|
|
47
47
|
[ulid]
|
|
48
48
|
python-ulid
|
|
@@ -79,7 +79,7 @@ def test_settings_object(clean_dir, test_data):
|
|
|
79
79
|
with open(config_file_path, "w") as f:
|
|
80
80
|
pass
|
|
81
81
|
|
|
82
|
-
with pytest.warns(UserWarning):
|
|
82
|
+
with pytest.warns(UserWarning, match="An empty JobFlow config file was located at"):
|
|
83
83
|
settings = JobflowSettings()
|
|
84
84
|
|
|
85
85
|
# An error should be thrown if the file exists and
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|