diff --git a/changelog.yml b/changelog.yml index cdff924..15e5619 100644 --- a/changelog.yml +++ b/changelog.yml @@ -1,6 +1,12 @@ name: pyexcel-io organisation: pyexcel releases: +- changes: + - action: updated + details: + - "`#96`: regression: unknown file type shall trigger NoSupportingPluginFound" + version: 0.6.3 + date: tbd - changes: - action: updated details: diff --git a/pyexcel_io/reader.py b/pyexcel_io/reader.py index ee45c89..f0276fa 100644 --- a/pyexcel_io/reader.py +++ b/pyexcel_io/reader.py @@ -1,5 +1,3 @@ -from pyexcel_io import exceptions -from pyexcel_io.book import _convert_content_to_stream from pyexcel_io.sheet import SheetReader from pyexcel_io.plugins import NEW_READERS from pyexcel_io._compact import OrderedDict @@ -53,23 +51,14 @@ def open(self, file_name, **keywords): def open_content(self, file_content, **keywords): self.keywords, native_sheet_keywords = clean_keywords(keywords) - try: - if self.reader_class is None: - self.reader_class = NEW_READERS.get_a_plugin( - self.file_type, location="content", library=self.library - ) - self.reader = self.reader_class( - file_content, self.file_type, **native_sheet_keywords - ) - return self.reader - except ( - exceptions.NoSupportingPluginFound, - exceptions.SupportingPluginAvailableButNotInstalled, - ): - file_stream = _convert_content_to_stream( - file_content, self.file_type + if self.reader_class is None: + self.reader_class = NEW_READERS.get_a_plugin( + self.file_type, location="content", library=self.library ) - return self.open_stream(file_stream, **native_sheet_keywords) + self.reader = self.reader_class( + file_content, self.file_type, **native_sheet_keywords + ) + return self.reader def open_stream(self, file_stream, **keywords): self.keywords, native_sheet_keywords = clean_keywords(keywords) diff --git a/pyexcel_io/readers/__init__.py b/pyexcel_io/readers/__init__.py index 063674c..e06ec19 100644 --- a/pyexcel_io/readers/__init__.py +++ b/pyexcel_io/readers/__init__.py @@ -29,4 +29,9 @@ file_types=["csvz", "tsvz"], locations=["file", "memory"], stream_type="binary", +).add_a_reader( + relative_plugin_class_path="csvz.ContentReader", + file_types=["csvz", "tsvz"], + locations=["content"], + stream_type="binary", ) diff --git a/pyexcel_io/readers/csvz.py b/pyexcel_io/readers/csvz.py index 9fdc55e..9b87a9f 100644 --- a/pyexcel_io/readers/csvz.py +++ b/pyexcel_io/readers/csvz.py @@ -7,6 +7,7 @@ :copyright: (c) 2014-2020 by Onni Software Ltd. :license: New BSD License, see LICENSE for more details """ +from io import BytesIO import zipfile import chardet @@ -48,6 +49,12 @@ def read_sheet(self, index): return CSVinMemoryReader(NamedContent(name, sheet), **self.keywords) +class ContentReader(FileReader): + def __init__(self, file_content, file_type, **keywords): + io = BytesIO(file_content) + super().__init__(io, file_type, **keywords) + + def _get_sheet_name(filename): len_of_a_dot = 1 len_of_csv_word = 3 diff --git a/tests/test_issues.py b/tests/test_issues.py index b7b9dd5..c2d2a56 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -1,13 +1,11 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - import os import pyexcel as p from pyexcel_io import get_data, save_data +from pyexcel_io.exceptions import NoSupportingPluginFound from nose import SkipTest -from nose.tools import eq_ +from nose.tools import eq_, raises IN_TRAVIS = "TRAVIS" in os.environ @@ -42,7 +40,7 @@ def test_issue_23(): # def test_issue_28(): -# from pyexcel_io.plugins import readers +# from pyexcel_io.plugins import OLD_READERS as readers # from pyexcel_io.exceptions import UpgradePlugin # expected = "Please upgrade the plugin '%s' according to " # expected += "plugin compactibility table." @@ -154,5 +152,10 @@ def test_pyexcel_issue_138(): os.unlink("test.csv") +@raises(NoSupportingPluginFound) +def test_issue_96(): + get_data("foo-bar-data", file_type="Idonotexist") + + def get_fixture(file_name): return os.path.join("tests", "fixtures", file_name)