72 lines
1.8 KiB
Python
72 lines
1.8 KiB
Python
"""
|
|
pyexcel.source
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Generic data source definition
|
|
|
|
:copyright: (c) 2015-2025 by Onni Software Ltd.
|
|
:license: New BSD License
|
|
"""
|
|
|
|
from pyexcel import constants
|
|
|
|
|
|
class AbstractSource:
|
|
"""
|
|
Define a data source for use with the signature functions
|
|
|
|
This can be used to extend the function parameters once the custom
|
|
class inherit this and register it with corresponding source registry
|
|
"""
|
|
|
|
fields = [constants.SOURCE]
|
|
attributes = []
|
|
targets = []
|
|
actions = []
|
|
key = constants.SOURCE
|
|
|
|
def __init__(self, **keywords):
|
|
self._keywords = keywords
|
|
|
|
def get_source_info(self):
|
|
"""return filename and path, otherwise not useful
|
|
|
|
see also `:meth:pyexcel.internal.core.get_book_stream`
|
|
"""
|
|
return (None, None)
|
|
|
|
@classmethod
|
|
def is_my_business(cls, action, **keywords):
|
|
"""
|
|
If all required keys are present, this source is activated
|
|
"""
|
|
statuses = [_has_field(field, keywords) for field in cls.fields]
|
|
results = [status for status in statuses if status is False]
|
|
return len(results) == 0
|
|
|
|
def write_data(self, content):
|
|
"""Write data to a data source"""
|
|
raise NotImplementedError("")
|
|
|
|
def get_data(self):
|
|
"""Get data from a data source"""
|
|
raise NotImplementedError("")
|
|
|
|
|
|
class MemorySourceMixin:
|
|
"""A memory source should an internal memory stream
|
|
|
|
And it is desirable to get its internal stream
|
|
"""
|
|
|
|
def get_content(self):
|
|
"""Get memory representation of the formatted data
|
|
|
|
e.g. StringIO instance which contains the csv formatted data
|
|
"""
|
|
return self._content
|
|
|
|
|
|
def _has_field(field, keywords):
|
|
return field in keywords and keywords[field] is not None
|