PHOENIX-6459 Try to use a Session to pass along any cookies the serveā¦ (#60)
The Requests documentation also alludes to performance benefit due to
leaving the existing connection open (rather than re-connecting each time)
https://docs.python-requests.org/en/master/user/advanced/#session-objects
diff --git a/python-phoenixdb/phoenixdb/avatica/client.py b/python-phoenixdb/phoenixdb/avatica/client.py
index a1f502c..5c96586 100644
--- a/python-phoenixdb/phoenixdb/avatica/client.py
+++ b/python-phoenixdb/phoenixdb/avatica/client.py
@@ -149,6 +149,7 @@
self.auth = auth
self.verify = verify
self.connection = None
+ self.session = None
def connect(self):
"""This method used to open a persistent TCP connection
@@ -160,20 +161,28 @@
pass
def _post_request(self, body, headers):
+ # Create the session if we haven't before
+ if not self.session:
+ logger.debug("Creating a new Session")
+ self.session = requests.Session()
+ self.session.headers.update(headers)
+ self.session.stream = True
+ if self.auth is not None:
+ self.session.auth = self.auth
+
retry_count = self.max_retries
while True:
- logger.debug("POST %s %r %r", self.url.geturl(), body, headers)
+ logger.debug("POST %s %r %r", self.url.geturl(), body, self.session.headers)
- requestArgs = {'data': body, 'stream': True, 'headers': headers}
+ requestArgs = {'data': body}
- if self.auth is not None:
- requestArgs.update(auth=self.auth)
-
+ # Setting verify on the Session is not the same as setting it
+ # as a request arg
if self.verify is not None:
requestArgs.update(verify=self.verify)
try:
- response = requests.request('post', self.url.geturl(), **requestArgs)
+ response = self.session.post(self.url.geturl(), **requestArgs)
except requests.HTTPError as e:
if retry_count > 0: