Source code for eradiate.data._blind_directory

from __future__ import annotations

import typing as t
from pathlib import Path

import attrs

from ._core import DataStore
from ..attrs import documented, parse_docs
from ..exceptions import DataError
from ..typing import PathLike


[docs] @parse_docs @attrs.define class BlindDirectoryDataStore(DataStore): """ Serve files stored in a directory. """ path: Path = documented( attrs.field(converter=lambda x: Path(x).absolute()), type="Path", init_type="path-like", doc="Path to the root of the directory referenced by this data store.", ) @property def base_url(self) -> str: """ Raises :class:`NotImplementedError` (this data store has no target location). """ raise NotImplementedError @property def registry(self) -> dict: """ Raises :class:`NotImplementedError` (this data store has no registry). """ raise NotImplementedError
[docs] def registry_files( self, filter: t.Callable[[t.Any], bool] | None = None ) -> list[str]: """ Returns an empty list (this data store has no registry). """ return []
[docs] def fetch(self, filename: PathLike, **kwargs) -> Path: # No kwargs are actually accepted if kwargs: keyword = next(iter(kwargs.keys())) raise TypeError(f"fetch() got an unexpected keyword argument '{keyword}'") fname = self.path / filename if fname.is_file(): return fname else: raise DataError(f"file '{str(filename)}' is not in '{str(self.path)}'")