Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
d53e426
Draft VirtualObjectStore implementation
maxrjones Mar 16, 2025
5ad7d37
Add test
maxrjones Mar 16, 2025
ac64c16
Handle dataset metadata
maxrjones Mar 16, 2025
e9f213f
Fix chunk length
maxrjones Mar 16, 2025
1079607
Pass kwargs to open_dataset
maxrjones Mar 16, 2025
b27dec9
Add variable attrs to Zarr metadata
maxrjones Mar 16, 2025
266fbed
Remove extra env
maxrjones Mar 16, 2025
480c175
Raise NotImplementErrors on get_partial_values and exists
maxrjones Mar 16, 2025
04a2e60
Add docstring for
maxrjones Mar 16, 2025
81b13c8
Make all VirtualObjectStore instances read_only
maxrjones Mar 16, 2025
540b0a8
Remove unused get_partial_values functionality
maxrjones Mar 16, 2025
29111c2
Add more docstrings
maxrjones Mar 16, 2025
147682b
Fix some typos
maxrjones Mar 16, 2025
2475e6d
Fix typing
maxrjones Mar 16, 2025
cc1b2f8
Add release notes
maxrjones Mar 16, 2025
5dee76d
Merge branch 'develop' into virtual-obstore-store
maxrjones Mar 16, 2025
e3195fd
Add obstore to test and typing envs
maxrjones Mar 16, 2025
ac37f15
Revise based on code review
maxrjones Mar 17, 2025
58fc240
Simplify typing
maxrjones Mar 17, 2025
f15a52a
Move store selection outside try/except block
maxrjones Mar 17, 2025
52272d0
Remove accessor method
maxrjones Mar 17, 2025
756c3c4
Rename to ManifestStore
maxrjones Mar 17, 2025
c14e67a
Don't include ManifestStore in test_integration
maxrjones Mar 17, 2025
e8b995c
Merge branch 'develop' into virtual-obstore-store
maxrjones Mar 18, 2025
52287e9
Add basic test for ManifestStore
maxrjones Mar 18, 2025
aadb2e8
Add changes prototyped in TIFF branch
maxrjones Mar 20, 2025
cc93bfd
Improve module layout
maxrjones Mar 20, 2025
5f4b51e
Remove extra files
maxrjones Mar 20, 2025
1c373ab
Experiment with _create_manifest_store for HDF
maxrjones Mar 20, 2025
c39b335
Remove unrelated changes
maxrjones Mar 20, 2025
f04ce07
Update release notes
maxrjones Mar 20, 2025
5d799f2
Test ManifestGroup
maxrjones Mar 20, 2025
faa0e67
Add ManifestStore tests
maxrjones Mar 20, 2025
ae7597a
Fix optional imports
maxrjones Mar 20, 2025
aee346b
Fix pickling
maxrjones Mar 20, 2025
939d243
Fix list_dir
maxrjones Mar 20, 2025
5231800
Test store raises
maxrjones Mar 21, 2025
fdc8c41
Apply suggestions from code review
maxrjones Mar 21, 2025
28255e7
Merge branch 'develop' into virtual-obstore-store
maxrjones Mar 21, 2025
4a1b4ab
Update virtualizarr/manifests/store.py
maxrjones Mar 24, 2025
759e365
Fixup docstrings
maxrjones Mar 24, 2025
29d34e3
Rename manifest dict
maxrjones Mar 24, 2025
1f8f54b
Specify store is readonly
maxrjones Mar 24, 2025
3c35d8e
Install obstore from PyPI
maxrjones Mar 24, 2025
73e83dd
Simplify store checks
maxrjones Mar 24, 2025
595fbb8
Add lower bound
maxrjones Mar 24, 2025
2246d64
Add __init__ docstring
maxrjones Mar 24, 2025
e492564
Add intersphinx links
maxrjones Mar 24, 2025
091a4dd
Merge branch 'develop' into virtual-obstore-store
maxrjones Mar 24, 2025
4a99b15
Merge branch 'develop' into virtual-obstore-store
maxrjones Mar 24, 2025
7d67b74
Add obstore to intersphinx mapping
maxrjones Mar 24, 2025
6bfdf4d
Add ManifestGroup TODO
maxrjones Mar 24, 2025
709788b
Add TODO note for get_partial_values
maxrjones Mar 24, 2025
ed0c1a5
Return store in StoreRequest rather than the Store ID
maxrjones Mar 24, 2025
dfba447
Merge branch 'develop' into virtual-obstore-store
maxrjones Mar 24, 2025
9e0bb9b
Remove redundant deps
maxrjones Mar 24, 2025
48e32a4
Merge branch 'develop' into virtual-obstore-store
maxrjones Mar 25, 2025
f221c93
Apply suggestions from code review
maxrjones Mar 25, 2025
2bea8b6
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Mar 25, 2025
61168f4
Lint
maxrjones Mar 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"numpy": ("https://numpy.org/doc/stable/", None),
"zarr": ("https://zarr.readthedocs.io/en/stable/", None),
"xarray": ("https://docs.xarray.dev/en/stable/", None),
"obstore": ("https://developmentseed.org/obstore/latest/", None),
}

