Skip to content

Commit 020b8f0

Browse files
authored
One reader/writer handle many file types, i.e. csv reader for csv and tsv (#81)
* 🐛 pyexcel-io used to allow one reader/writer handles more than one file type * 📚 update pyinstaller instructions * This is an auto-commit, updating project meta data, such as changelog.rst, contributors.rst * 💄 update coding style Co-authored-by: chfw <chfw@users.noreply.github.com>
1 parent b2c774c commit 020b8f0

25 files changed

+63
-168
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Change log
1616
**updated**
1717

1818
#. pyexcel-io plugin interface has been rewritten. PyInstaller user will be
19-
impacted.
19+
impacted. please read 'Packaging with Pyinstaller' in the documentation.
2020

2121
0.5.20 - 17.7.2019
2222
--------------------------------------------------------------------------------

changelog.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ releases:
1010
- 'python 3.6 lower versions are no longer supported'
1111
- action: updated
1212
details:
13-
- 'pyexcel-io plugin interface has been rewritten. PyInstaller user will be impacted.'
13+
- pyexcel-io plugin interface has been rewritten. PyInstaller user will be impacted.
14+
please read 'Packaging with Pyinstaller' in the documentation.
1415
version: 0.6.0
1516
date: tbd
1617
- changes:

docs/source/pyinstaller.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,9 @@ In order to package every built-in plugins of pyexcel-io, you need to specify::
1313
--hidden-import pyexcel_io.readers.csv_in_memory
1414
--hidden-import pyexcel_io.readers.csv_content
1515
--hidden-import pyexcel_io.readers.csvz
16-
--hidden-import pyexcel_io.readers.tsv
17-
--hidden-import pyexcel_io.readers.tsvz
1816
--hidden-import pyexcel_io.writers.csv_in_file
1917
--hidden-import pyexcel_io.writers.csv_in_memory
20-
--hidden-import pyexcel_io.writers.tsv_in_file
21-
--hidden-import pyexcel_io.writers.tsv_in_memory
2218
--hidden-import pyexcel_io.writers.csvz_writer
23-
--hidden-import pyexcel_io.writers.tsvz_writer
2419
--hidden-import pyexcel_io.database.importers.django
2520
--hidden-import pyexcel_io.database.importers.sqlalchemy
2621
--hidden-import pyexcel_io.database.exporters.django

pyexcel_io/database/exporters/django.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def __init__(self, model, export_columns=None, **keywords):
2929
class DjangoBookReader(object):
3030
""" read django models """
3131

32-
def __init__(self, exporter, **keywords):
32+
def __init__(self, exporter, _, **keywords):
3333
self.exporter = exporter
3434
self.keywords = keywords
3535
self.content_array = self.exporter.adapters

pyexcel_io/database/exporters/sqlalchemy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def __init__(self, session, table, export_columns=None, **keywords):
3333
class SQLBookReader(object):
3434
""" read a table via sqlalchemy """
3535

36-
def __init__(self, exporter, **keywords):
36+
def __init__(self, exporter, _, **keywords):
3737
self.__exporter = exporter
3838
self.content_array = self.__exporter.adapters
3939
self.keywords = keywords

pyexcel_io/database/importers/django.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def close(self):
6060
class DjangoBookWriter(object):
6161
""" write data into django models """
6262

63-
def __init__(self, exporter, **keywords):
63+
def __init__(self, exporter, _, **keywords):
6464
self.__importer = exporter
6565
self._keywords = keywords
6666

pyexcel_io/database/importers/sqlalchemy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def close(self):
7474
class SQLBookWriter(object):
7575
""" write data into database tables via sqlalchemy """
7676

77-
def __init__(self, file_content, auto_commit=True, **keywords):
77+
def __init__(self, file_content, _, auto_commit=True, **keywords):
7878
self.__importer = file_content
7979
self.__auto_commit = auto_commit
8080

pyexcel_io/reader.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ def open(self, file_name, **keywords):
3737
self.file_type, location="file", library=self.library
3838
)
3939
self.keywords, native_sheet_keywords = clean_keywords(keywords)
40-
self.reader = reader_class(file_name, **native_sheet_keywords)
40+
self.reader = reader_class(
41+
file_name, self.file_type, **native_sheet_keywords
42+
)
4143
return self.reader
4244

