summaryrefslogtreecommitdiff
path: root/tablib
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.org>2016-02-07 06:09:55 -0500
committerKenneth Reitz <me@kennethreitz.org>2016-02-07 06:09:55 -0500
commit679bd115b6aeeb3008890b5e7797fd7fcbf66c6c (patch)
tree8560f79adc379dc33748ad2d386e336ecad6a587 /tablib
parent32cbc36fc181dcdb551325529a3c582a6acb30bd (diff)
parent70716fdd216755dc4b542df74e95b0e5ac74f0ee (diff)
downloadtablib-679bd115b6aeeb3008890b5e7797fd7fcbf66c6c.tar.gz
Merge branch 'develop' of https://github.com/papisz/tablib into develop
Diffstat (limited to 'tablib')
-rw-r--r--tablib/core.py2
-rw-r--r--tablib/formats/_csv.py20
-rw-r--r--tablib/formats/_tsv.py49
3 files changed, 22 insertions, 49 deletions
diff --git a/tablib/core.py b/tablib/core.py
index 7f36d8b..a744a70 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -256,6 +256,8 @@ class Dataset(object):
setattr(cls, fmt.title, property(fmt.export_set, fmt.import_set))
except AttributeError:
setattr(cls, fmt.title, property(fmt.export_set))
+ setattr(cls, 'set_%s' % fmt.title, fmt.import_set)
+ setattr(cls, 'get_%s' % fmt.title, fmt.export_set)
except AttributeError:
pass
diff --git a/tablib/formats/_csv.py b/tablib/formats/_csv.py
index 7597395..7deec23 100644
--- a/tablib/formats/_csv.py
+++ b/tablib/formats/_csv.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-""" Tablib - CSV Support.
+""" Tablib - *SV Support.
"""
from tablib.compat import is_py3, csv, StringIO
@@ -11,17 +11,17 @@ extensions = ('csv',)
DEFAULT_ENCODING = 'utf-8'
+DEFAULT_DELIMITER = ','
-
-def export_set(dataset):
+def export_set(dataset, delimiter=DEFAULT_DELIMITER):
"""Returns CSV representation of Dataset."""
stream = StringIO()
if is_py3:
- _csv = csv.writer(stream)
+ _csv = csv.writer(stream, delimiter=delimiter)
else:
- _csv = csv.writer(stream, encoding=DEFAULT_ENCODING)
+ _csv = csv.writer(stream, delimiter=delimiter, encoding=DEFAULT_ENCODING)
for row in dataset._package(dicts=False):
_csv.writerow(row)
@@ -29,15 +29,15 @@ def export_set(dataset):
return stream.getvalue()
-def import_set(dset, in_stream, headers=True):
+def import_set(dset, in_stream, headers=True, delimiter=DEFAULT_DELIMITER):
"""Returns dataset from CSV stream."""
dset.wipe()
if is_py3:
- rows = csv.reader(StringIO(in_stream))
+ rows = csv.reader(in_stream.splitlines(), delimiter=delimiter)
else:
- rows = csv.reader(StringIO(in_stream), encoding=DEFAULT_ENCODING)
+ rows = csv.reader(in_stream.splitlines(), delimiter=delimiter, encoding=DEFAULT_ENCODING)
for i, row in enumerate(rows):
if (i == 0) and (headers):
@@ -46,10 +46,10 @@ def import_set(dset, in_stream, headers=True):
dset.append(row)
-def detect(stream):
+def detect(stream, delimiter=DEFAULT_DELIMITER):
"""Returns True if given stream is valid CSV."""
try:
- csv.Sniffer().sniff(stream, delimiters=',')
+ csv.Sniffer().sniff(stream, delimiters=delimiter)
return True
except (csv.Error, TypeError):
return False
diff --git a/tablib/formats/_tsv.py b/tablib/formats/_tsv.py
index 8ef2b67..9380b3b 100644
--- a/tablib/formats/_tsv.py
+++ b/tablib/formats/_tsv.py
@@ -3,57 +3,28 @@
""" Tablib - TSV (Tab Separated Values) Support.
"""
-from tablib.compat import is_py3, csv, StringIO
-
-
+from tablib.formats._csv import (
+ export_set as export_set_wrapper,
+ import_set as import_set_wrapper,
+ detect as detect_wrapper,
+)
title = 'tsv'
extensions = ('tsv',)
DEFAULT_ENCODING = 'utf-8'
+DELIMITER = '\t'
def export_set(dataset):
- """Returns a TSV representation of Dataset."""
-
- stream = StringIO()
-
- if is_py3:
- _tsv = csv.writer(stream, delimiter='\t')
- else:
- _tsv = csv.writer(stream, encoding=DEFAULT_ENCODING, delimiter='\t')
-
- for row in dataset._package(dicts=False):
- _tsv.writerow(row)
-
- return stream.getvalue()
+ """Returns TSV representation of Dataset."""
+ return export_set_wrapper(dataset, delimiter=DELIMITER)
def import_set(dset, in_stream, headers=True):
"""Returns dataset from TSV stream."""
-
- dset.wipe()
-
- if is_py3:
- rows = csv.reader(in_stream.splitlines(), delimiter='\t')
- else:
- rows = csv.reader(in_stream.splitlines(), delimiter='\t',
- encoding=DEFAULT_ENCODING)
-
- for i, row in enumerate(rows):
- # Skip empty rows
- if not row:
- continue
-
- if (i == 0) and (headers):
- dset.headers = row
- else:
- dset.append(row)
+ return import_set_wrapper(dset, in_stream, headers=headers, delimiter=DELIMITER)
def detect(stream):
"""Returns True if given stream is valid TSV."""
- try:
- csv.Sniffer().sniff(stream, delimiters='\t')
- return True
- except (csv.Error, TypeError):
- return False
+ return detect_wrapper(stream, delimiter=DELIMITER)