From 1af4a3083fd8f2f7dac2b49e7ceb36c9f773da36 Mon Sep 17 00:00:00 2001 From: Robert Lee Date: Mon, 4 Jan 2021 19:21:11 -0800 Subject: [PATCH 1/3] Check log level. Allow non-default json lib. --- prestodb/__init__.py | 2 +- prestodb/client.py | 31 ++++++++++++++++++++++++------- prestodb/dbapi.py | 5 +++++ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/prestodb/__init__.py b/prestodb/__init__.py index 492b183..f761a0d 100644 --- a/prestodb/__init__.py +++ b/prestodb/__init__.py @@ -20,4 +20,4 @@ from . import exceptions from . import logging -__version__ = "0.7.0" +__version__ = "0.7.1" diff --git a/prestodb/client.py b/prestodb/client.py index 717a6da..35cb977 100644 --- a/prestodb/client.py +++ b/prestodb/client.py @@ -210,6 +210,7 @@ def __init__( request_timeout=constants.DEFAULT_REQUEST_TIMEOUT, # type: Union[float, Tuple[float, float]] handle_retry=exceptions.RetryWithExponentialBackoff(), service_account_file=None, + json_lib=None, ): # type: (...) -> None self._client_session = ClientSession( @@ -258,6 +259,7 @@ def __init__( self._handle_retry = handle_retry self.max_attempts = max_attempts self._http_scheme = http_scheme + self.json_lib = json_lib @property def transaction_id(self): @@ -355,6 +357,8 @@ def post(self, sql): while http_response is not None and http_response.is_redirect: location = http_response.headers["Location"] url = self._redirect_handler.handle(location) + log_level = logger.getEffectiveLevel() + if log_level <= logging.logging.INFO: logger.info( "redirect {} from {} to {}".format( http_response.status_code, location, url @@ -406,9 +410,14 @@ def process(self, http_response): if not http_response.ok: self.raise_response_error(http_response) + log_level = logger.getEffectiveLevel() http_response.encoding = "utf-8" - response = http_response.json() - logger.debug("HTTP {}: {}".format(http_response.status_code, response)) + if self.json_lib: + response = self.json_lib.loads(http_response.content) + else: + response = http_response.json() + if log_level <= logging.logging.DEBUG: + logger.debug("HTTP {}: {}".format(http_response.status_code, response)) if "error" in response: raise self._process_error(response["error"], response.get("id")) @@ -474,11 +483,13 @@ def __iter__(self): self._rows = None # Subsequent fetches from GET requests until next_uri is empty. + log_level = logger.getEffectiveLevel() while not self._query.is_finished(): rows = self._query.fetch() for row in rows: self._rownumber += 1 - logger.debug("row {}".format(row)) + if log_level <= logging.logging.DEBUG: + logger.debug("row {}".format(row)) yield row @@ -554,7 +565,9 @@ def fetch(self): if status.columns: self._columns = status.columns self._stats.update(status.stats) - logger.debug(status) + log_level = logger.getEffectiveLevel() + if log_level <= logging.logging.DEBUG: + logger.debug(status) if status.next_uri is None: self._finished = True return status.rows @@ -565,13 +578,17 @@ def cancel(self): if self.query_id is None or self.is_finished(): return + log_level = logger.getEffectiveLevel() self._cancelled = True url = self._request.get_url("/v1/query/{}".format(self.query_id)) - logger.debug("cancelling query: %s", self.query_id) + if log_level <= logging.logging.DEBUG: + logger.debug("cancelling query: %s", self.query_id) response = self._request.delete(url) - logger.info(response) + if log_level <= logging.logging.INFO: + logger.info(response) if response.status_code == requests.codes.no_content: - logger.debug("query cancelled: %s", self.query_id) + if log_level <= logging.logging.DEBUG: + logger.debug("query cancelled: %s", self.query_id) return self._request.raise_response_error(response) diff --git a/prestodb/dbapi.py b/prestodb/dbapi.py index 119c1b5..5500830 100644 --- a/prestodb/dbapi.py +++ b/prestodb/dbapi.py @@ -75,6 +75,7 @@ def __init__( max_attempts=constants.DEFAULT_MAX_ATTEMPTS, request_timeout=constants.DEFAULT_REQUEST_TIMEOUT, isolation_level=IsolationLevel.AUTOCOMMIT, + json_lib=None, ): self.host = host self.port = port @@ -95,6 +96,7 @@ def __init__( self._isolation_level = isolation_level self._request = None self._transaction = None + self._json_lib = json_lib @property def isolation_level(self): @@ -154,6 +156,9 @@ def _create_request(self): self.redirect_handler, self.max_attempts, self.request_timeout, + None, + None, + self._json_lib, ) def cursor(self): From 4ecc9b18040a38a2efad06e9f7cf497bab7e7262 Mon Sep 17 00:00:00 2001 From: Robert Lee Date: Mon, 4 Jan 2021 20:08:36 -0800 Subject: [PATCH 2/3] fix indentation --- prestodb/client.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/prestodb/client.py b/prestodb/client.py index 35cb977..b4cf2e0 100644 --- a/prestodb/client.py +++ b/prestodb/client.py @@ -359,10 +359,10 @@ def post(self, sql): url = self._redirect_handler.handle(location) log_level = logger.getEffectiveLevel() if log_level <= logging.logging.INFO: - logger.info( - "redirect {} from {} to {}".format( - http_response.status_code, location, url - ) + logger.info( + "redirect {} from {} to {}".format( + http_response.status_code, location, url + ) ) http_response = self._post( url, From f214381a18f3b78af85145772228fa19d3d3549a Mon Sep 17 00:00:00 2001 From: Robert Lee Date: Mon, 4 Jan 2021 20:29:02 -0800 Subject: [PATCH 3/3] fix references to prestodb.logging --- prestodb/client.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/prestodb/client.py b/prestodb/client.py index b4cf2e0..00bd79c 100644 --- a/prestodb/client.py +++ b/prestodb/client.py @@ -358,7 +358,7 @@ def post(self, sql): location = http_response.headers["Location"] url = self._redirect_handler.handle(location) log_level = logger.getEffectiveLevel() - if log_level <= logging.logging.INFO: + if log_level <= prestodb.logging.logging.INFO: logger.info( "redirect {} from {} to {}".format( http_response.status_code, location, url @@ -416,7 +416,7 @@ def process(self, http_response): response = self.json_lib.loads(http_response.content) else: response = http_response.json() - if log_level <= logging.logging.DEBUG: + if log_level <= prestodb.logging.logging.DEBUG: logger.debug("HTTP {}: {}".format(http_response.status_code, response)) if "error" in response: raise self._process_error(response["error"], response.get("id")) @@ -488,7 +488,7 @@ def __iter__(self): rows = self._query.fetch() for row in rows: self._rownumber += 1 - if log_level <= logging.logging.DEBUG: + if log_level <= prestodb.logging.logging.DEBUG: logger.debug("row {}".format(row)) yield row @@ -566,7 +566,7 @@ def fetch(self): self._columns = status.columns self._stats.update(status.stats) log_level = logger.getEffectiveLevel() - if log_level <= logging.logging.DEBUG: + if log_level <= prestodb.logging.logging.DEBUG: logger.debug(status) if status.next_uri is None: self._finished = True @@ -581,13 +581,13 @@ def cancel(self): log_level = logger.getEffectiveLevel() self._cancelled = True url = self._request.get_url("/v1/query/{}".format(self.query_id)) - if log_level <= logging.logging.DEBUG: + if log_level <= prestodb.logging.logging.DEBUG: logger.debug("cancelling query: %s", self.query_id) response = self._request.delete(url) - if log_level <= logging.logging.INFO: + if log_level <= prestodb.logging.logging.INFO: logger.info(response) if response.status_code == requests.codes.no_content: - if log_level <= logging.logging.DEBUG: + if log_level <= prestodb.logging.logging.DEBUG: logger.debug("query cancelled: %s", self.query_id) return self._request.raise_response_error(response)