import tempfile,contextlib,os,shutil

@contextlib.contextmanager
def become(dest):
    loc = os.path.dirname(dest)
    with tempfile.NamedTemporaryFile(dir=loc) as t:
        yield t
        if os.path.exists(dest):
            os.unlink(dest)
        os.rename(t.name,dest)
        os.chmod(dest,0o644)
        try: t.close()
        except OSError: pass
