From f57d495ed4ee59834f51a8ebc75195f505f9f847 Mon Sep 17 00:00:00 2001 From: Steve Nyemba Date: Mon, 7 Sep 2026 11:49:09 -0500 Subject: [PATCH] bug fixes (misc) --- transport/info.py | 2 +- transport/other/files.py | 2 +- transport/other/http.py | 30 ++++++++++++++++++++++++------ transport/sql/duckdb.py | 11 ++++++++++- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/transport/info.py b/transport/info.py index 374d2bc..09f274f 100644 --- a/transport/info.py +++ b/transport/info.py @@ -1,6 +1,6 @@ __app_name__ = 'data-transport' __author__ = 'The Phi Technology' -__version__= '2.2.42' +__version__= '2.2.46' __email__ = "info@the-phi.com" __edition__= 'community' __license__=f""" diff --git a/transport/other/files.py b/transport/other/files.py index 31dfb90..d679746 100644 --- a/transport/other/files.py +++ b/transport/other/files.py @@ -34,7 +34,7 @@ class Reader (File): def read(self,**args): _path = self.path if 'path' not in args else args['path'] _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 : _query = args['query'] _df = _df.query(_query) diff --git a/transport/other/http.py b/transport/other/http.py index 48a25a9..c416739 100644 --- a/transport/other/http.py +++ b/transport/other/http.py @@ -19,12 +19,14 @@ class Reader: def __init__(self,**_args): self._url = _args['url'] 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): # return self.file_length > 0 def format(self,_response): _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 return pd.read_csv(StringIO(_content)) # @@ -32,12 +34,28 @@ class Reader: # 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): - if self._headers : - r = requests.get(self._url,headers = self._headers) - else: - r = requests.get(self._url,headers = self._headers) - return self.format(r) + _method = self.get('method',_args) + _headers = self.get('headers',_args) + _data = self.get('data',_args) + _url = self.get('url',_args) + _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: """ diff --git a/transport/sql/duckdb.py b/transport/sql/duckdb.py index ab5b0d2..3f5c392 100644 --- a/transport/sql/duckdb.py +++ b/transport/sql/duckdb.py @@ -20,7 +20,16 @@ class Reader(Duck,BaseReader) : Duck.__init__(self,**_args) BaseReader.__init__(self,**_args) def _get_uri(self,**_args): - return super()._get_uri(**_args),{'connect_args':{'read_only':True}} + # + # 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}} + else: + # + # we have an in-memory database + return super()._get_uri(**_args),{} class Writer(Duck,BaseWriter): def __init__(self,**_args): Duck.__init__(self,**_args)