bug fixes (misc)

v2.2.0
Steve Nyemba 22 hours ago
parent f035f70fa0
commit f57d495ed4

@ -1,6 +1,6 @@
__app_name__ = 'data-transport' __app_name__ = 'data-transport'
__author__ = 'The Phi Technology' __author__ = 'The Phi Technology'
__version__= '2.2.42' __version__= '2.2.46'
__email__ = "info@the-phi.com" __email__ = "info@the-phi.com"
__edition__= 'community' __edition__= 'community'
__license__=f""" __license__=f"""

@ -34,7 +34,7 @@ class Reader (File):
def read(self,**args): def read(self,**args):
_path = self.path if 'path' not in args else args['path'] _path = self.path if 'path' not in args else args['path']
_delimiter = self.delimiter if 'delimiter' not in args else args['delimiter'] _delimiter = self.delimiter if 'delimiter' not in args else args['delimiter']
_df = pd.read_csv(_path,delimiter=self.delimiter) _df = pd.read_csv(_path,delimiter=_delimiter)
if 'query' in args : if 'query' in args :
_query = args['query'] _query = args['query']
_df = _df.query(_query) _df = _df.query(_query)

@ -19,12 +19,14 @@ class Reader:
def __init__(self,**_args): def __init__(self,**_args):
self._url = _args['url'] self._url = _args['url']
self._headers = None if 'headers' not in _args else _args['headers'] self._headers = None if 'headers' not in _args else _args['headers']
self._data = None if 'data' not in _args else _args['data']
self._method = 'get' if 'method' not in _args else _args['method'].lower()
# def isready(self): # def isready(self):
# return self.file_length > 0 # return self.file_length > 0
def format(self,_response): def format(self,_response):
_mimetype= _response.headers['Content-Type'] _mimetype= _response.headers['Content-Type']
if _mimetype == 'text/csv' or 'text/csv': if 'text/plain' in _mimetype or 'text/csv' in _mimetype:
_content = _response.text _content = _response.text
return pd.read_csv(StringIO(_content)) return pd.read_csv(StringIO(_content))
# #
@ -32,12 +34,28 @@ class Reader:
# #
return _response.text return _response.text
def get (self,key,_args):
"""
This function inspects an argument and tries to determine if the corresponding attribute is set
i.e the attribute will be prefixed by underscore
"""
_attr = f'_{key}'
return _args[key] if key in _args else (getattr(self,_attr) if hasattr(self,_attr) else None)
def read(self,**_args): def read(self,**_args):
if self._headers : _method = self.get('method',_args)
r = requests.get(self._url,headers = self._headers) _headers = self.get('headers',_args)
else: _data = self.get('data',_args)
r = requests.get(self._url,headers = self._headers) _url = self.get('url',_args)
return self.format(r) _requestPpointer = getattr(requests,_method)
_resp = _requestPpointer(_url,headers=_headers,data=_data)
return self.format(_resp)
# if self._headers :
# r = requests.get(self._url,headers = self._headers)
# else:
# r = requests.get(self._url,headers = self._headers)
# return self.format(r)
class Writer: class Writer:
""" """

@ -20,7 +20,16 @@ class Reader(Duck,BaseReader) :
Duck.__init__(self,**_args) Duck.__init__(self,**_args)
BaseReader.__init__(self,**_args) BaseReader.__init__(self,**_args)
def _get_uri(self,**_args): def _get_uri(self,**_args):
#
# if we are working with an in-memory database we can NOT set the attributes to be read-only
# something to do with SQL-Alchemy
p = self.database.strip().startswith(":") and self.database.strip().endswith(":")
if not p :
return super()._get_uri(**_args),{'connect_args':{'read_only':True}} return super()._get_uri(**_args),{'connect_args':{'read_only':True}}
else:
#
# we have an in-memory database
return super()._get_uri(**_args),{}
class Writer(Duck,BaseWriter): class Writer(Duck,BaseWriter):
def __init__(self,**_args): def __init__(self,**_args):
Duck.__init__(self,**_args) Duck.__init__(self,**_args)

Loading…
Cancel
Save