Skip to content

Commit 9d0474a

Browse files
committed
fix: deleted
1 parent 9bb95ec commit 9d0474a

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

src/mega/filesystem.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,6 @@ def __getitem__(self, node_id: NodeID) -> Node:
106106
"""Get the node with this ID"""
107107
return self._nodes[node_id]
108108

109-
def _was_deleted(self, node: Node) -> bool:
110-
return node.parent_id == self.trash_bin.id if self.trash_bin else False
111-
112109
@property
113110
def nodes(self) -> MappingProxyType[NodeID, Node]:
114111
"""A mapping of every node"""
@@ -135,22 +132,28 @@ def children(self) -> MappingProxyType[NodeID, tuple[NodeID, ...]]:
135132
@property
136133
def files(self) -> Iterable[Node]:
137134
"""All files that are NOT deleted"""
135+
deleted = {n.id for n in self._deleted()}
138136
for node in self:
139-
if node.type is NodeType.FILE and not self._was_deleted(node):
137+
if node.type is NodeType.FILE and not deleted:
140138
yield node
141139

142140
@property
143141
def folders(self) -> Iterable[Node]:
144142
"""All folders that are NOT deleted"""
143+
deleted = {n.id for n in self._deleted()}
145144
for node in self:
146-
if node.type is NodeType.FOLDER and not self._was_deleted(node):
145+
if node.type is NodeType.FOLDER and node.id not in deleted:
147146
yield node
148147

149148
@property
150149
def deleted(self) -> Iterable[Node]:
150+
"""All files or folders currently on the trash bin (Non recursive)"""
151+
yield from self._deleted(recursive=False)
152+
153+
def _deleted(self, *, recursive: bool = True) -> Iterable[Node]:
151154
"""All files or folders currently on the trash bin"""
152155
if self.trash_bin:
153-
yield from self.iterdir(self.trash_bin.id)
156+
yield from self.iterdir(self.trash_bin.id, recursive=recursive)
154157

155158
def relative_path(self, node_id: NodeID) -> PurePosixPath:
156159
"""Get the path of this node relative to the root folder"""
@@ -166,13 +169,15 @@ def search(
166169
"""Returns nodes that have "query" as a substring on their path"""
167170

168171
query = PurePosixPath(query).as_posix()
172+
deleted = {n.id for n in self._deleted()}
169173

170174
for node_id, path in self._paths.items():
171175
if query not in path.as_posix():
172176
continue
173177

174-
if exclude_deleted and self._was_deleted(self[node_id]):
178+
if exclude_deleted and node_id in deleted:
175179
continue
180+
176181
yield node_id, path
177182

178183
def find(self, path: str | PathLike[str]) -> Node:

tests/test_filesystem.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ def test_search(fs: UserFileSystem) -> None:
7171
assert sorted(results.values()) == sorted(PurePosixPath(v) for v in expected)
7272

7373

74+
def test_search_exclude_deleted(fs: UserFileSystem) -> None:
75+
results = dict(fs.search("/"))
76+
assert len(results) == 18
77+
results = dict(fs.search("/", exclude_deleted=False))
78+
assert len(results) == 20
79+
80+
7481
def test_find(fs: UserFileSystem) -> None:
7582
node = fs.find("/tests/scripts/notes.txt")
7683
assert node is fs[FIND_NODE_ID]

0 commit comments

Comments
 (0)