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