@@ -312,7 +312,7 @@ def _tmp_file_name(
312312    path : epath .PathLike ,
313313    subfolder : str  |  None  =  None ,
314314) ->  epath .Path :
315-   """Returns the temporary file name for  the given path. 
315+   """Returns the temporary file path dependent on  the given path and subfolder . 
316316
317317  Args: 
318318    path: The path to the file. 
@@ -322,9 +322,12 @@ def _tmp_file_name(
322322  path  =  epath .Path (path )
323323  file_name  =  f'{ _tmp_file_prefix ()}  .{ path .name }  ' 
324324  if  subfolder :
325-     return  path .parent  /  subfolder  /  file_name 
325+     tmp_path   =  path .parent  /  subfolder  /  file_name 
326326  else :
327-     return  path .parent  /  file_name 
327+     tmp_path  =  path .parent  /  file_name 
328+   # Create the parent directory if it doesn't exist. 
329+   tmp_path .parent .mkdir (parents = True , exist_ok = True )
330+   return  tmp_path 
328331
329332
330333@contextlib .contextmanager  
@@ -334,7 +337,6 @@ def incomplete_file(
334337) ->  Iterator [epath .Path ]:
335338  """Writes to path atomically, by writing to temp file and renaming it.""" 
336339  tmp_path  =  _tmp_file_name (path , subfolder = subfolder )
337-   tmp_path .parent .mkdir (exist_ok = True )
338340  try :
339341    yield  tmp_path 
340342    tmp_path .replace (path )
@@ -346,20 +348,24 @@ def incomplete_file(
346348@contextlib .contextmanager  
347349def  incomplete_files (
348350    path : epath .Path ,
351+     subfolder : str  |  None  =  None ,
349352) ->  Iterator [epath .Path ]:
350353  """Writes to path atomically, by writing to temp file and renaming it.""" 
351-   tmp_file_prefix  =  _tmp_file_prefix ( )
352-   tmp_path  =  path . parent   /   f' { tmp_file_prefix }  .{ path .name }  '
354+   tmp_path  =  _tmp_file_name ( path ,  subfolder = subfolder )
355+   tmp_file_prefix  =  tmp_path . name . removesuffix ( f' .{ path .name }  ') 
353356  try :
354357    yield  tmp_path 
355358    # Rename all tmp files to their final name. 
356-     for  tmp_file  in  path .parent .glob (f'{ tmp_file_prefix }  .*' ):
359+     for  tmp_file  in  tmp_path .parent .glob (f'{ tmp_file_prefix }  .*' ):
357360      file_name  =  tmp_file .name .removeprefix (tmp_file_prefix  +  '.' )
358361      tmp_file .replace (path .parent  /  file_name )
359362  finally :
360363    # Eventually delete the tmp_path if exception was raised 
361-     for  tmp_file  in  path .parent .glob (f'{ tmp_file_prefix }  .*' ):
362-       tmp_file .unlink (missing_ok = True )
364+     if  subfolder :
365+       tmp_path .parent .unlink (missing_ok = True )
366+     else :
367+       for  tmp_file  in  tmp_path .parent .glob (f'{ tmp_file_prefix }  .*' ):
368+         tmp_file .unlink (missing_ok = True )
363369
364370
365371def  is_incomplete_file (path : epath .Path ) ->  bool :
0 commit comments