🔨 update code for denepdency injection and add user warning about older interface

This commit is contained in:
chfw 2020-10-07 19:49:53 +01:00
parent c684c08efa
commit b3cb1a05c8
3 changed files with 54 additions and 24 deletions

View File

@ -7,11 +7,19 @@
:copyright: (c) 2014-2020 by Onni Software Ltd.
:license: New BSD License, see LICENSE for more details
"""
import warnings
import pyexcel_io.manager as manager
from pyexcel_io._compact import OrderedDict, isstream
from .constants import MESSAGE_ERROR_03, MESSAGE_WRONG_IO_INSTANCE
DEPRECATED_SINCE_0_6_0 = (
"Deprecated since v0.6.0! "
+ "Although backward compatibility is preserved, "
+ "it is recommended to upgrade to get new features."
)
class RWInterface(object):
"""
@ -21,6 +29,7 @@ class RWInterface(object):
stream_type = None
def __init__(self):
warnings.warn(DEPRECATED_SINCE_0_6_0)
self._file_type = None
def open(self, file_name, **keywords):

View File

@ -33,12 +33,20 @@ class Reader(object):
self.library = library
self.keywords = None
# if you know which reader class to use, this attribute allows
# you to set reader class externally. Since there is no
# so call private field in Python, I am not going to create
# useless setter and getter functions like Java.
# in pyexcel, this attribute is mainly used for testing
self.reader_class = None
def open(self, file_name, **keywords):
reader_class = NEW_READERS.get_a_plugin(
self.file_type, location="file", library=self.library
)
if self.reader_class is None:
self.reader_class = NEW_READERS.get_a_plugin(
self.file_type, location="file", library=self.library
)
self.keywords, native_sheet_keywords = clean_keywords(keywords)
self.reader = reader_class(
self.reader = self.reader_class(
file_name, self.file_type, **native_sheet_keywords
)
return self.reader
@ -46,10 +54,11 @@ class Reader(object):
def open_content(self, file_content, **keywords):
self.keywords, native_sheet_keywords = clean_keywords(keywords)
try:
reader_class = NEW_READERS.get_a_plugin(
self.file_type, location="content", library=self.library
)
self.reader = reader_class(
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
@ -64,10 +73,11 @@ class Reader(object):
def open_stream(self, file_stream, **keywords):
self.keywords, native_sheet_keywords = clean_keywords(keywords)
reader_class = NEW_READERS.get_a_plugin(
self.file_type, location="memory", library=self.library
)
self.reader = reader_class(
if self.reader_class is None:
self.reader_class = NEW_READERS.get_a_plugin(
self.file_type, location="memory", library=self.library
)
self.reader = self.reader_class(
file_stream, self.file_type, **native_sheet_keywords
)
return self.reader

View File

@ -6,26 +6,37 @@ class Writer(object):
self.file_type = file_type
self.library = library
self.keyboards = None
# if you know which reader class to use, this attribute allows
# you to set reader class externally. Since there is no
# so call private field in Python, I am not going to create
# useless setter and getter functions like Java.
# in pyexcel, this attribute is mainly used for testing
self.writer_class = None
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, self.file_type, **keywords)
if self.writer_class is None:
self.writer_class = NEW_WRITERS.get_a_plugin(
self.file_type, library=self.library, location="file"
)
self.writer = self.writer_class(file_name, self.file_type, **keywords)
def open_content(self, file_stream, **keywords):
# if not isstream(file_stream):
# raise IOError(MESSAGE_ERROR_03)
writer_class = NEW_WRITERS.get_a_plugin(
self.file_type, library=self.library, location="content"
if self.writer_class is None:
self.writer_class = NEW_WRITERS.get_a_plugin(
self.file_type, library=self.library, location="content"
)
self.writer = self.writer_class(
file_stream, self.file_type, **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"
if self.writer_class is None:
self.writer_class = NEW_WRITERS.get_a_plugin(
self.file_type, library=self.library, location="memory"
)
self.writer = self.writer_class(
file_stream, self.file_type, **keywords
)
self.writer = writer_class(file_stream, self.file_type, **keywords)
def write(self, incoming_dict):
self.writer.write(incoming_dict)