home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- from __future__ import with_statement
- from contextlib import contextmanager
- import logging
- import os
- import time
- log = logging.getLogger('util.primitives.files')
- __all__ = [
- 'filecontents',
- 'atomic_write',
- 'replace_file']
-
- def filecontents(filename, mode = 'rb'):
-
- try:
- f = _[1]
- return f.read()
- finally:
- pass
-
-
-
- def atomic_write(filename, mode = 'w'):
- (path, filepart) = os.path.split(filename)
- tempfile = os.path.join(path, '%s.tmp' % filepart)
- f = open(tempfile, mode)
-
- try:
- yield f
- except Exception:
- f.close()
- os.remove(tempfile)
- raise
- finally:
- f.close()
-
- if os.path.isfile(filename):
- replace_file(filename, tempfile)
- else:
- os.rename(tempfile, filename)
-
- atomic_write = contextmanager(atomic_write)
- import ctypes
- if hasattr(ctypes, 'windll'):
- ReplaceFileW = ctypes.windll.kernel32.ReplaceFileW
-
- def _make_filename_unicode(f):
- if isinstance(f, str):
- f = f.decode('filesys')
- elif not isinstance(f, unicode):
- raise TypeError
-
- return f
-
-
- def replace_file(filename, replacement):
- if not ReplaceFileW(_make_filename_unicode(filename), _make_filename_unicode(replacement), None, 0, 0, 0):
- raise ctypes.WinError()
- ReplaceFileW(_make_filename_unicode(filename), _make_filename_unicode(replacement), None, 0, 0, 0)
-
- else:
-
- def replace_file(filename, replacement):
- backup = filename + '.backup.' + str(time.time())
- os.rename(filename, backup)
-
- try:
- os.rename(replacement, filename)
- except Exception:
- os.rename(backup, filename)
- raise
-
-
-