diff options
| author | Kenneth Reitz <me@kennethreitz.com> | 2012-01-05 21:37:51 -0800 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.com> | 2012-01-05 21:37:51 -0800 |
| commit | 02f27f15c54da0d830b4cf13ee0ef2fb2e11db89 (patch) | |
| tree | ae5c964f7518fb806ec1fbf2cf7456d30b43fa59 | |
| parent | c87a954a9ec539814aee65ec40d86e33147e227e (diff) | |
| parent | 9c65515e7a7d466be2168c65ea5a88a40cd3f248 (diff) | |
| download | tablib-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.py | 4 | ||||
| -rw-r--r-- | tablib/formats/_tsv.py | 2 | ||||
| -rw-r--r-- | tablib/formats/_xls.py | 20 | ||||
| -rw-r--r-- | tablib/formats/_yaml.py | 4 |
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 |
