summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrost Ming <mianghong@gmail.com>2019-06-28 09:02:43 +0800
committerGitHub <noreply@github.com>2019-06-28 09:02:43 +0800
commitd25d24a9bb1ef0479e800aacbe6ae7dd9e6e35c2 (patch)
treed5e1b8fad11c09e97ccb90e6eec3fbb5bb0b452a
parent2b9ce02e3c2b46dcd323db37d2e8e0c65cdd7a5d (diff)
parent513bba2c20ce192248014e712bdbeeaebfb6d3bd (diff)
downloadtablib-d25d24a9bb1ef0479e800aacbe6ae7dd9e6e35c2.tar.gz
Merge pull request #337 from ZuluPro/stream
Added stream to CSV
-rw-r--r--.gitignore1
-rw-r--r--tablib/formats/_csv.py11
-rwxr-xr-xtest_tablib.py20
3 files changed, 29 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 379075b..d6fdabd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,4 @@ junit-py27.xml
# pyenv noise
.python-version
+tablib.egg-info/*
diff --git a/tablib/formats/_csv.py b/tablib/formats/_csv.py
index 8b536a7..9e8515a 100644
--- a/tablib/formats/_csv.py
+++ b/tablib/formats/_csv.py
@@ -13,8 +13,8 @@ extensions = ('csv',)
DEFAULT_DELIMITER = unicode(',')
-def export_set(dataset, **kwargs):
- """Returns CSV representation of Dataset."""
+def export_stream_set(dataset, **kwargs):
+ """Returns CSV representation of Dataset as file-like."""
stream = StringIO()
kwargs.setdefault('delimiter', DEFAULT_DELIMITER)
@@ -24,6 +24,13 @@ def export_set(dataset, **kwargs):
for row in dataset._package(dicts=False):
_csv.writerow(row)
+ stream.seek(0)
+ return stream
+
+
+def export_set(dataset, **kwargs):
+ """Returns CSV representation of Dataset."""
+ stream = export_stream_set(dataset, **kwargs)
return stream.getvalue()
diff --git a/test_tablib.py b/test_tablib.py
index e7b7233..6e3bc60 100755
--- a/test_tablib.py
+++ b/test_tablib.py
@@ -13,7 +13,7 @@ from uuid import uuid4
import tablib
from tablib.compat import markup, unicode, is_py3
from tablib.core import Row
-from tablib.formats import csv as csv_format
+from tablib.formats import _csv as csv_module
class TablibTestCase(unittest.TestCase):
@@ -262,6 +262,24 @@ class TablibTestCase(unittest.TestCase):
self.assertEqual(csv, self.founders.csv)
+ def test_csv_stream_export(self):
+ """Verify exporting dataset object as CSV from file object."""
+
+ # Build up the csv string with headers first, followed by each row
+ csv = ''
+ for col in self.headers:
+ csv += col + ','
+
+ csv = csv.strip(',') + '\r\n'
+
+ for founder in self.founders:
+ for col in founder:
+ csv += str(col) + ','
+ csv = csv.strip(',') + '\r\n'
+
+ csv_stream = csv_module.export_stream_set(self.founders)
+ self.assertEqual(csv, csv_stream.getvalue())
+
def test_tsv_export(self):
"""Verify exporting dataset object as TSV."""