home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 April / com_0405_1.iso / opensource / BTpp-0.5.4-bin.exe / $INSTDIR / BT++.exe / tempfile.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-04-19  |  6.3 KB  |  219 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.2)
  3.  
  4. import os
  5. __all__ = [
  6.     'mktemp',
  7.     'TemporaryFile',
  8.     'tempdir',
  9.     'gettempprefix']
  10. tempdir = None
  11. template = None
  12.  
  13. def gettempdir():
  14.     if tempdir is not None:
  15.         return tempdir
  16.     
  17.     _tempdir_lock.acquire()
  18.     
  19.     try:
  20.         return _gettempdir_inner()
  21.     finally:
  22.         _tempdir_lock.release()
  23.  
  24.  
  25.  
  26. def _gettempdir_inner():
  27.     global tempdir, tempdir
  28.     if tempdir is not None:
  29.         return tempdir
  30.     
  31.     
  32.     try:
  33.         pwd = os.getcwd()
  34.     except (AttributeError, os.error):
  35.         pwd = os.curdir
  36.  
  37.     attempdirs = [
  38.         '/tmp',
  39.         '/var/tmp',
  40.         '/usr/tmp',
  41.         pwd]
  42.     if os.name == 'nt':
  43.         attempdirs.insert(0, 'C:\\TEMP')
  44.         attempdirs.insert(0, '\\TEMP')
  45.     elif os.name == 'mac':
  46.         import macfs
  47.         import MACFS
  48.         
  49.         try:
  50.             (refnum, dirid) = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kTemporaryFolderType, 1)
  51.             dirname = macfs.FSSpec((refnum, dirid, '')).as_pathname()
  52.             attempdirs.insert(0, dirname)
  53.         except macfs.error:
  54.             pass
  55.  
  56.     elif os.name == 'riscos':
  57.         scrapdir = os.getenv('Wimp$ScrapDir')
  58.         if scrapdir:
  59.             attempdirs.insert(0, scrapdir)
  60.         
  61.     
  62.     for envname in ('TMPDIR', 'TEMP', 'TMP'):
  63.         if os.environ.has_key(envname):
  64.             attempdirs.insert(0, os.environ[envname])
  65.         
  66.     
  67.     testfile = gettempprefix() + 'test'
  68.     for dir in attempdirs:
  69.         
  70.         try:
  71.             filename = os.path.join(dir, testfile)
  72.             if os.name == 'posix':
  73.                 
  74.                 try:
  75.                     fd = os.open(filename, os.O_RDWR | os.O_CREAT | os.O_EXCL, 448)
  76.                 except OSError:
  77.                     pass
  78.  
  79.                 fp = os.fdopen(fd, 'w')
  80.                 fp.write('blat')
  81.                 fp.close()
  82.                 os.unlink(filename)
  83.                 del fp
  84.                 del fd
  85.                 tempdir = dir
  86.                 break
  87.             else:
  88.                 fp = open(filename, 'w')
  89.                 fp.write('blat')
  90.                 fp.close()
  91.                 os.unlink(filename)
  92.                 tempdir = dir
  93.         except IOError:
  94.             pass
  95.  
  96.     
  97.     if tempdir is None:
  98.         msg = "Can't find a usable temporary directory amongst " + `attempdirs`
  99.         raise IOError, msg
  100.     
  101.     return tempdir
  102.  
  103. if os.name == 'posix':
  104.     template = None
  105. elif os.name == 'nt':
  106.     template = '~' + `os.getpid()` + '-'
  107. elif os.name in ('mac', 'riscos'):
  108.     template = 'Python-Tmp-'
  109. else:
  110.     template = 'tmp'
  111.  
  112. def gettempprefix():
  113.     if template is None:
  114.         return '@' + `os.getpid()` + '.'
  115.     else:
  116.         return template
  117.  
  118.  
  119. def mktemp(suffix = ''):
  120.     dir = gettempdir()
  121.     pre = gettempprefix()
  122.     while 1:
  123.         i = _counter.get_next()
  124.         file = os.path.join(dir, pre + str(i) + suffix)
  125.         if not os.path.exists(file):
  126.             return file
  127.         
  128.  
  129.  
  130. class TemporaryFileWrapper:
  131.     unlink = os.unlink
  132.     
  133.     def __init__(self, file, path):
  134.         self.file = file
  135.         self.path = path
  136.         self.close_called = 0
  137.  
  138.     
  139.     def close(self):
  140.         if not (self.close_called):
  141.             self.close_called = 1
  142.             self.file.close()
  143.             self.unlink(self.path)
  144.         
  145.  
  146.     
  147.     def __del__(self):
  148.         self.close()
  149.  
  150.     
  151.     def __getattr__(self, name):
  152.         file = self.__dict__['file']
  153.         a = getattr(file, name)
  154.         if type(a) != type(0):
  155.             setattr(self, name, a)
  156.         
  157.         return a
  158.  
  159.  
  160.  
  161. def TemporaryFile(mode = 'w+b', bufsize = -1, suffix = ''):
  162.     name = mktemp(suffix)
  163.     if os.name == 'posix':
  164.         fd = os.open(name, os.O_RDWR | os.O_CREAT | os.O_EXCL, 448)
  165.         
  166.         try:
  167.             os.unlink(name)
  168.             return os.fdopen(fd, mode, bufsize)
  169.         except:
  170.             os.close(fd)
  171.             raise 
  172.  
  173.     else:
  174.         file = open(name, mode, bufsize)
  175.         return TemporaryFileWrapper(file, name)
  176.  
  177.  
  178. class _ThreadSafeCounter:
  179.     
  180.     def __init__(self, mutex, initialvalue = 0):
  181.         self.mutex = mutex
  182.         self.i = initialvalue
  183.  
  184.     
  185.     def get_next(self):
  186.         self.mutex.acquire()
  187.         result = self.i
  188.         
  189.         try:
  190.             newi = result + 1
  191.         except OverflowError:
  192.             newi = long(result) + 1
  193.  
  194.         self.i = newi
  195.         self.mutex.release()
  196.         return result
  197.  
  198.  
  199.  
  200. try:
  201.     import thread
  202. except ImportError:
  203.     
  204.     class _DummyMutex:
  205.         
  206.         def acquire(self):
  207.             pass
  208.  
  209.         release = acquire
  210.  
  211.     _counter = _ThreadSafeCounter(_DummyMutex())
  212.     _tempdir_lock = _DummyMutex()
  213.     del _DummyMutex
  214.  
  215. _counter = _ThreadSafeCounter(thread.allocate_lock())
  216. _tempdir_lock = thread.allocate_lock()
  217. del thread
  218. del _ThreadSafeCounter
  219.