Skip to content

Commit 64ff6fd

Browse files
authored
add --download-only option to openfe test (#1814)
* add boilerplate * define pooch cache at top level * try downloading one file * put pooch cache in utils * use dict * add all cli data * keep registry data all in one place * move downloader to openfe from openfecli * add both registries to test * rename for clarity * better docstring
1 parent b81c963 commit 64ff6fd

File tree

15 files changed

+221
-60
lines changed

15 files changed

+221
-60
lines changed

news/test-download-all.rst

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
**Added:**
2+
3+
* Added ``openfe test --download-only`` flag, which caches all test data stored remotely.
4+
5+
**Changed:**
6+
7+
* <news item>
8+
9+
**Deprecated:**
10+
11+
* <news item>
12+
13+
**Removed:**
14+
15+
* <news item>
16+
17+
**Fixed:**
18+
19+
* <news item>
20+
21+
**Security:**
22+
23+
* <news item>

src/openfe/data/__init__.py

Whitespace-only changes.

src/openfe/data/_downloader.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import pooch
2+
3+
from ._registry import zenodo_data_registry
4+
5+
6+
def retrieve_registry_data(zenodo_registry: list[dict], path: str) -> None:
7+
"""Helper function for pulling all test data up-front.
8+
9+
Parameters
10+
----------
11+
path : str
12+
path to store the data - usually a pooch.os_cache instance.
13+
14+
"""
15+
downloader = pooch.DOIDownloader(progressbar=True)
16+
17+
def _infer_processor(fname: str):
18+
if fname.endswith("tar.gz"):
19+
return pooch.Untar()
20+
elif fname.endswith("zip"):
21+
return pooch.Unzip()
22+
else:
23+
return None
24+
25+
for d in zenodo_registry:
26+
pooch.retrieve(
27+
url=d["base_url"] + d["fname"],
28+
known_hash=d["known_hash"],
29+
fname=d["fname"],
30+
processor=_infer_processor(d["fname"]),
31+
downloader=downloader,
32+
path=path,
33+
)

src/openfe/data/_registry.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import pooch
2+
3+
POOCH_CACHE = pooch.os_cache("openfe")
4+
5+
zenodo_rfe_simulation_nc = dict(
6+
base_url="doi:10.5281/zenodo.15375081/",
7+
fname="simulation.nc",
8+
known_hash="md5:bc4e842b47de17704d804ae345b91599",
9+
)
10+
zenodo_t4_lysozyme_traj = dict(
11+
base_url="doi:10.5281/zenodo.15212342",
12+
fname="t4_lysozyme_trajectory.zip",
13+
known_hash="sha256:e985d055db25b5468491e169948f641833a5fbb67a23dbb0a00b57fb7c0e59c8",
14+
)
15+
zenodo_industry_benchmark_systems = dict(
16+
base_url="doi:10.5281/zenodo.15212342",
17+
fname="industry_benchmark_systems.zip",
18+
known_hash="sha256:2bb5eee36e29b718b96bf6e9350e0b9957a592f6c289f77330cbb6f4311a07bd",
19+
)
20+
zenodo_data_registry = [
21+
zenodo_rfe_simulation_nc,
22+
zenodo_t4_lysozyme_traj,
23+
zenodo_industry_benchmark_systems,
24+
]

src/openfe/tests/conftest.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@
2222
from rdkit.Chem import AllChem
2323

2424
import openfe
25+
from openfe.data._registry import POOCH_CACHE
2526
from openfe.protocols.openmm_rfe import RelativeHybridTopologyProtocol
2627
from openfe.protocols.openmm_rfe._rfe_utils.relative import HybridTopologyFactory
2728
from openfe.protocols.openmm_utils.serialization import deserialize
2829
from openfe.tests.protocols.openmm_rfe.helpers import make_htf
2930

30-
POOCH_CACHE = pooch.os_cache("openfe")
31-
3231

3332
class SlowTests:
3433
"""Plugin for handling fixtures that skips slow tests

src/openfe/tests/protocols/conftest.py

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@
1717
from rdkit.Geometry import Point3D
1818

1919
import openfe
20-
21-
from ..conftest import POOCH_CACHE
20+
from openfe.data._registry import (
21+
POOCH_CACHE,
22+
zenodo_industry_benchmark_systems,
23+
zenodo_rfe_simulation_nc,
24+
zenodo_t4_lysozyme_traj,
25+
)
2226

2327

2428
@pytest.fixture
@@ -284,55 +288,50 @@ def septop_json() -> str:
284288
return f.read().decode() # type: ignore
285289

286290

287-
zenodo_industry_benchmarks_data = pooch.create(
291+
pooch_industry_benchmark_systems = pooch.create(
288292
path=POOCH_CACHE,
289-
base_url="doi:10.5281/zenodo.15212342",
293+
base_url=zenodo_industry_benchmark_systems["base_url"],
290294
registry={
291-
"industry_benchmark_systems.zip": "sha256:2bb5eee36e29b718b96bf6e9350e0b9957a592f6c289f77330cbb6f4311a07bd"
295+
zenodo_industry_benchmark_systems["fname"]: zenodo_industry_benchmark_systems["known_hash"]
292296
},
293297
)
294298

295299

296300
@pytest.fixture
297301
def industry_benchmark_files():
298-
zenodo_industry_benchmarks_data.fetch("industry_benchmark_systems.zip", processor=pooch.Unzip())
302+
pooch_industry_benchmark_systems.fetch(
303+
"industry_benchmark_systems.zip", processor=pooch.Unzip()
304+
)
299305
cache_dir = pathlib.Path(
300306
POOCH_CACHE / "industry_benchmark_systems.zip.unzip/industry_benchmark_systems"
301307
)
302308
return cache_dir
303309

304310

305-
zenodo_restraint_data = pooch.create(
311+
pooch_t4_lysozyme = pooch.create(
306312
path=POOCH_CACHE,
307-
base_url="doi:10.5281/zenodo.15212342",
308-
registry={
309-
"t4_lysozyme_trajectory.zip": "sha256:e985d055db25b5468491e169948f641833a5fbb67a23dbb0a00b57fb7c0e59c8"
310-
},
313+
base_url=zenodo_t4_lysozyme_traj["base_url"],
314+
registry={zenodo_t4_lysozyme_traj["fname"]: zenodo_t4_lysozyme_traj["known_hash"]},
311315
)
312316

313317

314318
# session scope for downstream reuse
315319
@pytest.fixture(scope="session")
316320
def t4_lysozyme_trajectory_dir():
317-
zenodo_restraint_data.fetch("t4_lysozyme_trajectory.zip", processor=pooch.Unzip())
321+
pooch_t4_lysozyme.fetch("t4_lysozyme_trajectory.zip", processor=pooch.Unzip())
318322
cache_dir = pathlib.Path(
319323
POOCH_CACHE / "t4_lysozyme_trajectory.zip.unzip/t4_lysozyme_trajectory"
320324
)
321325
return cache_dir
322326

323327

324-
RFE_OUTPUT = pooch.create(
325-
path=POOCH_CACHE,
326-
base_url="doi:10.6084/m9.figshare.24101655",
327-
registry={
328-
"simulation.nc": "92361a0864d4359a75399470135f56642b72c605069a4c33dbc4be6f91f28b31",
329-
},
330-
)
331-
332-
333328
@pytest.fixture
334329
def simulation_nc():
335-
return RFE_OUTPUT.fetch("simulation.nc")
330+
return pooch.retrieve(
331+
url=zenodo_rfe_simulation_nc["base_url"] + zenodo_rfe_simulation_nc["fname"],
332+
known_hash=zenodo_rfe_simulation_nc["known_hash"],
333+
path=POOCH_CACHE,
334+
)
336335

337336

338337
@pytest.fixture

src/openfe/tests/protocols/restraints/test_geometry_boresch.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from openff.units import unit
1010
from rdkit import Chem
1111

12+
from openfe.data._registry import POOCH_CACHE
1213
from openfe.protocols.restraint_utils.geometry.boresch.geometry import (
1314
BoreschRestraintGeometry,
1415
find_boresch_restraint,

src/openfe/tests/protocols/restraints/test_geometry_boresch_host.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from numpy.testing import assert_equal
1111
from openff.units import unit
1212

13+
from openfe.data._registry import POOCH_CACHE
1314
from openfe.protocols.restraint_utils.geometry.boresch.host import (
1415
EvaluateBoreschAtoms,
1516
EvaluateHostAtoms1,
@@ -24,7 +25,7 @@
2425
is_collinear,
2526
)
2627

27-
from ...conftest import HAS_INTERNET, POOCH_CACHE
28+
from ...conftest import HAS_INTERNET
2829

2930

3031
@pytest.fixture

src/openfe/tests/protocols/restraints/test_geometry_utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from openff.units import unit
1212
from rdkit import Chem
1313

14+
from openfe.data._registry import POOCH_CACHE
1415
from openfe.protocols.restraint_utils.geometry.utils import (
1516
CentroidDistanceSort,
1617
FindHostAtoms,

src/openfe/tests/protocols/restraints/test_omm_restraints.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from openff.units import unit
1010
from openmmtools.states import ThermodynamicState
1111

12+
from openfe.data._registry import POOCH_CACHE
1213
from openfe.protocols.restraint_utils.openmm.omm_restraints import (
1314
BoreschRestraint,
1415
BoreschRestraintGeometry,
@@ -26,7 +27,7 @@
2627
FlatBottomRestraintSettings,
2728
)
2829

29-
from ...conftest import HAS_INTERNET, POOCH_CACHE
30+
from ...conftest import HAS_INTERNET
3031

3132

3233
def test_parameter_state_default():

0 commit comments

Comments
 (0)