summaryrefslogtreecommitdiff
path: root/Mailman/pythonlib/tempfile.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mailman/pythonlib/tempfile.py')
-rw-r--r--Mailman/pythonlib/tempfile.py146
1 files changed, 0 insertions, 146 deletions
diff --git a/Mailman/pythonlib/tempfile.py b/Mailman/pythonlib/tempfile.py
deleted file mode 100644
index 7c59eb6a5..000000000
--- a/Mailman/pythonlib/tempfile.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# Temporary file name allocation
-#
-# XXX This tries to be not UNIX specific, but I don't know beans about
-# how to choose a temp directory or filename on MS-DOS or other
-# systems so it may have to be changed...
-
-
-import os
-
-
-# Parameters that the caller may set to override the defaults
-
-tempdir = None
-template = None
-
-
-# Function to calculate the directory to use
-
-def gettempdir():
- global tempdir
- if tempdir is not None:
- return tempdir
- try:
- pwd = os.getcwd()
- except (AttributeError, os.error):
- pwd = os.curdir
- attempdirs = ['/usr/tmp', '/tmp', pwd]
- if os.name == 'nt':
- attempdirs.insert(0, 'C:\\TEMP')
- attempdirs.insert(0, '\\TEMP')
- elif os.name == 'mac':
- import macfs, MACFS
- try:
- refnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk,
- MACFS.kTemporaryFolderType, 1)
- dirname = macfs.FSSpec((refnum, dirid, '')).as_pathname()
- attempdirs.insert(0, dirname)
- except macfs.error:
- pass
- for envname in 'TMPDIR', 'TEMP', 'TMP':
- if os.environ.has_key(envname):
- attempdirs.insert(0, os.environ[envname])
- testfile = gettempprefix() + 'test'
- for dir in attempdirs:
- try:
- filename = os.path.join(dir, testfile)
- fp = open(filename, 'w')
- fp.write('blat')
- fp.close()
- os.unlink(filename)
- tempdir = dir
- break
- except IOError:
- pass
- if tempdir is None:
- msg = "Can't find a usable temporary directory amongst " + `attempdirs`
- raise IOError, msg
- return tempdir
-
-
-# Function to calculate a prefix of the filename to use
-
-_pid = None
-
-def gettempprefix():
- global template, _pid
- if os.name == 'posix' and _pid and _pid != os.getpid():
- # Our pid changed; we must have forked -- zap the template
- template = None
- if template is None:
- if os.name == 'posix':
- _pid = os.getpid()
- template = '@' + `_pid` + '.'
- elif os.name == 'nt':
- template = '~' + `os.getpid()` + '-'
- elif os.name == 'mac':
- template = 'Python-Tmp-'
- else:
- template = 'tmp' # XXX might choose a better one
- return template
-
-
-# Counter for generating unique names
-
-counter = 0
-
-
-# User-callable function to return a unique temporary file name
-
-def mktemp(suffix=""):
- global counter
- dir = gettempdir()
- pre = gettempprefix()
- while 1:
- counter = counter + 1
- file = os.path.join(dir, pre + `counter` + suffix)
- if not os.path.exists(file):
- return file
-
-
-class TemporaryFileWrapper:
- """Temporary file wrapper
-
- This class provides a wrapper around files opened for temporary use.
- In particular, it seeks to automatically remove the file when it is
- no longer needed.
- """
- def __init__(self, file, path):
- self.file = file
- self.path = path
-
- def close(self):
- self.file.close()
- os.unlink(self.path)
-
- def __del__(self):
- try: self.close()
- except: pass
-
- def __getattr__(self, name):
- file = self.__dict__['file']
- a = getattr(file, name)
- setattr(self, name, a)
- return a
-
-
-def TemporaryFile(mode='w+b', bufsize=-1, suffix=""):
- name = mktemp(suffix)
- if os.name == 'posix':
- # Unix -- be very careful
- fd = os.open(name, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0700)
- try:
- os.unlink(name)
- return os.fdopen(fd, mode, bufsize)
- except:
- os.close(fd)
- # this is a divergence from the Python 1.5.2 copy. Mailman can't
- # guarantee that Python 1.5.1 or better is being used, and Python
- # 1.5 doesn't have bare raise.
- import sys
- t, v, tb = sys.exc_info()
- raise t, v, tb
- else:
- # Non-unix -- can't unlink file that's still open, use wrapper
- file = open(name, mode, bufsize)
- return TemporaryFileWrapper(file, name)