Source code for nwb2bids._core._convert_nwb_dataset
import os
import pathlib
import typing
import annotated_types
import pydantic
from .._converters._dataset_converter import DatasetConverter
from .._converters._run_config import RunConfig
def _make_absolute(p: pathlib.Path) -> pathlib.Path:
"""Make path absolute and normalized without following symlinks.
Uses os.path.abspath for normalization because:
- pathlib.resolve() follows symlinks (breaks git-annex/datalad paths)
- pathlib.absolute() doesn't normalize '..' components
- os.path.abspath normalizes without following symlinks
"""
return pathlib.Path(os.path.abspath(p))
AbsoluteFilePath = typing.Annotated[pydantic.FilePath, pydantic.BeforeValidator(_make_absolute)]
AbsoluteDirectoryPath = typing.Annotated[pydantic.DirectoryPath, pydantic.BeforeValidator(_make_absolute)]
NwbPathsList = typing.Annotated[
list[AbsoluteFilePath | AbsoluteDirectoryPath],
annotated_types.MinLen(1),
]
[docs]
@pydantic.validate_call
def convert_nwb_dataset(
*,
nwb_paths: NwbPathsList,
run_config: RunConfig = pydantic.Field(default_factory=lambda: RunConfig()),
) -> DatasetConverter:
"""
Convert a dataset of NWB files to a BIDS dataset.
Parameters
----------
nwb_paths : any iterable of file or directory paths
An iterable of NWB file paths and directories containing NWB files.
run_config : RunConfig, optional
The configuration for this conversion run.
Returns
-------
dataset_converter : DatasetConverter
The DatasetConverter used to perform the conversion.
Contains notifications and other contextual information about the conversion process.
"""
dataset_converter = DatasetConverter.from_nwb_paths(nwb_paths=nwb_paths, run_config=run_config)
dataset_converter.extract_metadata()
dataset_converter.convert_to_bids_dataset()
return dataset_converter