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
|