summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2012-01-05 21:37:51 -0800
committerKenneth Reitz <me@kennethreitz.com>2012-01-05 21:37:51 -0800
commit02f27f15c54da0d830b4cf13ee0ef2fb2e11db89 (patch)
treeae5c964f7518fb806ec1fbf2cf7456d30b43fa59
parentc87a954a9ec539814aee65ec40d86e33147e227e (diff)
parent9c65515e7a7d466be2168c65ea5a88a40cd3f248 (diff)
downloadtablib-02f27f15c54da0d830b4cf13ee0ef2fb2e11db89.tar.gz
Merge pull request #47 from VanL/develop
Add detect function in _xls. Update yaml, csv, and tsv detection functio...
-rw-r--r--tablib/formats/_csv.py4
-rw-r--r--tablib/formats/_tsv.py2
-rw-r--r--tablib/formats/_xls.py20
-rw-r--r--tablib/formats/_yaml.py4
4 files changed, 25 insertions, 5 deletions
diff --git a/tablib/formats/_csv.py b/tablib/formats/_csv.py
index 3a4c374..549259c 100644
--- a/tablib/formats/_csv.py
+++ b/tablib/formats/_csv.py
@@ -51,5 +51,5 @@ def detect(stream):
try:
csv.Sniffer().sniff(stream)
return True
- except csv.Error:
- return False \ No newline at end of file
+ except (csv.Error, TypeError):
+ return False
diff --git a/tablib/formats/_tsv.py b/tablib/formats/_tsv.py
index f581f81..ac9554c 100644
--- a/tablib/formats/_tsv.py
+++ b/tablib/formats/_tsv.py
@@ -55,5 +55,5 @@ def detect(stream):
try:
csv.Sniffer().sniff(stream, delimiters='\t')
return True
- except csv.Error:
+ except (csv.Error, TypeError):
return False
diff --git a/tablib/formats/_xls.py b/tablib/formats/_xls.py
index 89d2845..6530d91 100644
--- a/tablib/formats/_xls.py
+++ b/tablib/formats/_xls.py
@@ -6,6 +6,8 @@
import sys
from tablib.compat import BytesIO, xlwt
+from tablib.packages import xlrd
+from tablib.packages.xlrd.biffh import XLRDError
import tablib
title = 'xls'
@@ -16,6 +18,24 @@ wrap = xlwt.easyxf("alignment: wrap on")
bold = xlwt.easyxf("font: bold on")
+def detect(stream):
+ """Returns True if given stream is a readable excel file."""
+ try:
+ xlrd.open_workbook(file_contents=stream)
+ return True
+ except (TypeError, XLRDError):
+ pass
+ try:
+ xlrd.open_workbook(file_contents=stream.read())
+ return True
+ except (AttributeError, XLRDError):
+ pass
+ try:
+ xlrd.open_workbook(filename=stream)
+ return True
+ except:
+ return False
+
def export_set(dataset):
"""Returns XLS representation of Dataset."""
diff --git a/tablib/formats/_yaml.py b/tablib/formats/_yaml.py
index 0eab78e..c9ffbd3 100644
--- a/tablib/formats/_yaml.py
+++ b/tablib/formats/_yaml.py
@@ -60,5 +60,5 @@ def detect(stream):
return True
else:
return False
- except yaml.parser.ParserError:
- return False \ No newline at end of file
+ except (yaml.parser.ParserError, yaml.reader.ReaderError):
+ return False