mirror of
https://github.com/kennethreitz/tablib.git
synced 2026-06-05 06:56:13 +00:00
Fixed #373 - Properly detect xlsx format
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
- Fixed `DataBook().load` parameter ordering (first stream, then format).
|
||||
- Fixed a regression for xlsx exports where non-string values were forced to
|
||||
strings (#314).
|
||||
- Fixed xlsx format detection (which was often detected as `xls` format).
|
||||
- Added search to all documentation pages
|
||||
- Open xlsx workbooks in read-only mode (#316)
|
||||
- Unpin requirements
|
||||
|
||||
@@ -17,4 +17,5 @@ from . import _df as df
|
||||
from . import _rst as rst
|
||||
from . import _jira as jira
|
||||
|
||||
available = (json, xls, yaml, csv, dbf, tsv, html, jira, latex, xlsx, ods, df, rst)
|
||||
# xlsx before as xls (xlrd) can also read xlsx
|
||||
available = (json, xlsx, xls, yaml, csv, dbf, tsv, html, jira, latex, ods, df, rst)
|
||||
|
||||
@@ -55,5 +55,5 @@ def detect(stream):
|
||||
try:
|
||||
json.loads(stream)
|
||||
return True
|
||||
except ValueError:
|
||||
except (TypeError, ValueError):
|
||||
return False
|
||||
|
||||
@@ -22,8 +22,11 @@ extensions = ('xlsx',)
|
||||
|
||||
def detect(stream):
|
||||
"""Returns True if given stream is a readable excel file."""
|
||||
if isinstance(stream, bytes):
|
||||
# load_workbook expects a file-like object.
|
||||
stream = BytesIO(stream)
|
||||
try:
|
||||
openpyxl.reader.excel.load_workbook(stream)
|
||||
openpyxl.reader.excel.load_workbook(stream, read_only=True)
|
||||
return True
|
||||
except openpyxl.shared.exc.InvalidFileException:
|
||||
pass
|
||||
|
||||
+11
-1
@@ -13,7 +13,7 @@ from uuid import uuid4
|
||||
from MarkupPy import markup
|
||||
import tablib
|
||||
from tablib.compat import unicode, is_py3
|
||||
from tablib.core import Row
|
||||
from tablib.core import Row, detect_format
|
||||
from tablib.formats import _csv as csv_module
|
||||
|
||||
|
||||
@@ -783,6 +783,16 @@ class TSVTests(BaseTestCase):
|
||||
|
||||
|
||||
class XLSXTests(BaseTestCase):
|
||||
def test_xlsx_format_detect(self):
|
||||
"""Test the XLSX format detection."""
|
||||
in_stream = self.founders.xlsx
|
||||
self.assertEqual(detect_format(in_stream), 'xlsx')
|
||||
|
||||
def test_xls_format_detect(self):
|
||||
"""Test the XLS format detection."""
|
||||
in_stream = self.founders.xls
|
||||
self.assertEqual(detect_format(in_stream), 'xls')
|
||||
|
||||
def test_xlsx_import_set(self):
|
||||
date_time = datetime.datetime(2019, 10, 4, 12, 30, 8)
|
||||
data.append(('string', 42, 21.55, date_time))
|
||||
|
||||
Reference in New Issue
Block a user