def get_digest_size(self) -> Tuple[str, int]: size = 0 files = {} dirs = {} for name, n in self.children.items(): dgst, sz = n.get_digest_size() if isinstance(n, ZCDirectory): dirs[name] = (dgst, sz) else: files[name] = (dgst, sz) size += sz return (cast(str, get_checksum(files, dirs)), size)
def dirstat(dirpath: LocalZarrEntry) -> ZarrStat: size = 0 dir_md5s = {} file_md5s = {} files = [] for p in dirpath.iterdir(): if p.is_dir(): st = dirstat(p) size += st.size dir_md5s[p.name] = (st.digest.value, st.size) files.extend(st.files) else: size += p.size file_md5s[p.name] = (md5file_nocache(p.filepath), p.size) files.append(p) return ZarrStat( size=size, digest=Digest.dandi_zarr(get_checksum(file_md5s, dir_md5s)), files=files, )
def test_zarr_get_checksum_empty(): with pytest.raises(ValueError): get_checksum(files={}, directories={})
def test_zarr_get_checksum(files, directories, checksum): assert get_checksum(files=files, directories=directories) == checksum