From 3f78f9ca0681a835e9b0fe2c2eaa58394a35b97d Mon Sep 17 00:00:00 2001 From: Matthew Avaylon Date: Thu, 7 Nov 2024 07:33:11 -0800 Subject: [PATCH] Support Pathlib (#212) * Support Pathlib * test * Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ src/hdmf_zarr/backend.py | 9 +++++++-- tests/unit/test_zarrio.py | 13 ++++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ed84f2f..78b5742d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # HDMF-ZARR Changelog +## 1.0.0 (Upcoming) +### Enhancements +* Added support for Pathlib paths. @mavaylon1 [#212](https://github.com/hdmf-dev/hdmf-zarr/pull/212) + ## 0.9.0 (September 16, 2024) ### Enhancements * Added support for appending a dataset of references. @mavaylon1 [#203](https://github.com/hdmf-dev/hdmf-zarr/pull/203) diff --git a/src/hdmf_zarr/backend.py b/src/hdmf_zarr/backend.py index 48826583..cb0fea66 100644 --- a/src/hdmf_zarr/backend.py +++ b/src/hdmf_zarr/backend.py @@ -48,6 +48,9 @@ from hdmf.query import HDMFDataset from hdmf.container import Container +from pathlib import Path + + # Module variables ROOT_NAME = 'root' """ @@ -84,7 +87,7 @@ def can_read(path): return False @docval({'name': 'path', - 'type': (str, *SUPPORTED_ZARR_STORES), + 'type': (str, Path, *SUPPORTED_ZARR_STORES), 'doc': 'the path to the Zarr file or a supported Zarr store'}, {'name': 'manager', 'type': BuildManager, 'doc': 'the BuildManager to use for I/O', 'default': None}, {'name': 'mode', 'type': str, @@ -115,6 +118,8 @@ def __init__(self, **kwargs): else: self.__synchronizer = synchronizer self.__mode = mode + if isinstance(path, Path): + path = str(path) self.__path = path self.__file = None self.__storage_options = storage_options @@ -195,7 +200,7 @@ def is_remote(self): 'type': (NamespaceCatalog, TypeMap), 'doc': 'the NamespaceCatalog or TypeMap to load namespaces into'}, {'name': 'path', - 'type': (str, *SUPPORTED_ZARR_STORES), + 'type': (str, Path, *SUPPORTED_ZARR_STORES), 'doc': 'the path to the Zarr file or a supported Zarr store'}, {'name': 'storage_options', 'type': dict, 'doc': 'Zarr storage options to read remote folders', diff --git a/tests/unit/test_zarrio.py b/tests/unit/test_zarrio.py index 533557cd..824e5ae4 100644 --- a/tests/unit/test_zarrio.py +++ b/tests/unit/test_zarrio.py @@ -24,6 +24,7 @@ import os import shutil import warnings +import pathlib CUR_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -136,6 +137,16 @@ def setUp(self): self.store = [NestedDirectoryStore(p) for p in self.store_path] +######################################### +# Pathlib Tests +######################################### +class TestPathlib(BaseTestZarrWriter): + """Test writing of builder with Zarr using a custom DirectoryStore""" + def setUp(self): + super().setUp() + self.store = pathlib.Path(self.store_path) + + ######################################### # Consolidate Metadata tests ######################################### @@ -195,7 +206,7 @@ class TestDimensionLabels(BuildDatasetShapeMixin): Workflow: i) We need to define a `get_dataset_inc_spec` to set the dim in the spec (via BuildDatasetShapeMixin) ii) Create and write a BarDataHolder with a BarData. - iii) Read and check that the _ARRAY_DIMENSIONS attribute is set. + iii) Read and check that the _ARRAY_DIMENSIONS attribute is set. """ def tearDown(self): shutil.rmtree(self.store)