parent
d7a65386a3
commit
3ee3dd5c4b
1 changed files with 74 additions and 0 deletions
@ -0,0 +1,74 @@ |
||||
# |
||||
# wpylib.file.tmpdir module |
||||
# Utility for creating a script-wide temporary directory. |
||||
# |
||||
# Wirawan Purwanto |
||||
# Created: 20140802 |
||||
# |
||||
""" |
||||
wpylib.file.tmpdir |
||||
Utility for creating a script-wide temporary directory. |
||||
|
||||
This module is part of wpylib project. |
||||
|
||||
The temporary directory (tempdir) is created only once when |
||||
the main function, tmpdir(), is called. |
||||
This tempdir is supposed to be used as the root directory |
||||
for all other temporary files throughout the lifetime of the script. |
||||
When this script exists, the tempdir will be deleted with all |
||||
the files/subdirs therein with a forced `rm -rf' invocation. |
||||
|
||||
The tmpdir routine has a fairly standard set of sequence of root dir |
||||
candidates. |
||||
User-defined roots can also be added (taking precedence over standard set) |
||||
via TMPDIR_ROOTS list. |
||||
But this must be added before the first tmpdir() function call. |
||||
|
||||
|
||||
""" |
||||
|
||||
import os |
||||
import os.path |
||||
import tempfile |
||||
|
||||
from warnings import warn |
||||
from wpylib import shell_utils as sh |
||||
|
||||
_g = globals() |
||||
_g.setdefault("TMPDIR", None) |
||||
_g.setdefault("TMPDIR_CLEANUP", True) |
||||
_g.setdefault("TMPDIR_ROOTS", []) |
||||
del _g |
||||
|
||||
|
||||
def tmpdir(): |
||||
"""Main function to create a temporary directory (when first called) |
||||
and return the created temporary directory name. |
||||
For subsequent calls, the same temporary directory name is given again. |
||||
""" |
||||
import atexit |
||||
global TMPDIR, TMPDIR_ROOTS |
||||
if TMPDIR != None: return TMPDIR |
||||
tmproot = None |
||||
# FIXME: site-specific hooks probably need to be set somewhere |
||||
for d in list(TMPDIR_ROOTS) + [ os.getenv("TMP"), os.getenv("TMPDIR"), "/tmp", "/var/tmp" ]: |
||||
if d != None and os.path.isdir(d) and : |
||||
tmproot = d |
||||
break |
||||
if not tmproot: |
||||
warn("Cannot find suitable temporary directory root, using current directory.", |
||||
RuntimeWarning) |
||||
tmproot = os.getcwd() |
||||
TMPDIR = tempfile.mkdtemp(prefix=("%s/chkgit-%d" % (tmproot, os.getpid()))) |
||||
|
||||
def tmpdir_exitfunc(): |
||||
global TMPDIR |
||||
global TMPDIR_CLEANUP |
||||
if TMPDIR != None and os.path.isdir(TMPDIR) and TMPDIR_CLEANUP: |
||||
try: |
||||
sh.rm("-rf", TMPDIR) |
||||
except: |
||||
warn("Failed to remove temporary directory %s" % TMPDIR) |
||||
atexit.register(tmpdir_exitfunc) |
||||
|
||||
return TMPDIR |
Loading…
Reference in new issue