from mirage.cache.index import IndexCacheStore from mirage.core.chroma.path import resolve_path from mirage.types import FileStat, FileType, PathSpec from mirage.utils.errors import enoent async def stat_light(accessor, path: PathSpec, index: IndexCacheStore) -> FileStat: return await stat(accessor, path, index) async def stat(accessor, path: PathSpec, index: IndexCacheStore) -> FileStat: resolved = await resolve_path(accessor, path, index) if resolved.is_dir: return FileStat( name=stat_name(resolved.virtual_key, resolved.mount_prefix), type=FileType.DIRECTORY, extra={"children_count": 0}, ) if resolved.entry is None: raise enoent(path) return FileStat( name=resolved.entry.name, type=FileType.TEXT, size=resolved.entry.size, modified=resolved.entry.extra.get("updated_at"), fingerprint=None, revision=None, extra=dict(resolved.entry.extra), ) def stat_name(virtual_key: str, mount_prefix: str) -> str: root = mount_prefix.rstrip("/") or "/" if virtual_key == root: return "/" return virtual_key.rstrip("/").rsplit("/", 1)[-1]