4345
def open_content(self, file_content, **keywords):
@@ -46,7 +48,9 @@ def open_content(self, file_content, **keywords):
4648
reader_class = NEW_READERS.get_a_plugin(
4749
self.file_type, location="content", library=self.library
4850
)
49-
self.reader = reader_class(file_content, **native_sheet_keywords)
51+
self.reader = reader_class(
52+
file_content, self.file_type, **native_sheet_keywords
53+
)
5054
return self.reader
5155
except (
5256
exceptions.NoSupportingPluginFound,
@@ -62,7 +66,9 @@ def open_stream(self, file_stream, **keywords):
6266
reader_class = NEW_READERS.get_a_plugin(
6367
self.file_type, location="memory", library=self.library
6468
)
65-
self.reader = reader_class(file_stream, **native_sheet_keywords)
69+
self.reader = reader_class(
70+
file_stream, self.file_type, **native_sheet_keywords
71+
)
6672
return self.reader
6773

6874
def read_sheet_by_name(self, sheet_name):

pyexcel_io/readers/__init__.py

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,41 +12,21 @@
1212
NewIOPluginInfoChain(__name__).add_a_reader(
1313
relative_plugin_class_path="csv_in_file.FileReader",
1414
locations=["file"],
15-
file_types=["csv"],
15+
file_types=["csv", "tsv"],
1616
stream_type="text",
1717
).add_a_reader(
1818
relative_plugin_class_path="csv_content.ContentReader",
1919
locations=["content"],
20-
file_types=["csv"],
20+
file_types=["csv", "tsv"],
2121
stream_type="text",
2222
).add_a_reader(
2323
relative_plugin_class_path="csv_in_memory.MemoryReader",
2424
locations=["memory"],
25-
file_types=["csv"],
26-
stream_type="text",
27-
).add_a_reader(
28-
relative_plugin_class_path="tsv.TSVMemoryReader",
29-
locations=["memory"],
30-
file_types=["tsv"],
31-
stream_type="text",
32-
).add_a_reader(
33-
relative_plugin_class_path="tsv.TSVFileReader",
34-
locations=["file"],
35-
file_types=["tsv"],
36-
stream_type="text",
37-
).add_a_reader(
38-
relative_plugin_class_path="tsv.TSVContentReader",
39-
locations=["content"],
40-
file_types=["tsv"],
25+
file_types=["csv", "tsv"],
4126
stream_type="text",
4227
).add_a_reader(
4328
relative_plugin_class_path="csvz.FileReader",
44-
file_types=["csvz"],
45-
locations=["file", "memory"],
46-
stream_type="binary",
47-
).add_a_reader(
48-
relative_plugin_class_path="tsvz.TSVZipFileReader",
49-
file_types=["tsvz"],
29+
file_types=["csvz", "tsvz"],
5030
locations=["file", "memory"],
5131
stream_type="binary",
5232
)

pyexcel_io/readers/csv_content.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
import mmap
22

3-
import pyexcel_io.constants as constants
43
from pyexcel_io.book import _convert_content_to_stream
54
from pyexcel_io.readers.csv_sheet import CSVMemoryMapIterator
65
from pyexcel_io.readers.csv_in_memory import MemoryReader
76

87

98
class ContentReader(MemoryReader):
10-
file_type = constants.FILE_FORMAT_CSV
11-
12-
def __init__(self, file_content, **keywords):
9+
def __init__(self, file_content, file_type, **keywords):
1310
file_stream = ContentReader.convert_content_to_stream(
14-
file_content, self.file_type, **keywords
11+
file_content, file_type, **keywords
1512
)
16-
super().__init__(file_stream, **keywords)
13+
super().__init__(file_stream, file_type, **keywords)
1714

1815
@staticmethod
1916
def convert_content_to_stream(file_content, file_type, **keywords):

0 commit comments

Comments
 (0)