@@ -179,9 +179,9 @@ async def get(
179179 ) -> Buffer | None :
180180 # docstring inherited
181181 assert isinstance (key , str )
182-
182+ key_absolute = self . resolve_key ( key )
183183 with self ._lock :
184- return self ._get (self . resolve_key ( key ) , prototype = prototype , byte_range = byte_range )
184+ return self ._get (key_absolute , prototype = prototype , byte_range = byte_range )
185185
186186 async def get_partial_values (
187187 self ,
@@ -192,9 +192,8 @@ async def get_partial_values(
192192 out = []
193193 with self ._lock :
194194 for key , byte_range in key_ranges :
195- out .append (
196- self ._get (self .resolve_key (key ), prototype = prototype , byte_range = byte_range )
197- )
195+ key_absolute = self .resolve_key (key )
196+ out .append (self ._get (key_absolute , prototype = prototype , byte_range = byte_range ))
198197 return out
199198
200199 def _set (self , key : str , value : Buffer ) -> None :
@@ -213,64 +212,67 @@ async def set(self, key: str, value: Buffer) -> None:
213212 # docstring inherited
214213 self ._check_writable ()
215214 assert isinstance (key , str )
215+ key_absolute = self .resolve_key (key )
216216 if not isinstance (value , Buffer ):
217217 raise TypeError ("ZipStore.set(): `value` must a Buffer instance" )
218218 with self ._lock :
219- self ._set (self . resolve_key ( key ) , value )
219+ self ._set (key_absolute , value )
220220
221221 async def set_partial_values (self , key_start_values : Iterable [tuple [str , int , bytes ]]) -> None :
222222 raise NotImplementedError
223223
224224 async def set_if_not_exists (self , key : str , default : Buffer ) -> None :
225- key_abs = self .resolve_key (key )
225+ key_absolute = self .resolve_key (key )
226226 self ._check_writable ()
227227 with self ._lock :
228228 members = self ._zf .namelist ()
229- if key_abs not in members :
230- self ._set (key_abs , default )
229+ if key_absolute not in members :
230+ self ._set (key_absolute , default )
231231
232232 async def delete (self , key : str ) -> None :
233233 # docstring inherited
234234 raise NotImplementedError
235235
236236 async def exists (self , key : str ) -> bool :
237237 # docstring inherited
238+ key_absolute = self .resolve_key (key )
238239 with self ._lock :
239240 try :
240- self ._zf .getinfo (self . resolve_key ( key ) )
241+ self ._zf .getinfo (key_absolute )
241242 except KeyError :
242243 return False
243244 else :
244245 return True
245246
246247 async def list (self ) -> AsyncGenerator [str , None ]:
247248 # docstring inherited
248- with self ._lock :
249- for key in self ._zf .namelist ():
250- yield key .lstrip ("/" )
249+ async for result in self .list_prefix ("" ):
250+ yield result
251251
252252 async def list_prefix (self , prefix : str ) -> AsyncGenerator [str , None ]:
253253 # docstring inherited
254- async for key in self .list ():
255- if key .startswith (prefix ):
256- yield key .removeprefix (prefix )
254+ prefix_absolute = self .resolve_key (prefix )
255+ with self ._lock :
256+ for key in self ._zf .namelist ():
257+ if key .startswith (prefix_absolute ):
258+ yield key .removeprefix (prefix_absolute ).lstrip ("/" )
257259
258260 async def list_dir (self , prefix : str ) -> AsyncGenerator [str , None ]:
259261 # docstring inherited
260- prefix_abs = self .resolve_key (prefix )
262+ prefix_absolute = self .resolve_key (prefix )
261263
262264 keys = self ._zf .namelist ()
263265 seen = set ()
264- if prefix_abs == "" :
266+ if prefix_absolute == "" :
265267 keys_unique = {k .split ("/" )[0 ] for k in keys }
266268 for key in keys_unique :
267269 if key not in seen :
268270 seen .add (key )
269271 yield key
270272 else :
271273 for key in keys :
272- if key .startswith (prefix_abs + "/" ) and key != prefix_abs :
273- k = key .removeprefix (prefix_abs + "/" ).split ("/" )[0 ]
274+ if key .startswith (prefix_absolute ) :
275+ k = key .removeprefix (prefix_absolute ). lstrip ( "/" ).split ("/" )[0 ]
274276 if k not in seen :
275277 seen .add (k )
276278 yield k
0 commit comments