Source code for dantro.groups.dirpath

"""A data group that represents a directory path and holds the corresponding
file paths as members"""

import logging
import pathlib
from typing import Optional, Union

from ..containers import PathContainer
from ..exceptions import ItemAccessError
from . import OrderedDataGroup, is_group

log = logging.getLogger(__name__)

[docs]@is_group class DirectoryGroup(OrderedDataGroup): """A group that maps to a directory path in the file system.""" _NEW_CONTAINER_CLS: type = PathContainer _ALLOWED_CONT_TYPES: tuple = ("self", PathContainer)
[docs] def __init__( self, *args, name: str, dirpath: Union[str, pathlib.Path] = None, strict: bool = True, parent: "DirectoryGroup" = None, **kwargs, ): """Sets up a DirectoryGroup instance that holds the path to a certain directory. By default, this group only allows members to be :py:class:`~dantro.containers.path.PathContainer` or :py:class:`~dantro.groups.dirpath.DirectoryGroup` instances in order to maintain an association to the filesystem directory represented by this group. .. note:: It is not actually checked whether the path points to a directory. Args: *args: Passed to parent init dirpath (Union[str, pathlib.Path], optional): A path compatible to :py:class:`pathlib.Path`. This path need not exist in the file system but it should point to a directory. If not given at initialization, it should be set afterwards. strict (bool, optional): If not True, will allow members of this group to be of *any* kind of dantro object. **kwargs: Passed to parent init """ super().__init__(*args, name=name, parent=parent, **kwargs) if dirpath is None: if parent is not None and isinstance(parent, DirectoryGroup): dirpath = parent.fs_path.joinpath(name) else: raise TypeError( f"If not supplying `dirpath` argument to {self.logstr}, " "need a parent that is a DirectoryGroup and that can be " "used to deduce a directory path. " f"Parent was: {parent}" ) self._fs_path = pathlib.Path(dirpath) if not strict: self._ALLOWED_CONT_TYPES = None
@property def fs_path(self) -> pathlib.Path: """Returns the filesystem path associated with this group by reading the corresponding data attribute (by default: ``fs_path``). .. note:: The path this object represents may or may not exist. """ return self._fs_path