home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 February / maximum-cd-2011-02.iso / DiscContents / digsby_setup85.exe / lib / util / primitives / files.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-11-24  |  2.1 KB  |  76 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from __future__ import with_statement
  5. from contextlib import contextmanager
  6. import logging
  7. import os
  8. import time
  9. log = logging.getLogger('util.primitives.files')
  10. __all__ = [
  11.     'filecontents',
  12.     'atomic_write',
  13.     'replace_file']
  14.  
  15. def filecontents(filename, mode = 'rb'):
  16.     
  17.     try:
  18.         f = _[1]
  19.         return f.read()
  20.     finally:
  21.         pass
  22.  
  23.  
  24.  
  25. def atomic_write(filename, mode = 'w'):
  26.     (path, filepart) = os.path.split(filename)
  27.     tempfile = os.path.join(path, '%s.tmp' % filepart)
  28.     f = open(tempfile, mode)
  29.     
  30.     try:
  31.         yield f
  32.     except Exception:
  33.         f.close()
  34.         os.remove(tempfile)
  35.         raise 
  36.     finally:
  37.         f.close()
  38.  
  39.     if os.path.isfile(filename):
  40.         replace_file(filename, tempfile)
  41.     else:
  42.         os.rename(tempfile, filename)
  43.  
  44. atomic_write = contextmanager(atomic_write)
  45. import ctypes
  46. if hasattr(ctypes, 'windll'):
  47.     ReplaceFileW = ctypes.windll.kernel32.ReplaceFileW
  48.     
  49.     def _make_filename_unicode(f):
  50.         if isinstance(f, str):
  51.             f = f.decode('filesys')
  52.         elif not isinstance(f, unicode):
  53.             raise TypeError
  54.         
  55.         return f
  56.  
  57.     
  58.     def replace_file(filename, replacement):
  59.         if not ReplaceFileW(_make_filename_unicode(filename), _make_filename_unicode(replacement), None, 0, 0, 0):
  60.             raise ctypes.WinError()
  61.         ReplaceFileW(_make_filename_unicode(filename), _make_filename_unicode(replacement), None, 0, 0, 0)
  62.  
  63. else:
  64.     
  65.     def replace_file(filename, replacement):
  66.         backup = filename + '.backup.' + str(time.time())
  67.         os.rename(filename, backup)
  68.         
  69.         try:
  70.             os.rename(replacement, filename)
  71.         except Exception:
  72.             os.rename(backup, filename)
  73.             raise 
  74.  
  75.  
  76.