summaryrefslogtreecommitdiff
path: root/fs/tempfs.py
diff options
context:
space:
mode:
Diffstat (limited to 'fs/tempfs.py')
-rw-r--r--fs/tempfs.py25
1 files changed, 15 insertions, 10 deletions
diff --git a/fs/tempfs.py b/fs/tempfs.py
index bc7d75f..4142e9a 100644
--- a/fs/tempfs.py
+++ b/fs/tempfs.py
@@ -10,13 +10,14 @@ import os
import os.path
import time
import tempfile
-import platform
+from fs.base import synchronize
from fs.osfs import OSFS
from fs.errors import *
from fs import _thread_synchronize_default
+
class TempFS(OSFS):
"""Create a Filesystem in a temporary directory (with tempfile.mkdtemp),
@@ -38,7 +39,7 @@ class TempFS(OSFS):
self.identifier = identifier
self.temp_dir = temp_dir
self.dir_mode = dir_mode
- self._temp_dir = tempfile.mkdtemp(identifier or "TempFS",dir=temp_dir)
+ self._temp_dir = tempfile.mkdtemp(identifier or "TempFS", dir=temp_dir)
self._cleaned = False
super(TempFS, self).__init__(self._temp_dir, dir_mode=dir_mode, thread_synchronize=thread_synchronize)
@@ -65,6 +66,7 @@ class TempFS(OSFS):
# dir_mode=self.dir_mode,
# thread_synchronize=self.thread_synchronize)
+ @synchronize
def close(self):
"""Removes the temporary directory.
@@ -73,13 +75,13 @@ class TempFS(OSFS):
Note that once this method has been called, the FS object may
no longer be used.
"""
- super(TempFS,self).close()
+ super(TempFS, self).close()
# Depending on how resources are freed by the OS, there could
# be some transient errors when freeing a TempFS soon after it
# was used. If they occur, do a small sleep and try again.
try:
self._close()
- except (ResourceLockedError,ResourceInvalidError):
+ except (ResourceLockedError, ResourceInvalidError):
time.sleep(0.5)
self._close()
@@ -97,20 +99,23 @@ class TempFS(OSFS):
try:
# shutil.rmtree doesn't handle long paths on win32,
# so we walk the tree by hand.
- entries = os.walk(self.root_path,topdown=False)
- for (dir,dirnames,filenames) in entries:
+ entries = os.walk(self.root_path, topdown=False)
+ for (dir, dirnames, filenames) in entries:
for filename in filenames:
try:
- os_remove(os.path.join(dir,filename))
+ os_remove(os.path.join(dir, filename))
except ResourceNotFoundError:
pass
for dirname in dirnames:
try:
- os_rmdir(os.path.join(dir,dirname))
+ os_rmdir(os.path.join(dir, dirname))
except ResourceNotFoundError:
pass
- os.rmdir(self.root_path)
+ try:
+ os.rmdir(self.root_path)
+ except OSError:
+ pass
self._cleaned = True
finally:
self._lock.release()
- super(TempFS,self).close()
+ super(TempFS, self).close()