def test_read_csv_iobase(tmp_path, src, encoding, expected): if sys.version_info < (3, 6): tmp_path = pathlib.Path(str(tmp_path)) buf = (io.BytesIO if isinstance(src, bytes) else io.StringIO)(src) kwargs = {'encoding': encoding, 'as_list': True} if isinstance(expected, tuple): with pytest.raises(expected[0], match=expected[1]): read_csv(buf, **kwargs) return assert read_csv(buf, **kwargs) == expected source = tmp_path / 'spam.csv' if isinstance(buf, io.TextIOBase): assert encoding is None with source.open('wt', encoding='utf-8', newline='') as f: f.write(src) open_kwargs = {'mode': 'rt', 'encoding': 'utf-8', 'newline': ''} kwargs['encoding'] = None else: assert encoding is not None source.write_bytes(src) open_kwargs = {'mode': 'rb'} with source.open(**open_kwargs) as f: assert read_csv(f, **kwargs) == expected
def test_roundtrip_csv_autocompress(tmp_path, filename, open_module, raw, encoding, rows): if sys.version_info < (3, 6): tmp_path = pathlib.Path(str(tmp_path)) target = tmp_path / filename filename = str(target) if sys.version_info < (3, 6) else target import importlib open_module = importlib.import_module(open_module) with open_module.open(filename, 'wb') as f: f.write(raw) kwargs = {'encoding': encoding, 'autocompress': True} assert read_csv(filename, as_list=True, **kwargs) == rows target.unlink() result = write_csv(filename, rows, **kwargs) assert result.exists() assert result.samefile(target) assert read_csv(filename, as_list=True, **kwargs) == rows
def test_read_csv_zipfile(tmp_path, raw, encoding, expected): if sys.version_info < (3, 6): tmp_path = pathlib.Path(str(tmp_path)) archive = tmp_path / 'spam.zip' filename = 'spam.csv' with zipfile.ZipFile(archive, 'w') as z,\ z.open(filename, 'w') as f: f.write(raw) assert archive.exists() assert archive.stat().st_size kwargs = {'encoding': encoding, 'as_list': True} with zipfile.ZipFile(archive) as z,\ z.open(filename) as f: assert z.namelist() == [filename] z.read(filename) == raw if isinstance(expected, tuple): assert encoding is None with pytest.raises(expected[0], match=expected[1]): read_csv(f, **kwargs) return assert read_csv(f, **kwargs) == expected
def test_autocompress_warning(tmp_path): if sys.version_info < (3, 6): tmp_path = pathlib.Path(str(tmp_path)) target = tmp_path / 'spam.csv.gz' target.touch() filename = str(target) if sys.version_info < (3, 6) else target with pytest.warns(UserWarning, match=r'suffix'): read_csv(filename)
def test_read_csv_filename(tmp_path, raw, encoding, expected): if sys.version_info < (3, 6): tmp_path = pathlib.Path(str(tmp_path)) target = tmp_path / 'spam.csv' target.write_bytes(raw) kwargs = {'encoding': encoding, 'as_list': True} if isinstance(expected, tuple): with pytest.raises(expected[0], match=expected[1]): read_csv(target, **kwargs) return assert read_csv(target, **kwargs) == expected
def test_read_csv_py2(): with pytest.raises(NotImplementedError): read_csv('spam.csv', encoding='utf-8')