Skip to content

Commit

Permalink
rearrange/rename writer objects
Browse files Browse the repository at this point in the history
  • Loading branch information
magland committed Apr 4, 2024
1 parent c4129d5 commit a51e417
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 25 deletions.
12 changes: 9 additions & 3 deletions lindi/LindiH5pyFile/LindiH5pyAttributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from .LindiH5pyReference import LindiH5pyReference
from ..conversion.attr_conversion import zarr_to_h5_attr
from ..conversion.nan_inf_ninf import decode_nan_inf_ninf
from .write.LindiH5pyAttributesWrite import LindiH5pyAttributesWrite
from .writers.LindiH5pyAttributesWriter import LindiH5pyAttributesWriter

_special_attribute_keys = [
"_SCALAR",
Expand All @@ -19,7 +19,10 @@ def __init__(self, attrs, attrs_type: Literal["h5py", "zarr"], readonly: bool):
self._attrs_type = attrs_type
self._readonly = readonly

self._write = LindiH5pyAttributesWrite(self)
if self._readonly:
self._writer = None
else:
self._writer = LindiH5pyAttributesWriter(self)

def get(self, key, default=None):
if self._attrs_type == "h5py":
Expand Down Expand Up @@ -61,7 +64,10 @@ def __getitem__(self, key):
raise ValueError(f"Unknown attrs_type: {self._attrs_type}")

def __setitem__(self, key, value):
self._write.__setitem__(key, value)
if self._readonly:
raise ValueError("Cannot set items on read-only object")
assert self._writer is not None
self._writer.__setitem__(key, value)

def __delitem__(self, key):
raise KeyError("Cannot delete attributes on read-only object")
Expand Down
21 changes: 15 additions & 6 deletions lindi/LindiH5pyFile/LindiH5pyDataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class LindiH5pyDataset(h5py.Dataset):
def __init__(self, _dataset_object: Union[h5py.Dataset, zarr.Array], _file: "LindiH5pyFile"):
self._dataset_object = _dataset_object
self._file = _file
self._readonly = _file.mode not in ['r+']

# See if we have the _COMPOUND_DTYPE attribute, which signifies that
# this is a compound dtype
Expand Down Expand Up @@ -62,8 +63,12 @@ def __init__(self, _dataset_object: Union[h5py.Dataset, zarr.Array], _file: "Lin
self._is_scalar = self._dataset_object.ndim == 0

# The self._write object handles all the writing operations
from .write.LindiH5pyDatasetWrite import LindiH5pyDatasetWrite # avoid circular import
self._write = LindiH5pyDatasetWrite(self)
from .writers.LindiH5pyDatasetWriter import LindiH5pyDatasetWriter # avoid circular import

if self._readonly:
self._writer = None
else:
self._writer = LindiH5pyDatasetWriter(self)

@property
def id(self):
Expand Down Expand Up @@ -224,14 +229,18 @@ def _get_external_hdf5_client(self, url: str) -> h5py.File:

@property
def ref(self):
return self._write.ref
if self._readonly:
raise ValueError("Cannot get ref on read-only object")
assert self._writer is not None
return self._writer.ref

##############################
# Write
def __setitem__(self, args, val):
if self._file._mode not in ['r+']:
raise Exception('Cannot set item on dataset in read-only mode.')
self._write.__setitem__(args, val)
if self._readonly:
raise ValueError("Cannot set items on read-only object")
assert self._writer is not None
self._writer.__setitem__(args, val)


class LindiH5pyDatasetCompoundFieldSelection:
Expand Down
38 changes: 25 additions & 13 deletions lindi/LindiH5pyFile/LindiH5pyGroup.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@ class LindiH5pyGroup(h5py.Group):
def __init__(self, _group_object: Union[h5py.Group, zarr.Group], _file: "LindiH5pyFile"):
self._group_object = _group_object
self._file = _file
self._readonly = _file.mode not in ['r+']

# The self._write object handles all the writing operations
from .write.LindiH5pyGroupWrite import LindiH5pyGroupWrite # avoid circular import
self._write = LindiH5pyGroupWrite(self)
from .writers.LindiH5pyGroupWriter import LindiH5pyGroupWriter # avoid circular import
if self._readonly:
self._writer = None
else:
self._writer = LindiH5pyGroupWriter(self)

def __getitem__(self, name):
if isinstance(self._group_object, h5py.Group):
Expand Down Expand Up @@ -154,31 +158,39 @@ def attrs(self): # type: ignore

@property
def ref(self):
return self._write.ref
if self._readonly:
raise ValueError("Cannot get ref on read-only object")
assert self._writer is not None
return self._writer.ref

##############################
# write
def create_group(self, name, track_order=None):
if self._file._mode not in ['r+']:
if self._readonly:
raise Exception('Cannot create group in read-only mode')
return self._write.create_group(name, track_order=track_order)
assert self._writer is not None
return self._writer.create_group(name, track_order=track_order)

def require_group(self, name):
if self._file._mode not in ['r+']:
if self._readonly:
raise Exception('Cannot require group in read-only mode')
return self._write.require_group(name)
assert self._writer is not None
return self._writer.require_group(name)

def create_dataset(self, name, shape=None, dtype=None, data=None, **kwds):
if self._file._mode not in ['r+']:
if self._readonly:
raise Exception('Cannot create dataset in read-only mode')
return self._write.create_dataset(name, shape=shape, dtype=dtype, data=data, **kwds)
assert self._writer is not None
return self._writer.create_dataset(name, shape=shape, dtype=dtype, data=data, **kwds)

def __setitem__(self, name, obj):
if self._file._mode not in ['r+']:
if self._readonly:
raise Exception('Cannot set item in read-only mode')
return self._write.__setitem__(name, obj)
assert self._writer is not None
return self._writer.__setitem__(name, obj)

def __delitem__(self, name):
if self._file._mode not in ['r+']:
if self._readonly:
raise Exception('Cannot delete item in read-only mode')
return self._write.__delitem__(name)
assert self._writer is not None
return self._writer.__delitem__(name)
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from ..LindiH5pyAttributes import LindiH5pyAttributes # pragma: no cover


class LindiH5pyAttributesWrite:
class LindiH5pyAttributesWriter:
def __init__(self, p: 'LindiH5pyAttributes'):
self.p = p

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from ..LindiH5pyDataset import LindiH5pyDataset # pragma: no cover


class LindiH5pyDatasetWrite:
class LindiH5pyDatasetWriter:
def __init__(self, p: 'LindiH5pyDataset'):
self.p = p

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from ...conversion.create_zarr_dataset_from_h5_data import create_zarr_dataset_from_h5_data


class LindiH5pyGroupWrite:
class LindiH5pyGroupWriter:
def __init__(self, p: 'LindiH5pyGroup'):
self.p = p

Expand Down
File renamed without changes.

0 comments on commit a51e417

Please sign in to comment.