diff --git a/tabulator/parsers/csv.py b/tabulator/parsers/csv.py index 3774492a..70dc8593 100644 --- a/tabulator/parsers/csv.py +++ b/tabulator/parsers/csv.py @@ -119,7 +119,8 @@ def __prepare_dialect(self, stream): if not dialect.escapechar: dialect.doublequote = True except csv.Error: - dialect = csv.excel + class dialect(csv.excel): + pass for key, value in self.__options.items(): setattr(dialect, key, value) diff --git a/tests/formats/test_csv.py b/tests/formats/test_csv.py index 7f9ce581..e7430b7b 100644 --- a/tests/formats/test_csv.py +++ b/tests/formats/test_csv.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals import io +import pytest from mock import Mock from tabulator import Stream from tabulator.parsers.csv import CSVParser @@ -137,6 +138,15 @@ def test_stream_csv_detect_delimiter_pipe(): assert stream.read() == [['a1', 'b1'], ['a2', 'b2']] +def test_stream_csv_dialect_should_not_persist_if_sniffing_fails_issue_goodtables_228(): + source1 = 'a;b;c\n#comment' + source2 = 'a,b,c\n#comment' + with Stream(source1, scheme='text', format='csv', headers=1, delimiter=';') as stream: + assert stream.headers == ['a', 'b', 'c'] + with Stream(source2, scheme='text', format='csv', headers=1) as stream: + assert stream.headers == ['a', 'b', 'c'] + + # Parser def test_parser_csv():