Skip to content

Commit

Permalink
🐛 regression: unknown file type shall trigger NoSupportingPluginFound.
Browse files Browse the repository at this point in the history
…fix #96
  • Loading branch information
chfw committed Oct 12, 2020
1 parent b77fc81 commit 0b49aa8
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 23 deletions.
6 changes: 6 additions & 0 deletions changelog.yml
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
25 changes: 7 additions & 18 deletions pyexcel_io/reader.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
Expand Down
5 changes: 5 additions & 0 deletions pyexcel_io/readers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)
7 changes: 7 additions & 0 deletions pyexcel_io/readers/csvz.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
13 changes: 8 additions & 5 deletions tests/test_issues.py
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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."
Expand Down Expand Up @@ -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)

0 comments on commit 0b49aa8

Please sign in to comment.