You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			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
 |