# Add any paths that contain templates here, relative to this directory.
Expand Down
2 changes: 2 additions & 0 deletions docs/releases.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ v1.3.3 (unreleased)
New Features
~~~~~~~~~~~~

- Added experimental ManifestStore (:pull:`490`).

Breaking changes
~~~~~~~~~~~~~~~~

Expand Down
12 changes: 7 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ remote = [
"aiohttp",
"s3fs",
]

obstore = [
"obstore>=0.5.1",
]
# non-kerchunk-based readers
hdf = [
"virtualizarr[remote]",
Expand Down Expand Up @@ -172,11 +174,11 @@ run-tests-html-cov = { cmd = "pytest -n auto --run-network-tests --verbose --cov
[tool.pixi.environments]
min-deps = ["dev", "hdf", "hdf5", "hdf5-lib"] # VirtualiZarr/conftest.py using h5py, so the minimum set of dependencies for testing still includes hdf libs
# Inherit from min-deps to get all the test commands, along with optional dependencies
test = ["dev", "remote", "hdf", "hdf5", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib"]
test-py311 = ["dev", "remote", "hdf", "hdf5", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "py311"] # test against python 3.11
test-py312 = ["dev", "remote", "hdf", "hdf5", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "py312"] # test against python 3.12
test = ["dev", "remote", "hdf", "hdf5", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "obstore"]
test-py311 = ["dev", "remote", "hdf", "hdf5", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "obstore", "py311"] # test against python 3.11
test-py312 = ["dev", "remote", "hdf", "hdf5", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "obstore", "py312"] # test against python 3.12
upstream = ["dev", "hdf", "hdf5", "hdf5-lib", "netcdf3", "upstream", "icechunk-dev"]
all = ["dev", "remote", "hdf", "hdf5", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "all_readers", "all_writers"]
all = ["dev", "remote", "hdf", "hdf5", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "obstore", "all_readers", "all_writers"]
docs = ["docs"]


Expand Down
2 changes: 2 additions & 0 deletions virtualizarr/manifests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
# This is just to avoid conflicting with some type of file called manifest that .gitignore recommends ignoring.

from .array import ManifestArray # type: ignore # noqa
from .group import ManifestGroup # type: ignore # noqa
from .manifest import ChunkEntry, ChunkManifest # type: ignore # noqa
from .store import ManifestStore # type: ignore # noqa
37 changes: 37 additions & 0 deletions virtualizarr/manifests/group.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from typing import Mapping, TypeAlias

from zarr.core.group import GroupMetadata

from virtualizarr.manifests import ManifestArray

ManifestArrayVariableMapping: TypeAlias = dict[str, ManifestArray]


class ManifestGroup:
"""
Virtualized representation of multiple ManifestArrays as a Zarr Group.
"""

# TODO: Consider refactoring according to https://github.com/zarr-developers/VirtualiZarr/pull/490#discussion_r2007805272
_manifest_arrays: Mapping[str, ManifestArray]
_metadata: GroupMetadata

def __init__(
self,
manifest_arrays: ManifestArrayVariableMapping,
attributes: dict,
) -> None:
"""
Create a ManifestGroup from the dictionary of ManifestArrays and the group / dataset level metadata

Parameters
----------
attributes : attributes to include in Group metadata
manifest_dict : ManifestArrayVariableMapping
"""

self._metadata = GroupMetadata(attributes=attributes)
self._manifest_arrays = manifest_arrays

def __str__(self) -> str:
return f"ManifestGroup(manifest_arrays={self._manifest_arrays}, metadata={self._metadata})"
Loading