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 | |||||