Changeset View
Changeset View
Standalone View
Standalone View
swh/model/from_disk.py
Show First 20 Lines • Show All 499 Lines • ▼ Show 20 Lines | class Directory(MerkleNode): | ||||
def compute_hash(self): | def compute_hash(self): | ||||
return self.to_model().id | return self.to_model().id | ||||
def to_model(self) -> model.Directory: | def to_model(self) -> model.Directory: | ||||
"""Builds a `model.Directory` object based on this node; | """Builds a `model.Directory` object based on this node; | ||||
ignoring its children.""" | ignoring its children.""" | ||||
if self.__model_object is None: | if self.__model_object is None: | ||||
self.__model_object = model.Directory.from_dict({"entries": self.entries}) | |||||
DirectoryEntry = model.DirectoryEntry | |||||
entries = [] | |||||
for name, child in self.items(): | |||||
if child.object_type == "directory": | |||||
e = DirectoryEntry( | |||||
type="dir", | |||||
perms=DentryPerms.directory, | |||||
target=child.hash, | |||||
name=name, | |||||
) | |||||
elif child.object_type == "content": | |||||
e = DirectoryEntry( | |||||
type="file", | |||||
perms=child.data["perms"], | |||||
target=child.hash, | |||||
name=name, | |||||
) | |||||
else: | |||||
raise ValueError(f"unknown child {child}") | |||||
entries.append(e) | |||||
entries.sort(key=directory_entry_sort_key) | |||||
self.__model_object = model.Directory(entries=tuple(entries)) | |||||
return self.__model_object | return self.__model_object | ||||
def __getitem__(self, key): | def __getitem__(self, key): | ||||
if not isinstance(key, bytes): | if not isinstance(key, bytes): | ||||
raise ValueError("Can only get a bytes from Directory") | raise ValueError("Can only get a bytes from Directory") | ||||
# Convenience shortcut | # Convenience shortcut | ||||
if key == b"": | if key == b"": | ||||
▲ Show 20 Lines • Show All 49 Lines • Show Last 20 Lines |