def test_safe_edit_unlinks_copy_on_error(tmpdir): os.chdir(str(tmpdir)) with pytest.raises(ValueError): with SafeFile("asdf") as f: f.open_new("wb") f_name = f.name raise ValueError() assert not os.path.exists(f_name)
def test_safe_writable_no_rename_no_writeprotect(tmpdir): os.chdir(str(tmpdir)) with SafeFile("asdf") as f: f.open_inplace("wb") assert f.name == "asdf" f.write(b"asdf") assert open("asdf", "rb").read() == b"asdf"
def test_safefile_fileobj_api(tmpdir): os.chdir(str(tmpdir)) with open("asdf", "wb") as seed: seed.write(1024 * b"X") with SafeFile("asdf", encoding="utf-8") as f: f.open_inplace("r+b") f.seek(823) assert f.tell() == 823 assert int(f.fileno()) > 2
def test_safe_edit_read_write_encoded(tmpdir): os.chdir(str(tmpdir)) open("asdf", "wb").write(b"csdf") with SafeFile("asdf", encoding="utf-8") as f: f.open_inplace("r+b") assert f.read() == "csdf" f.write("asdf") assert open("asdf", "rb").read() == b"csdfasdf"
def test_safe_edit_truncate(tmpdir): os.chdir(str(tmpdir)) open("asdf", "wb").write(b"csdf") with SafeFile("asdf", encoding="utf-8") as f: f.open_inplace("r+b") assert f.read() == "csdf" f.seek(0) f.truncate() assert open("asdf", "rb").read() == b""
def test_safe_writable_no_rename_no_writeprotect_existing_file(tmpdir): os.chdir(str(tmpdir)) open("asdf", "wb").write(b"bsdf") with SafeFile("asdf") as f: f.open_inplace("r+b") assert f.read() == b"bsdf" f.seek(0) assert f.name == "asdf" f.write(b"asdf") assert open("asdf", "rb").read() == b"asdf"
def test_safe_writable_rename_writeprotect(tmpdir): os.chdir(str(tmpdir)) with SafeFile("asdf") as f: f.use_write_protection() f.open_new("wb") assert f.name != "asdf" f.write(b"asdf") assert open("asdf", "rb").read() == b"asdf" with pytest.raises(IOError): open("asdf", "wb")
def test_safe_edit_inplace_with_write_protection(tmpdir): os.chdir(str(tmpdir)) open("asdf", "wb").write(b"csdf") os.chmod("asdf", 0o440) with SafeFile("asdf") as f: f.use_write_protection() f.open_inplace("r+b") assert f.name == "asdf" assert f.read() == b"csdf" f.seek(0) f.write(b"asdf") assert open("asdf", "rb").read() == b"asdf" with pytest.raises(IOError): open("asdf", "wb")
def test_safe_edit_noop(tmpdir): with SafeFile(str(tmpdir / "file")): pass assert not os.path.exists(str(tmpdir / "file"))