home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 January / maximum-cd-2011-01.iso / DiscContents / calibre-0.7.26.msi / file_1440 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-10-31  |  5.1 KB  |  158 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from __future__ import with_statement
  5. __license__ = 'GPL v3'
  6. __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
  7. import tempfile
  8. import os
  9. import atexit
  10. import binascii
  11. import cPickle
  12. from calibre.constants import __version__, __appname__
  13.  
  14. def cleanup(path):
  15.     
  16.     try:
  17.         import os as oss
  18.         if oss.path.exists(path):
  19.             oss.remove(path)
  20.     except:
  21.         pass
  22.  
  23.  
  24. _base_dir = None
  25.  
  26. def remove_dir(x):
  27.     
  28.     try:
  29.         import shutil
  30.         shutil.rmtree(x, ignore_errors = True)
  31.     except:
  32.         pass
  33.  
  34.  
  35.  
  36. def base_dir():
  37.     global _base_dir, _base_dir
  38.     if _base_dir is None:
  39.         td = os.environ.get('CALIBRE_WORKER_TEMP_DIR', None)
  40.         if td is not None:
  41.             
  42.             try:
  43.                 td = cPickle.loads(binascii.unhexlify(td))
  44.             td = None
  45.  
  46.         
  47.         if td and os.path.exists(td):
  48.             _base_dir = td
  49.         else:
  50.             _base_dir = tempfile.mkdtemp(prefix = '%s_%s_tmp_' % (__appname__, __version__))
  51.             atexit.register(remove_dir, _base_dir)
  52.     
  53.     return _base_dir
  54.  
  55.  
  56. class PersistentTemporaryFile(object):
  57.     _file = None
  58.     
  59.     def __init__(self, suffix = '', prefix = '', dir = None, mode = 'w+b'):
  60.         if prefix == None:
  61.             prefix = ''
  62.         
  63.         if dir is None:
  64.             dir = base_dir()
  65.         
  66.         (fd, name) = tempfile.mkstemp(suffix, __appname__ + '_' + __version__ + '_' + prefix, dir = dir)
  67.         self._file = os.fdopen(fd, mode)
  68.         self._name = name
  69.         self._fd = fd
  70.         atexit.register(cleanup, name)
  71.  
  72.     
  73.     def __getattr__(self, name):
  74.         if name == 'name':
  75.             return self.__dict__['_name']
  76.         return getattr(self.__dict__['_file'], name)
  77.  
  78.     
  79.     def __enter__(self):
  80.         return self
  81.  
  82.     
  83.     def __exit__(self, *args):
  84.         self.close()
  85.  
  86.     
  87.     def __del__(self):
  88.         
  89.         try:
  90.             self.close()
  91.         except:
  92.             pass
  93.  
  94.  
  95.  
  96.  
  97. def PersistentTemporaryDirectory(suffix = '', prefix = '', dir = None):
  98.     if dir is None:
  99.         dir = base_dir()
  100.     
  101.     tdir = tempfile.mkdtemp(suffix, __appname__ + '_' + __version__ + '_' + prefix, dir)
  102.     atexit.register(remove_dir, tdir)
  103.     return tdir
  104.  
  105.  
  106. class TemporaryDirectory(object):
  107.     
  108.     def __init__(self, suffix = '', prefix = '', dir = None, keep = False):
  109.         self.suffix = suffix
  110.         self.prefix = prefix
  111.         if dir is None:
  112.             dir = base_dir()
  113.         
  114.         self.dir = dir
  115.         self.keep = keep
  116.  
  117.     
  118.     def __enter__(self):
  119.         self.tdir = tempfile.mkdtemp(self.suffix, __appname__ + '_' + __version__ + '_' + self.prefix, self.dir)
  120.         return self.tdir
  121.  
  122.     
  123.     def __exit__(self, *args):
  124.         if not (self.keep) and os.path.exists(self.tdir):
  125.             remove_dir(self.tdir)
  126.         
  127.  
  128.  
  129.  
  130. class TemporaryFile(object):
  131.     
  132.     def __init__(self, suffix = '', prefix = '', dir = None, mode = 'w+b'):
  133.         if prefix == None:
  134.             prefix = ''
  135.         
  136.         if suffix is None:
  137.             suffix = ''
  138.         
  139.         if dir is None:
  140.             dir = base_dir()
  141.         
  142.         (self.prefix, self.suffix, self.dir, self.mode) = (prefix, suffix, dir, mode)
  143.         self._file = None
  144.  
  145.     
  146.     def __enter__(self):
  147.         (fd, name) = tempfile.mkstemp(self.suffix, __appname__ + '_' + __version__ + '_' + self.prefix, dir = self.dir)
  148.         self._file = os.fdopen(fd, self.mode)
  149.         self._name = name
  150.         self._file.close()
  151.         return name
  152.  
  153.     
  154.     def __exit__(self, *args):
  155.         cleanup(self._name)
  156.  
  157.  
  158.