35 lines
		
	
	
		
			924 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			924 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from __future__ import annotations
 | |
| 
 | |
| import shutil
 | |
| import tempfile
 | |
| 
 | |
| from ._errors import OperationFailed
 | |
| from ._osfs import OSFS
 | |
| 
 | |
| 
 | |
| class TempFS(OSFS):
 | |
|     def __init__(self, auto_clean: bool = True, ignore_clean_errors: bool = True):
 | |
|         self.auto_clean = auto_clean
 | |
|         self.ignore_clean_errors = ignore_clean_errors
 | |
|         self._temp_dir = tempfile.mkdtemp("__temp_fs__")
 | |
|         self._cleaned = False
 | |
|         super().__init__(self._temp_dir)
 | |
| 
 | |
|     def close(self):
 | |
|         if self.auto_clean:
 | |
|             self.clean()
 | |
|         super().close()
 | |
| 
 | |
|     def clean(self):
 | |
|         if self._cleaned:
 | |
|             return
 | |
| 
 | |
|         try:
 | |
|             shutil.rmtree(self._temp_dir)
 | |
|         except Exception as e:
 | |
|             if not self.ignore_clean_errors:
 | |
|                 raise OperationFailed(
 | |
|                     f"failed to remove temporary directory: {self._temp_dir!r}"
 | |
|                 ) from e
 | |
|         self._cleaned = True
 |