From 502163c891abfde197883a78806b2cf58cdbd23a Mon Sep 17 00:00:00 2001 From: chfw Date: Sun, 27 Sep 2020 23:18:36 +0100 Subject: [PATCH 1/4] :bug: pyexcel-io used to allow one reader/writer handles more than one file type --- pyexcel_io/database/exporters/django.py | 2 +- pyexcel_io/database/exporters/sqlalchemy.py | 2 +- pyexcel_io/database/importers/django.py | 2 +- pyexcel_io/database/importers/sqlalchemy.py | 2 +- pyexcel_io/reader.py | 12 +++++-- pyexcel_io/readers/__init__.py | 28 +++------------ pyexcel_io/readers/csv_content.py | 9 ++--- pyexcel_io/readers/csv_in_file.py | 4 ++- pyexcel_io/readers/csv_in_memory.py | 10 ++++-- pyexcel_io/readers/csvz.py | 5 ++- pyexcel_io/readers/tsv.py | 38 --------------------- pyexcel_io/readers/tsvz.py | 22 ------------ pyexcel_io/writer.py | 6 ++-- pyexcel_io/writers/__init__.py | 21 ++---------- pyexcel_io/writers/csv_in_file.py | 5 ++- pyexcel_io/writers/csv_in_memory.py | 5 ++- pyexcel_io/writers/csvz_writer.py | 10 +++--- pyexcel_io/writers/tsv_in_file.py | 9 ----- pyexcel_io/writers/tsv_in_memory.py | 9 ----- pyexcel_io/writers/tsvz_writer.py | 8 ----- tests/test_django_book.py | 6 ++-- tests/test_sql_book.py | 6 ++-- 22 files changed, 60 insertions(+), 161 deletions(-) delete mode 100644 pyexcel_io/readers/tsv.py delete mode 100644 pyexcel_io/readers/tsvz.py delete mode 100644 pyexcel_io/writers/tsv_in_file.py delete mode 100644 pyexcel_io/writers/tsv_in_memory.py delete mode 100644 pyexcel_io/writers/tsvz_writer.py diff --git a/pyexcel_io/database/exporters/django.py b/pyexcel_io/database/exporters/django.py index a3ff4d7..0717cfd 100644 --- a/pyexcel_io/database/exporters/django.py +++ b/pyexcel_io/database/exporters/django.py @@ -29,7 +29,7 @@ def __init__(self, model, export_columns=None, **keywords): class DjangoBookReader(object): """ read django models """ - def __init__(self, exporter, **keywords): + def __init__(self, exporter, _, **keywords): self.exporter = exporter self.keywords = keywords self.content_array = self.exporter.adapters diff --git a/pyexcel_io/database/exporters/sqlalchemy.py b/pyexcel_io/database/exporters/sqlalchemy.py index 8f24c26..077cb21 100644 --- a/pyexcel_io/database/exporters/sqlalchemy.py +++ b/pyexcel_io/database/exporters/sqlalchemy.py @@ -33,7 +33,7 @@ def __init__(self, session, table, export_columns=None, **keywords): class SQLBookReader(object): """ read a table via sqlalchemy """ - def __init__(self, exporter, **keywords): + def __init__(self, exporter, _, **keywords): self.__exporter = exporter self.content_array = self.__exporter.adapters self.keywords = keywords diff --git a/pyexcel_io/database/importers/django.py b/pyexcel_io/database/importers/django.py index 4c055be..0a1f5d2 100644 --- a/pyexcel_io/database/importers/django.py +++ b/pyexcel_io/database/importers/django.py @@ -60,7 +60,7 @@ def close(self): class DjangoBookWriter(object): """ write data into django models """ - def __init__(self, exporter, **keywords): + def __init__(self, exporter, _, **keywords): self.__importer = exporter self._keywords = keywords diff --git a/pyexcel_io/database/importers/sqlalchemy.py b/pyexcel_io/database/importers/sqlalchemy.py index 627fa07..c51034f 100644 --- a/pyexcel_io/database/importers/sqlalchemy.py +++ b/pyexcel_io/database/importers/sqlalchemy.py @@ -74,7 +74,7 @@ def close(self): class SQLBookWriter(object): """ write data into database tables via sqlalchemy """ - def __init__(self, file_content, auto_commit=True, **keywords): + def __init__(self, file_content, _, auto_commit=True, **keywords): self.__importer = file_content self.__auto_commit = auto_commit diff --git a/pyexcel_io/reader.py b/pyexcel_io/reader.py index 0d9a9aa..49d08c3 100644 --- a/pyexcel_io/reader.py +++ b/pyexcel_io/reader.py @@ -37,7 +37,9 @@ def open(self, file_name, **keywords): self.file_type, location="file", library=self.library ) self.keywords, native_sheet_keywords = clean_keywords(keywords) - self.reader = reader_class(file_name, **native_sheet_keywords) + self.reader = reader_class( + file_name, self.file_type, **native_sheet_keywords + ) return self.reader def open_content(self, file_content, **keywords): @@ -46,7 +48,9 @@ def open_content(self, file_content, **keywords): reader_class = NEW_READERS.get_a_plugin( self.file_type, location="content", library=self.library ) - self.reader = reader_class(file_content, **native_sheet_keywords) + self.reader = reader_class( + file_content, self.file_type, **native_sheet_keywords + ) return self.reader except ( exceptions.NoSupportingPluginFound, @@ -62,7 +66,9 @@ def open_stream(self, file_stream, **keywords): reader_class = NEW_READERS.get_a_plugin( self.file_type, location="memory", library=self.library ) - self.reader = reader_class(file_stream, **native_sheet_keywords) + self.reader = reader_class( + file_stream, self.file_type, **native_sheet_keywords + ) return self.reader def read_sheet_by_name(self, sheet_name): diff --git a/pyexcel_io/readers/__init__.py b/pyexcel_io/readers/__init__.py index d3af47f..c0be33d 100644 --- a/pyexcel_io/readers/__init__.py +++ b/pyexcel_io/readers/__init__.py @@ -12,41 +12,21 @@ NewIOPluginInfoChain(__name__).add_a_reader( relative_plugin_class_path="csv_in_file.FileReader", locations=["file"], - file_types=["csv"], + file_types=["csv", "tsv"], stream_type="text", ).add_a_reader( relative_plugin_class_path="csv_content.ContentReader", locations=["content"], - file_types=["csv"], + file_types=["csv", "tsv"], stream_type="text", ).add_a_reader( relative_plugin_class_path="csv_in_memory.MemoryReader", locations=["memory"], - file_types=["csv"], - stream_type="text", -).add_a_reader( - relative_plugin_class_path="tsv.TSVMemoryReader", - locations=["memory"], - file_types=["tsv"], - stream_type="text", -).add_a_reader( - relative_plugin_class_path="tsv.TSVFileReader", - locations=["file"], - file_types=["tsv"], - stream_type="text", -).add_a_reader( - relative_plugin_class_path="tsv.TSVContentReader", - locations=["content"], - file_types=["tsv"], + file_types=["csv", "tsv"], stream_type="text", ).add_a_reader( relative_plugin_class_path="csvz.FileReader", - file_types=["csvz"], - locations=["file", "memory"], - stream_type="binary", -).add_a_reader( - relative_plugin_class_path="tsvz.TSVZipFileReader", - file_types=["tsvz"], + file_types=["csvz", "tsvz"], locations=["file", "memory"], stream_type="binary", ) diff --git a/pyexcel_io/readers/csv_content.py b/pyexcel_io/readers/csv_content.py index 96636cf..21a96c1 100644 --- a/pyexcel_io/readers/csv_content.py +++ b/pyexcel_io/readers/csv_content.py @@ -1,19 +1,16 @@ import mmap -import pyexcel_io.constants as constants from pyexcel_io.book import _convert_content_to_stream from pyexcel_io.readers.csv_sheet import CSVMemoryMapIterator from pyexcel_io.readers.csv_in_memory import MemoryReader class ContentReader(MemoryReader): - file_type = constants.FILE_FORMAT_CSV - - def __init__(self, file_content, **keywords): + def __init__(self, file_content, file_type, **keywords): file_stream = ContentReader.convert_content_to_stream( - file_content, self.file_type, **keywords + file_content, file_type, **keywords ) - super().__init__(file_stream, **keywords) + super().__init__(file_stream, file_type, **keywords) @staticmethod def convert_content_to_stream(file_content, file_type, **keywords): diff --git a/pyexcel_io/readers/csv_in_file.py b/pyexcel_io/readers/csv_in_file.py index c9d6738..535f8be 100644 --- a/pyexcel_io/readers/csv_in_file.py +++ b/pyexcel_io/readers/csv_in_file.py @@ -10,13 +10,15 @@ class FileReader(object): - def __init__(self, file_name, **keywords): + def __init__(self, file_name, file_type, **keywords): """Load content from a file :params str filename: an accessible file path :returns: a book """ self.handles = [] self.keywords = keywords + if file_type == constants.FILE_FORMAT_TSV: + self.keywords["dialect"] = constants.KEYWORD_TSV_DIALECT self.__line_terminator = keywords.get( constants.KEYWORD_LINE_TERMINATOR, DEFAULT_NEWLINE ) diff --git a/pyexcel_io/readers/csv_in_memory.py b/pyexcel_io/readers/csv_in_memory.py index e64a5c9..3e39521 100644 --- a/pyexcel_io/readers/csv_in_memory.py +++ b/pyexcel_io/readers/csv_in_memory.py @@ -9,15 +9,19 @@ class MemoryReader(object): - file_type = constants.FILE_FORMAT_CSV - - def __init__(self, file_stream, multiple_sheets=False, **keywords): + def __init__( + self, file_stream, file_type, multiple_sheets=False, **keywords + ): """Load content from memory :params stream file_content: the actual file content in memory :returns: a book """ self.handles = [] self.keywords = keywords + if file_type == constants.FILE_FORMAT_TSV: + self.keywords["dialect"] = constants.KEYWORD_TSV_DIALECT + self.file_type = file_type + self.__load_from_memory_flag = True self.__line_terminator = keywords.get( constants.KEYWORD_LINE_TERMINATOR, constants.DEFAULT_CSV_NEWLINE diff --git a/pyexcel_io/readers/csvz.py b/pyexcel_io/readers/csvz.py index a783071..f435afd 100644 --- a/pyexcel_io/readers/csvz.py +++ b/pyexcel_io/readers/csvz.py @@ -10,13 +10,14 @@ import zipfile import chardet +from pyexcel_io import constants from pyexcel_io.sheet import NamedContent from pyexcel_io._compact import StringIO from pyexcel_io.readers.csv_sheet import CSVinMemoryReader class FileReader(object): - def __init__(self, file_alike_object, **keywords): + def __init__(self, file_alike_object, file_type, **keywords): self.content_array = [] try: self.zipfile = zipfile.ZipFile(file_alike_object, "r") @@ -26,6 +27,8 @@ def __init__(self, file_alike_object, **keywords): ] self.content_array = sheets self.keywords = keywords + if file_type == constants.FILE_FORMAT_TSVZ: + self.keywords["dialect"] = constants.KEYWORD_TSV_DIALECT except zipfile.BadZipfile: print("StringIO instance was passed by any chance?") diff --git a/pyexcel_io/readers/tsv.py b/pyexcel_io/readers/tsv.py deleted file mode 100644 index 79edea9..0000000 --- a/pyexcel_io/readers/tsv.py +++ /dev/null @@ -1,38 +0,0 @@ -""" - pyexcel_io.readers.tsv - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - The lower level tsv file format handler. - - :copyright: (c) 2014-2020 by Onni Software Ltd. - :license: New BSD License, see LICENSE for more details -""" -import pyexcel_io.constants as constants -from pyexcel_io.readers.csv_content import ContentReader -from pyexcel_io.readers.csv_in_file import FileReader -from pyexcel_io.readers.csv_in_memory import MemoryReader - - -class TSVFileReader(FileReader): - def __init__(self, file_name, **keywords): - super().__init__( - file_name, dialect=constants.KEYWORD_TSV_DIALECT, **keywords - ) - - -class TSVMemoryReader(MemoryReader): - file_type = constants.FILE_FORMAT_TSV - - def __init__(self, file_stream, **keywords): - super().__init__( - file_stream, dialect=constants.KEYWORD_TSV_DIALECT, **keywords - ) - - -class TSVContentReader(ContentReader): - file_type = constants.FILE_FORMAT_TSV - - def __init__(self, file_content, **keywords): - super().__init__( - file_content, dialect=constants.KEYWORD_TSV_DIALECT, **keywords - ) diff --git a/pyexcel_io/readers/tsvz.py b/pyexcel_io/readers/tsvz.py deleted file mode 100644 index bd6d904..0000000 --- a/pyexcel_io/readers/tsvz.py +++ /dev/null @@ -1,22 +0,0 @@ -""" - pyexcel_io.fileformat.tsvz - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - - The lower level tsvz file format handler. - - :copyright: (c) 2014-2020 by Onni Software Ltd. - :license: New BSD License, see LICENSE for more details -""" -from pyexcel_io.constants import KEYWORD_TSV_DIALECT - -from .csvz import FileReader - - -class TSVZipFileReader(FileReader): - """read zipped tab separated value file - - it supports single tsv file and mulitple tsv files - """ - - def __init__(self, file_name, **keywords): - super().__init__(file_name, dialect=KEYWORD_TSV_DIALECT, **keywords) diff --git a/pyexcel_io/writer.py b/pyexcel_io/writer.py index 16f2085..700d86e 100644 --- a/pyexcel_io/writer.py +++ b/pyexcel_io/writer.py @@ -11,7 +11,7 @@ def open(self, file_name, **keywords): writer_class = NEW_WRITERS.get_a_plugin( self.file_type, library=self.library, location="file" ) - self.writer = writer_class(file_name, **keywords) + self.writer = writer_class(file_name, self.file_type, **keywords) def open_content(self, file_stream, **keywords): # if not isstream(file_stream): @@ -19,13 +19,13 @@ def open_content(self, file_stream, **keywords): writer_class = NEW_WRITERS.get_a_plugin( self.file_type, library=self.library, location="content" ) - self.writer = writer_class(file_stream, **keywords) + self.writer = writer_class(file_stream, self.file_type, **keywords) def open_stream(self, file_stream, **keywords): writer_class = NEW_WRITERS.get_a_plugin( self.file_type, library=self.library, location="memory" ) - self.writer = writer_class(file_stream, **keywords) + self.writer = writer_class(file_stream, self.file_type, **keywords) def write(self, incoming_dict): self.writer.write(incoming_dict) diff --git a/pyexcel_io/writers/__init__.py b/pyexcel_io/writers/__init__.py index e76dc29..89c9431 100644 --- a/pyexcel_io/writers/__init__.py +++ b/pyexcel_io/writers/__init__.py @@ -12,31 +12,16 @@ NewIOPluginInfoChain(__name__).add_a_writer( relative_plugin_class_path="csv_in_file.CsvFileWriter", locations=["file", "content"], - file_types=["csv"], + file_types=["csv", "tsv"], stream_type="text", ).add_a_writer( relative_plugin_class_path="csv_in_memory.CsvMemoryWriter", locations=["memory"], - file_types=["csv"], - stream_type="text", -).add_a_writer( - relative_plugin_class_path="tsv_in_file.TsvFileWriter", - locations=["file", "content"], - file_types=["tsv"], - stream_type="text", -).add_a_writer( - relative_plugin_class_path="tsv_in_memory.TsvMemoryWriter", - locations=["memory"], - file_types=["tsv"], + file_types=["csv", "tsv"], stream_type="text", ).add_a_writer( relative_plugin_class_path="csvz_writer.CsvZipWriter", locations=["memory", "file", "content"], - file_types=["csvz"], - stream_type="binary", -).add_a_writer( - relative_plugin_class_path="tsvz_writer.TsvZipWriter", - locations=["memory", "file", "content"], - file_types=["tsvz"], + file_types=["csvz", "tsvz"], stream_type="binary", ) diff --git a/pyexcel_io/writers/csv_in_file.py b/pyexcel_io/writers/csv_in_file.py index 9df63fd..111b74c 100644 --- a/pyexcel_io/writers/csv_in_file.py +++ b/pyexcel_io/writers/csv_in_file.py @@ -1,10 +1,13 @@ +from pyexcel_io import constants from pyexcel_io.writers.csv_sheet import CSVFileWriter class CsvFileWriter: - def __init__(self, file_alike_object, **keywords): + def __init__(self, file_alike_object, file_type, **keywords): self._file_alike_object = file_alike_object self._keywords = keywords + if file_type == constants.FILE_FORMAT_TSV: + self._keywords["dialect"] = constants.KEYWORD_TSV_DIALECT self.__index = 0 self.writer = None diff --git a/pyexcel_io/writers/csv_in_memory.py b/pyexcel_io/writers/csv_in_memory.py index b4f84bd..9e04b9d 100644 --- a/pyexcel_io/writers/csv_in_memory.py +++ b/pyexcel_io/writers/csv_in_memory.py @@ -1,10 +1,13 @@ +from pyexcel_io import constants from pyexcel_io.writers.csv_sheet import CSVMemoryWriter class CsvMemoryWriter: - def __init__(self, file_alike_object, **keywords): + def __init__(self, file_alike_object, file_type, **keywords): self._file_alike_object = file_alike_object self._keywords = keywords + if file_type == constants.FILE_FORMAT_TSV: + self._keywords["dialect"] = constants.KEYWORD_TSV_DIALECT self.__index = 0 def create_sheet(self, name): diff --git a/pyexcel_io/writers/csvz_writer.py b/pyexcel_io/writers/csvz_writer.py index cf80621..ace68c9 100644 --- a/pyexcel_io/writers/csvz_writer.py +++ b/pyexcel_io/writers/csvz_writer.py @@ -1,6 +1,6 @@ import zipfile -from pyexcel_io.constants import FILE_FORMAT_CSVZ, DEFAULT_SHEET_NAME +from pyexcel_io import constants from pyexcel_io.writers.csvz_sheet import CSVZipSheetWriter @@ -13,15 +13,17 @@ class CsvZipWriter(object): any other unzip software. """ - def __init__(self, file_name, **keywords): - self._file_type = FILE_FORMAT_CSVZ + def __init__(self, file_name, file_type, **keywords): + self._file_type = file_type self.zipfile = zipfile.ZipFile(file_name, "w", zipfile.ZIP_DEFLATED) self._keywords = keywords + if file_type == constants.FILE_FORMAT_TSVZ: + self._keywords["dialect"] = constants.KEYWORD_TSV_DIALECT def create_sheet(self, name): given_name = name if given_name is None: - given_name = DEFAULT_SHEET_NAME + given_name = constants.DEFAULT_SHEET_NAME writer = CSVZipSheetWriter( self.zipfile, given_name, self._file_type[:3], **self._keywords ) diff --git a/pyexcel_io/writers/tsv_in_file.py b/pyexcel_io/writers/tsv_in_file.py deleted file mode 100644 index 853285d..0000000 --- a/pyexcel_io/writers/tsv_in_file.py +++ /dev/null @@ -1,9 +0,0 @@ -from pyexcel_io.constants import KEYWORD_TSV_DIALECT -from pyexcel_io.writers.csv_in_file import CsvFileWriter - - -class TsvFileWriter(CsvFileWriter): - def __init__(self, file_alike_object, **keywords): - super().__init__( - file_alike_object, dialect=KEYWORD_TSV_DIALECT, **keywords - ) diff --git a/pyexcel_io/writers/tsv_in_memory.py b/pyexcel_io/writers/tsv_in_memory.py deleted file mode 100644 index 0e1d305..0000000 --- a/pyexcel_io/writers/tsv_in_memory.py +++ /dev/null @@ -1,9 +0,0 @@ -from pyexcel_io.constants import KEYWORD_TSV_DIALECT -from pyexcel_io.writers.csv_in_memory import CsvMemoryWriter - - -class TsvMemoryWriter(CsvMemoryWriter): - def __init__(self, file_alike_object, **keywords): - super().__init__( - file_alike_object, dialect=KEYWORD_TSV_DIALECT, **keywords - ) diff --git a/pyexcel_io/writers/tsvz_writer.py b/pyexcel_io/writers/tsvz_writer.py deleted file mode 100644 index 7eb438d..0000000 --- a/pyexcel_io/writers/tsvz_writer.py +++ /dev/null @@ -1,8 +0,0 @@ -from pyexcel_io.constants import FILE_FORMAT_TSVZ, KEYWORD_TSV_DIALECT -from pyexcel_io.writers.csvz_writer import CsvZipWriter - - -class TsvZipWriter(CsvZipWriter): - def __init__(self, file_name, **keywords): - super().__init__(file_name, dialect=KEYWORD_TSV_DIALECT, **keywords) - self._file_type = FILE_FORMAT_TSVZ diff --git a/tests/test_django_book.py b/tests/test_django_book.py index 3fc320a..30596c1 100644 --- a/tests/test_django_book.py +++ b/tests/test_django_book.py @@ -280,7 +280,7 @@ def test_save_to_more_models(self): adapter1.get_name(): self.content["Sheet1"][1:], adapter2.get_name(): self.content["Sheet2"][1:], } - writer = DjangoBookWriter(importer, batch_size=sample_size) + writer = DjangoBookWriter(importer, 'django', batch_size=sample_size) writer.write(to_store) writer.close() assert model1.objects.objs == self.result1 @@ -303,7 +303,7 @@ def test_bulk_save_flag(self): adapter2.get_name(): self.content["Sheet2"][1:], } writer = DjangoBookWriter( - importer, batch_size=sample_size, bulk_save=False + importer, 'django', batch_size=sample_size, bulk_save=False ) writer.write(to_store) writer.close() @@ -335,7 +335,7 @@ def test_reading_from_more_models(self): adapter2 = DjangoModelExportAdapter(model2) exporter.append(adapter1) exporter.append(adapter2) - reader = DjangoBookReader(exporter) + reader = DjangoBookReader(exporter, 'django') result = OrderedDict() for index, sheet in enumerate(reader.content_array): result.update( diff --git a/tests/test_sql_book.py b/tests/test_sql_book.py index 8533e57..37395cd 100644 --- a/tests/test_sql_book.py +++ b/tests/test_sql_book.py @@ -441,7 +441,7 @@ def post_init_func(row): post_adapter.column_names = data["Post"][0] post_adapter.row_initializer = post_init_func importer.append(post_adapter) - writer = SQLBookWriter(importer) + writer = SQLBookWriter(importer, 'sql') to_store = OrderedDict() to_store.update({category_adapter.get_name(): data["Category"][1:]}) to_store.update({post_adapter.get_name(): data["Post"][1:]}) @@ -454,7 +454,7 @@ def test_read(self): exporter.append(category_adapter) post_adapter = SQLTableExportAdapter(Post) exporter.append(post_adapter) - reader = SQLBookReader(exporter) + reader = SQLBookReader(exporter, 'sql') result = OrderedDict() for index, sheet in enumerate(reader.content_array): result.update( @@ -559,7 +559,7 @@ def test_unknown_sheet(): category_adapter = SQLTableImportAdapter(Category) category_adapter.column_names = [""] importer.append(category_adapter) - writer = SQLBookWriter(importer) + writer = SQLBookWriter(importer, 'sql') to_store = OrderedDict() to_store.update({"you do not see me": [[]]}) writer.write(to_store) From ebeaf58456239cd703d06a64f54aa8bd0f92408a Mon Sep 17 00:00:00 2001 From: chfw Date: Sun, 27 Sep 2020 23:20:37 +0100 Subject: [PATCH 2/4] :books: update pyinstaller instructions --- changelog.yml | 3 ++- docs/source/pyinstaller.rst | 5 ----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/changelog.yml b/changelog.yml index 62a544f..58ce90b 100644 --- a/changelog.yml +++ b/changelog.yml @@ -10,7 +10,8 @@ releases: - 'python 3.6 lower versions are no longer supported' - action: updated details: - - 'pyexcel-io plugin interface has been rewritten. PyInstaller user will be impacted.' + - pyexcel-io plugin interface has been rewritten. PyInstaller user will be impacted. + please read 'Packaging with Pyinstaller' in the documentation. version: 0.6.0 date: tbd - changes: diff --git a/docs/source/pyinstaller.rst b/docs/source/pyinstaller.rst index d92179a..2db1c36 100644 --- a/docs/source/pyinstaller.rst +++ b/docs/source/pyinstaller.rst @@ -13,14 +13,9 @@ In order to package every built-in plugins of pyexcel-io, you need to specify:: --hidden-import pyexcel_io.readers.csv_in_memory --hidden-import pyexcel_io.readers.csv_content --hidden-import pyexcel_io.readers.csvz - --hidden-import pyexcel_io.readers.tsv - --hidden-import pyexcel_io.readers.tsvz --hidden-import pyexcel_io.writers.csv_in_file --hidden-import pyexcel_io.writers.csv_in_memory - --hidden-import pyexcel_io.writers.tsv_in_file - --hidden-import pyexcel_io.writers.tsv_in_memory --hidden-import pyexcel_io.writers.csvz_writer - --hidden-import pyexcel_io.writers.tsvz_writer --hidden-import pyexcel_io.database.importers.django --hidden-import pyexcel_io.database.importers.sqlalchemy --hidden-import pyexcel_io.database.exporters.django From 1b821acd3a3997f5114b34c991d9bd02e87597e1 Mon Sep 17 00:00:00 2001 From: chfw Date: Sun, 27 Sep 2020 22:21:41 +0000 Subject: [PATCH 3/4] This is an auto-commit, updating project meta data, such as changelog.rst, contributors.rst --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index fbc5526..37abb53 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,7 +16,7 @@ Change log **updated** #. pyexcel-io plugin interface has been rewritten. PyInstaller user will be - impacted. + impacted. please read 'Packaging with Pyinstaller' in the documentation. 0.5.20 - 17.7.2019 -------------------------------------------------------------------------------- From 2217acfb7c27e725e8f280aca66c090773a4adb1 Mon Sep 17 00:00:00 2001 From: chfw Date: Sun, 27 Sep 2020 23:22:04 +0100 Subject: [PATCH 4/4] :lipstick: update coding style --- tests/test_django_book.py | 6 +++--- tests/test_sql_book.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_django_book.py b/tests/test_django_book.py index 30596c1..b92356c 100644 --- a/tests/test_django_book.py +++ b/tests/test_django_book.py @@ -280,7 +280,7 @@ def test_save_to_more_models(self): adapter1.get_name(): self.content["Sheet1"][1:], adapter2.get_name(): self.content["Sheet2"][1:], } - writer = DjangoBookWriter(importer, 'django', batch_size=sample_size) + writer = DjangoBookWriter(importer, "django", batch_size=sample_size) writer.write(to_store) writer.close() assert model1.objects.objs == self.result1 @@ -303,7 +303,7 @@ def test_bulk_save_flag(self): adapter2.get_name(): self.content["Sheet2"][1:], } writer = DjangoBookWriter( - importer, 'django', batch_size=sample_size, bulk_save=False + importer, "django", batch_size=sample_size, bulk_save=False ) writer.write(to_store) writer.close() @@ -335,7 +335,7 @@ def test_reading_from_more_models(self): adapter2 = DjangoModelExportAdapter(model2) exporter.append(adapter1) exporter.append(adapter2) - reader = DjangoBookReader(exporter, 'django') + reader = DjangoBookReader(exporter, "django") result = OrderedDict() for index, sheet in enumerate(reader.content_array): result.update( diff --git a/tests/test_sql_book.py b/tests/test_sql_book.py index 37395cd..e0c8b07 100644 --- a/tests/test_sql_book.py +++ b/tests/test_sql_book.py @@ -441,7 +441,7 @@ def post_init_func(row): post_adapter.column_names = data["Post"][0] post_adapter.row_initializer = post_init_func importer.append(post_adapter) - writer = SQLBookWriter(importer, 'sql') + writer = SQLBookWriter(importer, "sql") to_store = OrderedDict() to_store.update({category_adapter.get_name(): data["Category"][1:]}) to_store.update({post_adapter.get_name(): data["Post"][1:]}) @@ -454,7 +454,7 @@ def test_read(self): exporter.append(category_adapter) post_adapter = SQLTableExportAdapter(Post) exporter.append(post_adapter) - reader = SQLBookReader(exporter, 'sql') + reader = SQLBookReader(exporter, "sql") result = OrderedDict() for index, sheet in enumerate(reader.content_array): result.update( @@ -559,7 +559,7 @@ def test_unknown_sheet(): category_adapter = SQLTableImportAdapter(Category) category_adapter.column_names = [""] importer.append(category_adapter) - writer = SQLBookWriter(importer, 'sql') + writer = SQLBookWriter(importer, "sql") to_store = OrderedDict() to_store.update({"you do not see me": [[]]}) writer.write(to_store)