コード例 #1
0
def test_atomic_writing_newlines(tmp_path):
    path = str(tmp_path / "testfile")

    lf = "a\nb\nc\n"
    plat = lf.replace("\n", os.linesep)
    crlf = lf.replace("\n", "\r\n")

    # test default
    with open(path, "w") as f:
        f.write(lf)
    with open(path, newline="") as f:
        read = f.read()
    assert read == plat

    # test newline=LF
    with open(path, "w", newline="\n") as f:
        f.write(lf)
    with open(path, newline="") as f:
        read = f.read()
    assert read == lf

    # test newline=CRLF
    with atomic_writing(str(path), newline="\r\n") as f:
        f.write(lf)
    with open(path, newline="") as f:
        read = f.read()
    assert read == crlf

    # test newline=no convert
    text = "crlf\r\ncr\rlf\n"
    with atomic_writing(str(path), newline="") as f:
        f.write(text)
    with open(path, newline="") as f:
        read = f.read()
    assert read == text
コード例 #2
0
def test_atomic_writing_newlines(tmp_path):
    path = tmp_path / 'testfile'

    lf = u'a\nb\nc\n'
    plat = lf.replace(u'\n', os.linesep)
    crlf = lf.replace(u'\n', u'\r\n')

    # test default
    with io.open(path, 'w') as f:
        f.write(lf)
    with io.open(path, 'r', newline='') as f:
        read = f.read()
    assert read == plat

    # test newline=LF
    with io.open(path, 'w', newline='\n') as f:
        f.write(lf)
    with io.open(path, 'r', newline='') as f:
        read = f.read()
    assert read == lf

    # test newline=CRLF
    with atomic_writing(str(path), newline='\r\n') as f:
        f.write(lf)
    with io.open(path, 'r', newline='') as f:
        read = f.read()
    assert read == crlf

    # test newline=no convert
    text = u'crlf\r\ncr\rlf\n'
    with atomic_writing(str(path), newline='') as f:
        f.write(text)
    with io.open(path, 'r', newline='') as f:
        read = f.read()
    assert read == text
コード例 #3
0
def test_atomic_writing_umask(handle_umask, tmp_path):

    os.umask(0o022)
    f1 = str(tmp_path / "1")
    with atomic_writing(f1) as f:
        f.write("1")
    mode = stat.S_IMODE(os.stat(f1).st_mode)
    assert mode == 0o644

    os.umask(0o057)
    f2 = str(tmp_path / "2")

    with atomic_writing(f2) as f:
        f.write("2")

    mode = stat.S_IMODE(os.stat(f2).st_mode)
    assert mode == 0o620
コード例 #4
0
def test_atomic_writing(tmp_path):
    class CustomExc(Exception):
        pass

    f1 = tmp_path / "penguin"
    f1.write_text("Before")

    if os.name != "nt":
        os.chmod(str(f1), 0o701)
        orig_mode = stat.S_IMODE(os.stat(str(f1)).st_mode)

    f2 = tmp_path / "flamingo"
    try:
        os.symlink(str(f1), str(f2))
        have_symlink = True
    except (AttributeError, NotImplementedError, OSError):
        # AttributeError: Python doesn't support it
        # NotImplementedError: The system doesn't support it
        # OSError: The user lacks the privilege (Windows)
        have_symlink = False

    with pytest.raises(CustomExc):
        with atomic_writing(str(f1)) as f:
            f.write("Failing write")
            raise CustomExc

    with open(str(f1)) as f:
        assert f.read() == "Before"

    with atomic_writing(str(f1)) as f:
        f.write("Overwritten")

    with open(str(f1)) as f:
        assert f.read() == "Overwritten"

    if os.name != "nt":
        mode = stat.S_IMODE(os.stat(str(f1)).st_mode)
        assert mode == orig_mode

    if have_symlink:
        # Check that writing over a file preserves a symlink
        with atomic_writing(str(f2)) as f:
            f.write("written from symlink")

        with open(str(f1)) as f:
            assert f.read() == "written from symlink"
コード例 #5
0
def test_atomic_writing_umask(handle_umask, tmp_path):

    os.umask(0o022)
    f1 = tmp_path / '1'
    with atomic_writing(str(f1)) as f:
        f.write('1')
    mode = stat.S_IMODE(os.stat(str(f1)).st_mode)
    assert mode == 0o644

    os.umask(0o057)
    f2 = tmp_path / '2'

    with atomic_writing(str(f2)) as f:
        f.write('2')

    mode = stat.S_IMODE(os.stat(str(f2)).st_mode)
    assert mode == 0o620
コード例 #6
0
def test_atomic_writing(tmp_path):
    class CustomExc(Exception):
        pass

    f1 = tmp_path / 'penguin'
    f1.write_text('Before')

    if os.name != 'nt':
        os.chmod(f1, 0o701)
        orig_mode = stat.S_IMODE(os.stat(str(f1)).st_mode)

    f2 = tmp_path / 'flamingo'
    try:
        os.symlink(f1, f2)
        have_symlink = True
    except (AttributeError, NotImplementedError, OSError):
        # AttributeError: Python doesn't support it
        # NotImplementedError: The system doesn't support it
        # OSError: The user lacks the privilege (Windows)
        have_symlink = False

    with pytest.raises(CustomExc):
        with atomic_writing(str(f1)) as f:
            f.write('Failing write')
            raise CustomExc

    with io.open(f1, 'r') as f:
        assert f.read() == 'Before'

    with atomic_writing(str(f1)) as f:
        f.write('Overwritten')

    with io.open(f1, 'r') as f:
        assert f.read() == 'Overwritten'

    if os.name != 'nt':
        mode = stat.S_IMODE(os.stat(str(f1)).st_mode)
        assert mode == orig_mode

    if have_symlink:
        # Check that writing over a file preserves a symlink
        with atomic_writing(str(f2)) as f:
            f.write(u'written from symlink')

        with io.open(f1, 'r') as f:
            assert f.read() == 'written from symlink'