adding wrapper class/design pattern to support plugins

This commit is contained in:
Steve Nyemba 2024-04-01 12:52:42 -05:00
parent 6feae101b0
commit fd899f5549
1 changed files with 47 additions and 0 deletions

47
transport/iowrapper.py Normal file
View File

@ -0,0 +1,47 @@
"""
This class is a wrapper around read/write classes of cloud,sql,nosql,other packages
The wrapper allows for application of plugins as pre-post conditions
"""
class IO:
"""
Base wrapper class for read/write
"""
def __init__(self,_agent,loader):
self._agent = _agent
self._loader = loader
def meta (self,**_args):
if hasattr(self._agent,'meta') :
return self._agent.meta(**_args)
return []
def close(self):
if hasattr(self._agent,'close') :
self._agent.close()
def apply(self):
"""
applying pre/post conditions given a pipeline expression
"""
for _pointer in self._loader :
_data = _pointer(_data)
def apply(self,_query):
if hasattr(self._agent,'apply') :
return self._agent.apply(_query)
return None
class IReader(IO):
def __init__(self,_agent,pipeline=None):
super().__init__(_agent,pipeline)
def read(self,**_args):
_data = self._agent.read(**_args)
if self._loader and self._loader.ratio() > 0 :
_data = self._loader.apply(_data)
#
# output data
return _data
class IWriter(IO):
def __init__(self,_agent,pipeline=None):
super().__init__(_agent,pipeline)
def write(self,_data,**_args):
if self._loader and self._loader.ratio() > 0 :
_data = self._loader.apply(_data)
self._agent.write(_data,**_args)