diff options
author | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-01-04 10:39:14 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-01-04 10:39:14 (GMT) |
commit | fd078d2f66a3ccbebafed2b35f9c67d34628f192 (patch) | |
tree | f4b9e52cdab15180984f0b4b09f47a34383f3ac1 | |
parent | de2aa036df5b65a091bd58d9015c8f41087ccdc6 (diff) |
Support nested requests for the same temp file path
-rw-r--r-- | src/sugar/util.py | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/sugar/util.py b/src/sugar/util.py index ac97f9a..d375b87 100644 --- a/src/sugar/util.py +++ b/src/sugar/util.py @@ -263,19 +263,31 @@ def timestamp_to_elapsed_string(timestamp, max_levels=2): return ELAPSED % time_period -class TempFilePath(str): +_tracked_paths = {} +class TempFilePath(str): def __new__(cls, path=None): if path is None: fd, path = tempfile.mkstemp() os.close(fd) logging.debug('TempFilePath created %r' % path) + + if path in _tracked_paths: + _tracked_paths[path] += 1 + else: + _tracked_paths[path] = 1 + return str.__new__(cls, path) def __del__(self): - if os.path.exists(self): - os.unlink(self) - logging.debug('TempFilePath deleted %r' % self) + if _tracked_paths[self] == 1: + del _tracked_paths[self] + + if os.path.exists(self): + os.unlink(self) + logging.debug('TempFilePath deleted %r' % self) + else: + logging.warning('TempFilePath already deleted %r' % self) else: - logging.warning('TempFilePath already deleted %r' % self) + _tracked_paths[self] -= 1 |