from functools import cache from pathlib import Path class Content: def __init__(self, path: Path) -> None: self.__path = path @property def path(self) -> Path: return self.__path class ContentDirectory(Content): def load(self, subpath: Path) -> Content: current: Content = self for part in subpath.parts: if not isinstance(current, ContentDirectory): raise NotADirectoryError(self.path) current = current.__load_children(part) return current @cache # noqa: B019 def __load_children(self, name: str) -> Content: child_path = self.path / name if not child_path.exists(): raise FileNotFoundError(child_path) if child_path.is_dir(): return ContentDirectory(child_path) raise NotImplementedError()