From 0b49aa8c439c13efd05dc3ad38456184b99c87fd Mon Sep 17 00:00:00 2001 From: chfw Date: Mon, 12 Oct 2020 22:32:29 +0100 Subject: [PATCH 1/4] :bug: regression: unknown file type shall trigger NoSupportingPluginFound. fix #96 --- changelog.yml | 6 ++++++ pyexcel_io/reader.py | 25 +++++++------------------ pyexcel_io/readers/__init__.py | 5 +++++ pyexcel_io/readers/csvz.py | 7 +++++++ tests/test_issues.py | 13 ++++++++----- 5 files changed, 33 insertions(+), 23 deletions(-) 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) From d5bc6c69b18d8dc8f6a59f240f2f18de17ec241a Mon Sep 17 00:00:00 2001 From: chfw Date: Mon, 12 Oct 2020 21:33:08 +0000 Subject: [PATCH 2/4] This is an auto-commit, updating project meta data, such as changelog.rst, contributors.rst --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6b8f1e7..95587f5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,14 @@ Change log ================================================================================ +0.6.3 - tbd +-------------------------------------------------------------------------------- + +**updated** + +#. `#96 `_: regression: unknown + file type shall trigger NoSupportingPluginFound + 0.6.2 - 7.10.2020 -------------------------------------------------------------------------------- From f8bf0ddfec7e7fc6b52c079df5eadb434298eb46 Mon Sep 17 00:00:00 2001 From: chfw Date: Mon, 12 Oct 2020 22:33:57 +0100 Subject: [PATCH 3/4] :green_heart: update coding style. #96 --- pyexcel_io/readers/csvz.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyexcel_io/readers/csvz.py b/pyexcel_io/readers/csvz.py index 9b87a9f..4556015 100644 --- a/pyexcel_io/readers/csvz.py +++ b/pyexcel_io/readers/csvz.py @@ -7,8 +7,8 @@ :copyright: (c) 2014-2020 by Onni Software Ltd. :license: New BSD License, see LICENSE for more details """ -from io import BytesIO import zipfile +from io import BytesIO import chardet from pyexcel_io import constants From ee346524bec49ae8409de0fec49e6df74d2091d9 Mon Sep 17 00:00:00 2001 From: chfw Date: Mon, 12 Oct 2020 22:52:50 +0100 Subject: [PATCH 4/4] :microscope: more test coverage --- pyexcel_io/exceptions.py | 6 ------ tests/test_issues.py | 11 ----------- tests/test_service.py | 6 ++++++ 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/pyexcel_io/exceptions.py b/pyexcel_io/exceptions.py index 8a8d1f6..b6d00aa 100644 --- a/pyexcel_io/exceptions.py +++ b/pyexcel_io/exceptions.py @@ -21,12 +21,6 @@ class SupportingPluginAvailableButNotInstalled(Exception): pass -class UpgradePlugin(Exception): - """raised when a known plugin is not compatible""" - - pass - - class IntegerAccuracyLossError(Exception): """ When an interger is greater than 999999999999999, ods loses its accuracy. diff --git a/tests/test_issues.py b/tests/test_issues.py index c2d2a56..50dc537 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -39,17 +39,6 @@ def test_issue_23(): eq_(data["issue23.csv"], expected) -# def test_issue_28(): -# 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." -# try: -# readers.load_me_later('pyexcel_test') -# except UpgradePlugin as e: -# eq_(str(e), expected % 'pyexcel_test') - - def test_issue_33_34(): import mmap diff --git a/tests/test_service.py b/tests/test_service.py index 7ded3d6..70f6209 100644 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -3,6 +3,7 @@ from pyexcel_io.service import ( date_value, time_value, + float_value, boolean_value, ods_bool_value, ods_date_value, @@ -162,3 +163,8 @@ def test_time_value(): test_time_value = "PT23H00M01S" delta = time_value(test_time_value) eq_(delta, time(23, 0, 1)) + + +def test_float_value(): + a = float_value("1.2") + eq_(a, 1.2)