From 46dfcc1e4684aad5d35dc1c5caa6ec2bda5f0397 Mon Sep 17 00:00:00 2001 From: Dor Eliyahu Date: Wed, 30 Jul 2025 16:18:19 +0300 Subject: [PATCH 1/6] Increase the default "arraysize" --- pytimbr_sqla/hive.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pytimbr_sqla/hive.py b/pytimbr_sqla/hive.py index d119242..da42ee1 100644 --- a/pytimbr_sqla/hive.py +++ b/pytimbr_sqla/hive.py @@ -366,7 +366,7 @@ class Cursor(common.DBAPICursor): visible by other cursors or connections. """ - def __init__(self, connection, arraysize=1000): + def __init__(self, connection, arraysize=10000): self._operationHandle = None super(Cursor, self).__init__() self._arraysize = arraysize @@ -391,7 +391,7 @@ def arraysize(self): @arraysize.setter def arraysize(self, value): """Array size cannot be None, and should be an integer""" - default_arraysize = 1000 + default_arraysize = 10000 try: self._arraysize = int(value) or default_arraysize except TypeError: From 512c5b1c2b6e2414f9e40927a31c5ed2f0b8da4d Mon Sep 17 00:00:00 2001 From: Dor Eliyahu Date: Wed, 30 Jul 2025 16:19:59 +0300 Subject: [PATCH 2/6] Override the "flush" function for the "thrift" package --- thrift/transport/THttpClient.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/thrift/transport/THttpClient.py b/thrift/transport/THttpClient.py index 14cff77..8249aac 100644 --- a/thrift/transport/THttpClient.py +++ b/thrift/transport/THttpClient.py @@ -172,9 +172,12 @@ def write(self, buf): self.__wbuf.write(buf) def flush(self): - if self.isOpen(): - self.close() - self.open() + if self.__http_response is not None: + self.__http_response.close() + self.__http_response = None + + if not self.isOpen(): + self.open() # Pull data out of buffer data = self.__wbuf.getvalue() From fbbac013c7a68d89d9954964b84564907b34195e Mon Sep 17 00:00:00 2001 From: Dor Eliyahu Date: Wed, 30 Jul 2025 18:42:06 +0300 Subject: [PATCH 3/6] Fix deprecated license classifiers --- pyproject.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 134ae6d..123d044 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,11 +46,6 @@ classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Topic :: Software Development :: Build Tools", - "License :: OSI Approved :: MIT License", - "License :: OSI Approved :: Apache Software License", - "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", - "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", From 5c188cef3e46928fe647e53d5045b4ff4106eb95 Mon Sep 17 00:00:00 2001 From: Dor Eliyahu Date: Wed, 30 Jul 2025 18:43:08 +0300 Subject: [PATCH 4/6] Fix dependencies versioning errors --- pyproject.toml | 11 ++++++----- test/requirements.txt | Bin 422 -> 422 bytes 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 123d044..9319d0e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,14 +54,15 @@ classifiers = [ ] requires-python = ">=3.9" dependencies = [ - "future==1.0.0", - "python-dateutil==2.9.0", + "future>=0.18.2", + "python-dateutil>=2.8.2", "ldap3", - "thrift_sasl==0.4.3", + "thrift>=0.16.0", + "thrift_sasl>=0.4.3", "pure-sasl>=0.6.2", "sqlalchemy>=1.4.36,<2.0.0", - "requests_kerberos==0.15.0", - "pyhive==0.7.0" + "requests_kerberos>=0.12.0", + "pyhive>=0.7.0" ] [project.urls] diff --git a/test/requirements.txt b/test/requirements.txt index 3cb219e375b438b5af646b66b066d99c5a5ad9a1..ae8e16114801a3b1b01489a620a14a2eabab7d39 100644 GIT binary patch delta 36 rcmZ3+yo`B51f$)=NJAjet Date: Wed, 30 Jul 2025 19:08:39 +0300 Subject: [PATCH 5/6] Add thrift override also to package "__init__.py" --- pytimbr_sqla/__init__.py | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/pytimbr_sqla/__init__.py b/pytimbr_sqla/__init__.py index cb1e938..c7de307 100644 --- a/pytimbr_sqla/__init__.py +++ b/pytimbr_sqla/__init__.py @@ -1,3 +1,63 @@ """Timbr Python SQLAlchemy connector.""" __version__ = "2.0.0" + +try: + from thrift.transport import THttpClient + def timbr_flush(self): + if self.__http_response is not None: + self.__http_response.close() + self.__http_response = None + + if not self.isOpen(): + self.open() + + # Pull data out of buffer + data = self.__wbuf.getvalue() + self.__wbuf = BytesIO() + + # HTTP request + if self.using_proxy() and self.scheme == "http": + # need full URL of real host for HTTP proxy here (HTTPS uses CONNECT tunnel) + self.__http.putrequest('POST', "http://%s:%s%s" % + (self.realhost, self.realport, self.path)) + else: + self.__http.putrequest('POST', self.path) + + # Write headers + self.__http.putheader('Content-Type', 'application/x-thrift') + self.__http.putheader('Content-Length', str(len(data))) + if self.using_proxy() and self.scheme == "http" and self.proxy_auth is not None: + self.__http.putheader("Proxy-Authorization", self.proxy_auth) + + if not self.__custom_headers or 'User-Agent' not in self.__custom_headers: + user_agent = 'Python/THttpClient' + script = os.path.basename(sys.argv[0]) + if script: + user_agent = '%s (%s)' % (user_agent, urllib.parse.quote(script)) + self.__http.putheader('User-Agent', user_agent) + + if self.__custom_headers: + for key, val in six.iteritems(self.__custom_headers): + self.__http.putheader(key, val) + + # Saves the cookie sent by the server in the previous response. + # HTTPConnection.putheader can only be called after a request has been + # started, and before it's been sent. + if self.headers and 'Set-Cookie' in self.headers: + self.__http.putheader('Cookie', self.headers['Set-Cookie']) + + self.__http.endheaders() + + # Write payload + self.__http.send(data) + + # Get reply to flush the request + self.__http_response = self.__http.getresponse() + self.code = self.__http_response.status + self.message = self.__http_response.reason + self.headers = self.__http_response.msg + + THttpClient.flush = timbr_flush +except: + pass \ No newline at end of file From 4756c99940244acf1aec58b0e075cb8d7c7eae21 Mon Sep 17 00:00:00 2001 From: Dor Eliyahu Date: Wed, 30 Jul 2025 19:15:13 +0300 Subject: [PATCH 6/6] Update version --- pytimbr_sqla/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pytimbr_sqla/__init__.py b/pytimbr_sqla/__init__.py index c7de307..afc643e 100644 --- a/pytimbr_sqla/__init__.py +++ b/pytimbr_sqla/__init__.py @@ -1,6 +1,6 @@ """Timbr Python SQLAlchemy connector.""" -__version__ = "2.0.0" +__version__ = "2.0.1" try: from thrift.transport import THttpClient