z3fdb.custom_store_builder#
Classes#
Builds a zarr store backed by FDB with an arbitrary group/array hierarchy. |
Module Contents#
- class _VGroup#
-
- name: str#
- __eq__(value: object) bool#
- descent(name: str) _VGroup#
Return the single child group called name.
- Raises:
Z3fdbError – If there is not exactly one. Names are unique by construction, so this is an internal invariant, a bare
assertwould vanish underpython -O.
- class CustomStoreBuilder(fdb_config_file: pathlib.Path | None = None)#
Builds a zarr store backed by FDB with an arbitrary group/array hierarchy.
Use
add_part()to register one or more MARS request parts (each producing a virtual zarr array) at arbitrary nested paths, then callbuild()to obtain a read-onlyFdbZarrStorethat zarr can open directly.- Parameters:
fdb_config_file – Optional path to an FDB config file.
None(default) lets FDB resolve its configuration from the environment.
- _ROOT_KEY = ''#
- _config = None#
- _root#
- _merge_vgroup(vgroup: _VGroup) None#
Insert vgroup into the virtual group tree rooted at self._root.
- static _parse_path(path: str) list[str]#
Convert a zarr-style path string to a list of name segments.
Leading and trailing slashes are stripped; multiple consecutive slashes are collapsed. An empty result (e.g.
""or"/") raisesValueError.Examples:
"sfc/wind" -> ["sfc", "wind"] "/sfc/wind" -> ["sfc", "wind"] # leading slash accepted "t2m" -> ["t2m"] # top-level array "" -> ValueError "/" -> ValueError
- _build_structure(path: list[str] | None) pychunked_data_view.ChunkedDataViewBuilder#
Return the ChunkedDataViewBuilder for path, creating it if needed.
Pass
Noneto obtain the builder for the root array.
- add_part(path: str | None, mars_request: pychunked_data_view.MarsSelection, axes: list[pychunked_data_view.AxisDefinition], extractor: pychunked_data_view.ExtractorType.Grib | pychunked_data_view.ExtractorType.GribJump) None#
Register a MARS request as a part of a virtual zarr array at path.
Calling this method multiple times with the same path adds further parts to the same array (equivalent to
ChunkedDataViewBuilder.add_part()called repeatedly).- Parameters:
path – Zarr-style path of the array in the hierarchy, e.g.
"group_a/sub_group/my_array"or"t2m"for a top-level (no-group) array. A leading/is accepted and ignored. PassNoneto place the array at the store root (accessible viazarr.open_array(store)); this is mutually exclusive with any named path.mars_request – MARS request as a dict mapping keys to values.
axes – Axis definitions describing how the request dimensions map to zarr array dimensions.
extractor – Extractor configuration (
ExtractorType.GriborExtractorType.GribJump).
- _existing_array(path: list[str] | None) pychunked_data_view.ChunkedDataViewBuilder#
Return the builder for an array already registered at path.
Unlike
_build_structure()this never creates one.extend_on_axis()andfill_missing_value()configure an existing array, so an unknown path is a mistake – usually a typo – rather than a request for a new empty array. Creating one silently would only surface much later, as “must add at least one part” frombuild().- Parameters:
path – Path segments, or
Nonefor the root array.- Returns:
The builder registered at path.
- Return type:
- Raises:
ValueError – If no array is registered at path.
- extend_on_axis(path: str | None, axis: int) None#
Declare the extension axis of the array at path.
The array must already exist: call
add_part()for path first.- Parameters:
path – Zarr-style path (same format as
add_part()).Nonerefers to the root array.axis – Zero-based index of the axis to extend.
- Raises:
ValueError – If no array is registered at path.
- fill_missing_value(path: str | None, value: float) None#
Set the fill value for the array at path.
The array must already exist: call
add_part()for path first.- Parameters:
path – Zarr-style path (same format as
add_part()).Nonerefers to the root array.value – Value written into positions flagged as missing by the GRIB bitmap. Also becomes the zarr array’s
fill_value. Defaults to NaN when not set.
- Raises:
ValueError – If no array is registered at path.
- build() z3fdb._internal.zarr.FdbZarrStore#
Assemble all registered views into a read-only
FdbZarrStore.- Returns:
A zarr-compatible store that can be opened with
zarr.open(store)(group hierarchy) orzarr.open_array(store)(when built from a single root array registered viapath=None).