Source code for neuroconv.tools.nwb_helpers._backend_configuration
"""Collection of helper functions related to configuration of datasets dependent on backend."""
from typing import Literal
from hdmf_zarr import NWBZarrIO
from pynwb import NWBHDF5IO, NWBFile
from ._configuration_models._hdf5_backend import HDF5BackendConfiguration
from ._configuration_models._zarr_backend import ZarrBackendConfiguration
BACKEND_CONFIGURATIONS = dict(hdf5=HDF5BackendConfiguration, zarr=ZarrBackendConfiguration)
BACKEND_NWB_IO = dict(hdf5=NWBHDF5IO, zarr=NWBZarrIO)
[docs]
def get_default_backend_configuration(
nwbfile: NWBFile, backend: Literal["hdf5", "zarr"]
) -> HDF5BackendConfiguration | ZarrBackendConfiguration:
"""Fill a default backend configuration to serve as a starting point for further customization."""
BackendConfigurationClass = BACKEND_CONFIGURATIONS[backend]
return BackendConfigurationClass.from_nwbfile_with_defaults(nwbfile=nwbfile)
[docs]
def get_existing_backend_configuration(nwbfile: NWBFile) -> HDF5BackendConfiguration | ZarrBackendConfiguration:
"""Fill an existing backend configuration to serve as a starting point for further customization.
Parameters
----------
nwbfile : NWBFile
The NWBFile object to extract the backend configuration from. The nwbfile must have been read from an io object
to work properly.
Returns
-------
HDF5BackendConfiguration | ZarrBackendConfiguration
The backend configuration extracted from the nwbfile.
"""
read_io = nwbfile.read_io
for backend, io in BACKEND_NWB_IO.items():
if isinstance(read_io, io):
break
BackendConfigurationClass = BACKEND_CONFIGURATIONS[backend]
return BackendConfigurationClass.from_nwbfile_with_existing(nwbfile=nwbfile)