def atomic_open(filename, mode="r"): if "r" not in mode: fd, tmp_filename = tempfile.mkstemp( dir=os.path.dirname(filename), prefix=".__atomic-write" ) os.chmod(tmp_filename, 0o644) f = os.fdopen(fd, mode) else: f = open(filename, mode) tmp_filename = None try: yield f except Exception: f.close() exc_type, exc_value, tb = sys.exc_info() if tmp_filename is not None: try: os.remove(tmp_filename) except OSError: pass reraise(exc_type, exc_value, tb) else: f.close() if tmp_filename is not None: rename(tmp_filename, filename)
def atomic_open(filename, mode='r'): if 'r' not in mode: fd, tmp_filename = tempfile.mkstemp(dir=os.path.dirname(filename), prefix='.__atomic-write') os.chmod(tmp_filename, 0o644) f = os.fdopen(fd, mode) else: f = open(filename, mode) tmp_filename = None try: yield f except: # pylint: disable=bare-except f.close() exc_type, exc_value, tb = sys.exc_info() if tmp_filename is not None: try: os.remove(tmp_filename) except OSError: pass reraise(exc_type, exc_value, tb) else: f.close() if tmp_filename is not None: rename(tmp_filename, filename)
def atomic_open(filename, mode='r'): if 'r' not in mode: fd, tmp_filename = tempfile.mkstemp( dir=os.path.dirname(filename), prefix='.__atomic-write') os.chmod(tmp_filename, 0o644) f = os.fdopen(fd, mode) else: f = open(filename, mode) tmp_filename = None try: yield f except: f.close() exc_type, exc_value, tb = sys.exc_info() if tmp_filename is not None: try: os.remove(tmp_filename) except OSError: pass reraise(exc_type, exc_value, tb) else: f.close() if tmp_filename is not None: rename(tmp_filename, filename)