From 9c35ca76a4dfca9e2bd00c24ed4ad5f59eddfab6 Mon Sep 17 00:00:00 2001 From: Zooko O'Whielacronx Date: Tue, 4 Nov 2008 17:47:15 -0700 Subject: [PATCH] util: copy in pyutil.fileutil.ReopenableNamedTemporaryFile --- src/allmydata/util/fileutil.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/allmydata/util/fileutil.py b/src/allmydata/util/fileutil.py index 9b3ef9a66..c799765cf 100644 --- a/src/allmydata/util/fileutil.py +++ b/src/allmydata/util/fileutil.py @@ -68,6 +68,30 @@ def remove(f, tries=4, basedelay=0.1): basedelay *= 2 return os.remove(f) # The last try. +class ReopenableNamedTemporaryFile: + """ + This uses tempfile.mkstemp() to generate a secure temp file. It then closes + the file, leaving a zero-length file as a placeholder. You can get the + filename with ReopenableNamedTemporaryFile.name. When the + ReopenableNamedTemporaryFile instance is garbage collected or its shutdown() + method is called, it deletes the file. + """ + def __init__(self, *args, **kwargs): + fd, self.name = tempfile.mkstemp(*args, **kwargs) + os.close(fd) + + def __repr__(self): + return "<%s instance at %x %s>" % (self.__class__.__name__, id(self), self.name) + + def __str__(self): + return self.__repr__() + + def __del__(self): + self.shutdown() + + def shutdown(self): + remove(self.name) + class NamedTemporaryDirectory: """ This calls tempfile.mkdtemp(), stores the name of the dir in