@@ -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 :
0 commit comments