Add detect function in _xls. Update yaml, csv, and tsv detection functions to catch other errors when faced with invalid input.

This commit is contained in:
VanL
2012-01-06 00:12:06 +00:00
parent c87a954a9e
commit 9c65515e7a
4 changed files with 25 additions and 5 deletions
+2 -2
View File
@@ -51,5 +51,5 @@ def detect(stream):
try:
csv.Sniffer().sniff(stream)
return True
except csv.Error:
return False
except (csv.Error, TypeError):
return False
+1 -1
View File
@@ -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
+20
View File
@@ -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."""
+2 -2
View File
@@ -60,5 +60,5 @@ def detect(stream):
return True
else:
return False
except yaml.parser.ParserError:
return False
except (yaml.parser.ParserError, yaml.reader.ReaderError):
return False