From 49d8cb816f163ab5239ec9552c5d60cd0e386557 Mon Sep 17 00:00:00 2001 From: Brad Pitcher Date: Wed, 30 Apr 2014 16:48:12 -0700 Subject: [PATCH] allow csv fields to have multiple lines --- tablib/formats/_csv.py | 4 ++-- test_tablib.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/tablib/formats/_csv.py b/tablib/formats/_csv.py index c5d3202..7597395 100644 --- a/tablib/formats/_csv.py +++ b/tablib/formats/_csv.py @@ -35,9 +35,9 @@ def import_set(dset, in_stream, headers=True): dset.wipe() if is_py3: - rows = csv.reader(in_stream.splitlines()) + rows = csv.reader(StringIO(in_stream)) else: - rows = csv.reader(in_stream.splitlines(), encoding=DEFAULT_ENCODING) + rows = csv.reader(StringIO(in_stream), encoding=DEFAULT_ENCODING) for i, row in enumerate(rows): if (i == 0) and (headers): diff --git a/test_tablib.py b/test_tablib.py index 4364d7b..78d1045 100755 --- a/test_tablib.py +++ b/test_tablib.py @@ -421,6 +421,22 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(_csv, data.csv) + def test_csv_import_set_with_newlines(self): + """Generate and import CSV set serialization when row values have + newlines.""" + data.append(('Markdown\n=======', + 'A cool language\n\nwith paragraphs')) + data.append(('reStructedText\n==============', + 'Another cool language\n\nwith paragraphs')) + data.headers = ('title', 'body') + + _csv = data.csv + + data.csv = _csv + + self.assertEqual(_csv, data.csv) + + def test_tsv_import_set(self): """Generate and import TSV set serialization.""" data.append(self.john)