diff --git a/virtualizarr/tests/test_integration.py b/virtualizarr/tests/test_integration.py index 05cd62e11..1ced398e6 100644 --- a/virtualizarr/tests/test_integration.py +++ b/virtualizarr/tests/test_integration.py @@ -29,6 +29,7 @@ requires_zarr_python, slow_test, ) +from virtualizarr.tests.utils import PYTEST_TMP_DIRECTORY_URL_PREFIX icechunk = pytest.importorskip("icechunk") @@ -143,19 +144,16 @@ def roundtrip_as_in_memory_icechunk( config = icechunk.RepositoryConfig.default() - url_prefixes = ["file:///private/var/folders/70", "file:///tmp/"] - - for url_prefix in url_prefixes: - container = icechunk.VirtualChunkContainer( - url_prefix=url_prefix, - store=icechunk.local_filesystem_store(url_prefix), - ) - config.set_virtual_chunk_container(container) + container = icechunk.VirtualChunkContainer( + url_prefix=PYTEST_TMP_DIRECTORY_URL_PREFIX, + store=icechunk.local_filesystem_store(PYTEST_TMP_DIRECTORY_URL_PREFIX), + ) + config.set_virtual_chunk_container(container) repo = icechunk.Repository.create( storage=storage, config=config, - authorize_virtual_chunk_access={prefix: None for prefix in url_prefixes}, + authorize_virtual_chunk_access={PYTEST_TMP_DIRECTORY_URL_PREFIX: None}, ) session = repo.writable_session("main") diff --git a/virtualizarr/tests/test_writers/test_icechunk.py b/virtualizarr/tests/test_writers/test_icechunk.py index d09966fc4..869954b0a 100644 --- a/virtualizarr/tests/test_writers/test_icechunk.py +++ b/virtualizarr/tests/test_writers/test_icechunk.py @@ -1,5 +1,3 @@ -import os -import tempfile import time from datetime import datetime, timedelta, timezone from pathlib import Path @@ -15,6 +13,7 @@ from zarr.core.metadata import ArrayV3Metadata from virtualizarr.manifests import ChunkManifest, ManifestArray +from virtualizarr.tests.utils import PYTEST_TMP_DIRECTORY_URL_PREFIX from virtualizarr.writers.icechunk import generate_chunk_key from virtualizarr.xarray import separate_coords @@ -28,11 +27,6 @@ ) -# Find location of pytest temporary data in what should be a cross-platform way. This should be the same as what pytest actually does - see https://docs.pytest.org/en/stable/how-to/tmp_path.html#temporary-directory-location-and-retention -# The realpath call is there to resolve any symbolic links, such as from /var/ to /private/var/ on MacOS, as Icechunk needs the entire URL prefix without symlinks. -PYTEST_TMP_DIRECTORY_URL_PREFIX = f"file://{os.path.realpath(tempfile.gettempdir())}" - - @pytest.fixture(scope="function") def icechunk_storage(tmp_path: Path) -> "Storage": from icechunk import Storage diff --git a/virtualizarr/tests/utils.py b/virtualizarr/tests/utils.py index 1336fb638..fa2935c0a 100644 --- a/virtualizarr/tests/utils.py +++ b/virtualizarr/tests/utils.py @@ -1,6 +1,7 @@ from __future__ import annotations import os +import tempfile from pathlib import Path from urllib.parse import urlparse @@ -9,6 +10,10 @@ from virtualizarr.parsers import HDFParser from virtualizarr.registry import ObjectStoreRegistry +# Find location of pytest temporary data in what should be a cross-platform way. This should be the same as what pytest actually does - see https://docs.pytest.org/en/stable/how-to/tmp_path.html#temporary-directory-location-and-retention +# The realpath call is there to resolve any symbolic links, such as from /var/ to /private/var/ on MacOS, as Icechunk needs the entire URL prefix without symlinks. +PYTEST_TMP_DIRECTORY_URL_PREFIX = f"file://{os.path.realpath(tempfile.gettempdir())}" + def obstore_local(url: str) -> ObjectStore: parsed = urlparse(url)