def test_get_tempname(mocker, dir, prefix):
    fd = mock.Mock()
    tmp_file_name = mock.Mock()
    mock_mkstemp = mocker.patch(
        "tempfile.mkstemp",
        return_value=(fd, tmp_file_name))
    os_close_mock = mocker.patch("os.close")
    assert tmp_file_name == tempfile.get_tempname(dir, prefix)
    if prefix:
        mock_mkstemp.assert_called_once_with(dir=dir, prefix=prefix)
    else:
        mock_mkstemp.assert_called_once_with(dir=dir)
    os_close_mock.assert_called_once_with(fd)
Exemple #2
0
def update_file(filename):
    old = open(filename, 'r')
    dirname = os.path.dirname(filename)
    prefix = ".{0}.".format(os.path.basename(filename))
    temp_filename = tempfile.get_tempname(dir=dirname, prefix=prefix)
    new = open(temp_filename, 'w')
    with contextlib.nested(old, new):
        try:
            yield old, new
        except DontUpdateException:
            os.unlink(temp_filename)
            return
        except Exception:
            os.unlink(temp_filename)
            raise
        stat = os.stat(filename)
        os.chmod(temp_filename, stat.st_mode)
        os.chown(temp_filename, stat.st_uid, stat.st_gid)
    bak_filename = filename + '.bak'
    os.rename(filename, bak_filename)
    os.rename(temp_filename, filename)
    os.unlink(bak_filename)