From: Zooko O'Whielacronx Date: Wed, 5 Nov 2008 00:47:15 +0000 (-0700) Subject: util: copy in pyutil.fileutil.ReopenableNamedTemporaryFile X-Git-Url: https://git.rkrishnan.org/zeppelin?a=commitdiff_plain;h=9c35ca76a4dfca9e2bd00c24ed4ad5f59eddfab6;p=tahoe-lafs%2Ftahoe-lafs.git util: copy in pyutil.fileutil.ReopenableNamedTemporaryFile --- diff --git a/src/allmydata/util/fileutil.py b/src/allmydata/util/fileutil.py index 9b3ef9a6..c799765c 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