Quellcode durchsuchen

bug fixes (misc)

Steve Nyemba vor 1 Woche
Ursprung
Commit
f57d495ed4
4 geänderte Dateien mit 36 neuen und 9 gelöschten Zeilen
  1. 1 1
      transport/info.py
  2. 1 1
      transport/other/files.py
  3. 24 6
      transport/other/http.py
  4. 10 1
      transport/sql/duckdb.py

+ 1 - 1
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"""

+ 1 - 1
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)

+ 24 - 6
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:
 	"""

+ 10 - 1
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)