Skip to content

Commit 0674a55

Browse files
committed
fix(logging): remove logging configuration from connect(), suppress log stderr output by default
1 parent 7cd8201 commit 0674a55

9 files changed

+72
-87
lines changed

redshift_connector/__init__.py

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import logging
2-
import os
32
import typing
43

54
from redshift_connector.config import DEFAULT_PROTOCOL_VERSION
@@ -41,8 +40,7 @@
4140

4241
from .version import __version__
4342

44-
path: str = os.path.abspath(__file__)
45-
log_path: str = "/".join(path.split("/")[:-1]) + "/driver.log"
43+
logging.getLogger(__name__).addHandler(logging.NullHandler())
4644

4745
# Copyright (c) 2007-2009, Mathieu Fenniak
4846
# Copyright (c) The Contributors
@@ -112,21 +110,8 @@ def connect(
112110
force_lowercase: bool = False,
113111
allow_db_user_override: bool = False,
114112
client_protocol_version: int = DEFAULT_PROTOCOL_VERSION,
115-
log_level: int = 0,
116-
log_path: str = log_path,
117113
) -> Connection:
118114

119-
FORMAT_TO_USE: str = "%(levelname)s|%(asctime)s|%(name)s|%(filename)s|" "%(funcName)s|%(lineno)d: %(message)s"
120-
log_level_dic: typing.Dict[int, int] = {
121-
0: logging.CRITICAL,
122-
1: logging.ERROR,
123-
2: logging.WARN,
124-
3: logging.INFO,
125-
4: logging.DEBUG,
126-
}
127-
logging.basicConfig(filename=log_path, filemode="w", format=FORMAT_TO_USE, level=logging.INFO)
128-
logging.disable(log_level_dic[log_level])
129-
130115
info: RedshiftProperty = RedshiftProperty()
131116
set_iam_properties(
132117
info,

redshift_connector/iam_helper.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
)
1717
from redshift_connector.redshift_property import RedshiftProperty
1818

19-
logger = logging.getLogger(__name__)
19+
_logger: logging.Logger = logging.getLogger(__name__)
2020

2121

2222
class SSLMode(Enum):
@@ -256,17 +256,17 @@ def set_cluster_credentials(cred_provider: SamlCredentialsProvider, info: Redshi
256256
info.user_name = cred["DbUser"]
257257
info.password = cred["DbPassword"]
258258
except botocore.exceptions.ClientError as e:
259-
logger.error("ClientError: %s", e)
259+
_logger.error("ClientError: %s", e)
260260
raise e
261261
except client.exceptions.ClusterNotFoundFault as e:
262-
logger.error("ClusterNotFoundFault: %s", e)
262+
_logger.error("ClusterNotFoundFault: %s", e)
263263
raise e
264264
except client.exceptions.UnsupportedOperationFault as e:
265-
logger.error("UnsupportedOperationFault: %s", e)
265+
_logger.error("UnsupportedOperationFault: %s", e)
266266
raise e
267267
except botocore.exceptions.EndpointConnectionError as e:
268-
logger.error("EndpointConnectionError: %s", e)
268+
_logger.error("EndpointConnectionError: %s", e)
269269
raise e
270270
except Exception as e:
271-
logger.error("other Exception: %s", e)
271+
_logger.error("other Exception: %s", e)
272272
raise e

redshift_connector/plugin/adfs_credentials_provider.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from redshift_connector.error import InterfaceError
66
from redshift_connector.plugin.saml_credentials_provider import SamlCredentialsProvider
77

8-
logger = logging.getLogger(__name__)
8+
_logger: logging.Logger = logging.getLogger(__name__)
99

1010

1111
class AdfsCredentialsProvider(SamlCredentialsProvider):
@@ -33,25 +33,25 @@ def form_based_authentication(self: "AdfsCredentialsProvider") -> str:
3333
response: "requests.Response" = requests.get(url)
3434
response.raise_for_status()
3535
except requests.exceptions.HTTPError as e:
36-
logger.error("Request for SAML assertion when refreshing credentials was unsuccessful. {}".format(str(e)))
36+
_logger.error("Request for SAML assertion when refreshing credentials was unsuccessful. {}".format(str(e)))
3737
raise InterfaceError(e)
3838
except requests.exceptions.Timeout as e:
39-
logger.error("A timeout occurred when requesting SAML assertion")
39+
_logger.error("A timeout occurred when requesting SAML assertion")
4040
raise InterfaceError(e)
4141
except requests.exceptions.TooManyRedirects as e:
42-
logger.error(
42+
_logger.error(
4343
"A error occurred when requesting SAML assertion to refresh credentials. "
4444
"Verify RedshiftProperties are correct"
4545
)
4646
raise InterfaceError(e)
4747
except requests.exceptions.RequestException as e:
48-
logger.error("A unknown error occurred when requesting SAML assertion to refresh credentials")
48+
_logger.error("A unknown error occurred when requesting SAML assertion to refresh credentials")
4949
raise InterfaceError(e)
5050

5151
try:
5252
soup = bs4.BeautifulSoup(response.text)
5353
except Exception as e:
54-
logger.error("An error occurred while parsing response: {}".format(str(e)))
54+
_logger.error("An error occurred while parsing response: {}".format(str(e)))
5555
raise InterfaceError(e)
5656

5757
payload: typing.Dict[str, typing.Optional[str]] = {}
@@ -76,22 +76,22 @@ def form_based_authentication(self: "AdfsCredentialsProvider") -> str:
7676
response = requests.post(url, data=payload)
7777
response.raise_for_status()
7878
except requests.exceptions.HTTPError as e:
79-
logger.error("Request to refresh credentials was unsuccessful. {}".format(str(e)))
79+
_logger.error("Request to refresh credentials was unsuccessful. {}".format(str(e)))
8080
raise InterfaceError(e)
8181
except requests.exceptions.Timeout as e:
82-
logger.error("A timeout occurred when attempting to refresh credentials")
82+
_logger.error("A timeout occurred when attempting to refresh credentials")
8383
raise InterfaceError(e)
8484
except requests.exceptions.TooManyRedirects as e:
85-
logger.error("A error occurred when refreshing credentials. Verify RedshiftProperties are correct")
85+
_logger.error("A error occurred when refreshing credentials. Verify RedshiftProperties are correct")
8686
raise InterfaceError(e)
8787
except requests.exceptions.RequestException as e:
88-
logger.error("A unknown error occurred when refreshing credentials")
88+
_logger.error("A unknown error occurred when refreshing credentials")
8989
raise InterfaceError(e)
9090

9191
try:
9292
soup = bs4.BeautifulSoup(response.text)
9393
except Exception as e:
94-
logger.error("An error occurred while parsing response: {}".format(str(e)))
94+
_logger.error("An error occurred while parsing response: {}".format(str(e)))
9595
raise InterfaceError(e)
9696
assertion: str = ""
9797

redshift_connector/plugin/azure_credentials_provider.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from redshift_connector.plugin.saml_credentials_provider import SamlCredentialsProvider
88
from redshift_connector.redshift_property import RedshiftProperty
99

10-
logger = logging.getLogger(__name__)
10+
_logger: logging.Logger = logging.getLogger(__name__)
1111

1212

1313
# Class to get SAML Response from Microsoft Azure using OAuth 2.0 API
@@ -72,18 +72,18 @@ def azure_oauth_based_authentication(self: "AzureCredentialsProvider") -> str:
7272
response: "requests.Response" = requests.post(url, data=payload, headers=headers)
7373
response.raise_for_status()
7474
except requests.exceptions.HTTPError as e:
75-
logger.error("Request for authentication from Azure was unsuccessful. {}".format(str(e)))
75+
_logger.error("Request for authentication from Azure was unsuccessful. {}".format(str(e)))
7676
raise InterfaceError(e)
7777
except requests.exceptions.Timeout as e:
78-
logger.error("A timeout occurred when requesting authentication from Azure")
78+
_logger.error("A timeout occurred when requesting authentication from Azure")
7979
raise InterfaceError(e)
8080
except requests.exceptions.TooManyRedirects as e:
81-
logger.error(
81+
_logger.error(
8282
"A error occurred when requesting authentication from Azure. Verify RedshiftProperties are correct"
8383
)
8484
raise InterfaceError(e)
8585
except requests.exceptions.RequestException as e:
86-
logger.error("A unknown error occurred when requesting authentication from Azure.")
86+
_logger.error("A unknown error occurred when requesting authentication from Azure.")
8787
raise InterfaceError(e)
8888

8989
# parse the JSON response to grab access_token field which contains Base64 encoded SAML
@@ -92,7 +92,7 @@ def azure_oauth_based_authentication(self: "AzureCredentialsProvider") -> str:
9292
try:
9393
saml_assertion = response.json()["access_token"]
9494
except Exception as e:
95-
logger.error("Failed to authenticate with Azure. Response from Azure did not include access_token.")
95+
_logger.error("Failed to authenticate with Azure. Response from Azure did not include access_token.")
9696
raise InterfaceError(e)
9797
if saml_assertion == "":
9898
raise InterfaceError("Azure access_token is empty")
@@ -106,7 +106,7 @@ def azure_oauth_based_authentication(self: "AzureCredentialsProvider") -> str:
106106
try:
107107
decoded_saml_assertion = str(base64.urlsafe_b64decode(saml_assertion))
108108
except TypeError as e:
109-
logger.error("Failed to decode saml assertion returned from Azure")
109+
_logger.error("Failed to decode saml assertion returned from Azure")
110110
raise InterfaceError(e)
111111

112112
# SAML Response is required to be sent to base class. We need to provide a minimum of:

redshift_connector/plugin/browser_azure_credentials_provider.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from redshift_connector.plugin.saml_credentials_provider import SamlCredentialsProvider
1111
from redshift_connector.redshift_property import RedshiftProperty
1212

13-
logger = logging.getLogger(__name__)
13+
_logger: logging.Logger = logging.getLogger(__name__)
1414

1515

1616
# Class to get SAML Response from Microsoft Azure using OAuth 2.0 API
@@ -87,10 +87,10 @@ def fetch_authorization_token(self: "BrowserAzureCredentialsProvider", listen_so
8787

8888
return str(return_value)
8989
except socket.error as e:
90-
logger.error("socket error: %s", e)
90+
_logger.error("socket error: %s", e)
9191
raise e
9292
except Exception as e:
93-
logger.error("other Exception: %s", e)
93+
_logger.error("other Exception: %s", e)
9494
raise e
9595

9696
# Initiates the request to the IDP and gets the response body
@@ -117,27 +117,27 @@ def fetch_saml_response(self: "BrowserAzureCredentialsProvider", token):
117117
response = requests.post(url, data=payload, headers=headers)
118118
response.raise_for_status()
119119
except requests.exceptions.HTTPError as e:
120-
logger.error("Request for authentication from Microsoft was unsuccessful. {}".format(str(e)))
120+
_logger.error("Request for authentication from Microsoft was unsuccessful. {}".format(str(e)))
121121
raise InterfaceError(e)
122122
except requests.exceptions.Timeout as e:
123-
logger.error("A timeout occurred when requesting authentication from Azure")
123+
_logger.error("A timeout occurred when requesting authentication from Azure")
124124
raise InterfaceError(e)
125125
except requests.exceptions.TooManyRedirects as e:
126-
logger.error(
126+
_logger.error(
127127
"A error occurred when requesting authentication from Azure. Verify RedshiftProperties are correct"
128128
)
129129
raise InterfaceError(e)
130130
except requests.exceptions.RequestException as e:
131-
logger.error("A unknown error occurred when requesting authentication from Azure")
131+
_logger.error("A unknown error occurred when requesting authentication from Azure")
132132
raise InterfaceError(e)
133133

134134
try:
135135
saml_assertion: str = response.json()["access_token"]
136136
except TypeError as e:
137-
logger.error("Failed to decode saml assertion returned from Azure")
137+
_logger.error("Failed to decode saml assertion returned from Azure")
138138
raise InterfaceError(e)
139139
except KeyError as e:
140-
logger.error("Azure access_token was not found in saml assertion")
140+
_logger.error("Azure access_token was not found in saml assertion")
141141
raise InterfaceError(e)
142142
except Exception as e:
143143
raise InterfaceError(e)

redshift_connector/plugin/browser_saml_credentials_provider.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from redshift_connector.plugin.saml_credentials_provider import SamlCredentialsProvider
1010
from redshift_connector.redshift_property import RedshiftProperty
1111

12-
logger = logging.getLogger(__name__)
12+
_logger: logging.Logger = logging.getLogger(__name__)
1313

1414

1515
# Class to get SAML Response
@@ -57,10 +57,10 @@ def authenticate(self: "BrowserSamlCredentialsProvider") -> str:
5757
samlresponse = urllib.parse.unquote(return_value)
5858
return str(samlresponse)
5959
except socket.error as e:
60-
logger.error("socket error: %s", e)
60+
_logger.error("socket error: %s", e)
6161
raise e
6262
except Exception as e:
63-
logger.error("other Exception: %s", e)
63+
_logger.error("other Exception: %s", e)
6464
raise e
6565

6666
def run_server(self: "BrowserSamlCredentialsProvider", listen_port: int, idp_response_timeout: int) -> str:

redshift_connector/plugin/okta_credentials_provider.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from redshift_connector.plugin.saml_credentials_provider import SamlCredentialsProvider
88
from redshift_connector.redshift_property import RedshiftProperty
99

10-
logger = logging.getLogger(__name__)
10+
_logger: logging.Logger = logging.getLogger(__name__)
1111

1212

1313
# Class to get SAML Response from Okta
@@ -42,18 +42,18 @@ def okta_authentication(self: "OktaCredentialsProvider") -> str:
4242
response: "requests.Response" = requests.post(url, data=json.dumps(payload), headers=headers)
4343
response.raise_for_status()
4444
except requests.exceptions.HTTPError as e:
45-
logger.error("Request for authentication from Okta was unsuccessful. {}".format(str(e)))
45+
_logger.error("Request for authentication from Okta was unsuccessful. {}".format(str(e)))
4646
raise InterfaceError(e)
4747
except requests.exceptions.Timeout as e:
48-
logger.error("A timeout occurred when requesting authentication from Okta")
48+
_logger.error("A timeout occurred when requesting authentication from Okta")
4949
raise InterfaceError(e)
5050
except requests.exceptions.TooManyRedirects as e:
51-
logger.error(
51+
_logger.error(
5252
"A error occurred when requesting authentication from Okta. Verify RedshiftProperties are correct"
5353
)
5454
raise InterfaceError(e)
5555
except requests.exceptions.RequestException as e:
56-
logger.error("A unknown error occurred when requesting authentication from Okta")
56+
_logger.error("A unknown error occurred when requesting authentication from Okta")
5757
raise InterfaceError(e)
5858

5959
# Retrieve and parse the Okta response for session token
@@ -79,18 +79,18 @@ def handle_saml_assertion(self: "OktaCredentialsProvider", okta_session_token: s
7979
response: "requests.Response" = requests.get(url)
8080
response.raise_for_status()
8181
except requests.exceptions.HTTPError as e:
82-
logger.error("Request for SAML assertion from Okta was unsuccessful. {}".format(str(e)))
82+
_logger.error("Request for SAML assertion from Okta was unsuccessful. {}".format(str(e)))
8383
raise InterfaceError(e)
8484
except requests.exceptions.Timeout as e:
85-
logger.error("A timeout occurred when requesting SAML assertion from Okta")
85+
_logger.error("A timeout occurred when requesting SAML assertion from Okta")
8686
raise InterfaceError(e)
8787
except requests.exceptions.TooManyRedirects as e:
88-
logger.error(
88+
_logger.error(
8989
"A error occurred when requesting SAML assertion from Okta. Verify RedshiftProperties are correct"
9090
)
9191
raise InterfaceError(e)
9292
except requests.exceptions.RequestException as e:
93-
logger.error("A unknown error occurred when requesting SAML assertion from Okta")
93+
_logger.error("A unknown error occurred when requesting SAML assertion from Okta")
9494
raise InterfaceError(e)
9595

9696
text: str = response.text
@@ -100,5 +100,5 @@ def handle_saml_assertion(self: "OktaCredentialsProvider", okta_session_token: s
100100
saml_response: str = soup.find("input", {"name": "SAMLResponse"})["value"]
101101
return saml_response
102102
except Exception as e:
103-
logger.error("An error occurred while parsing SAML response: {}".format(str(e)))
103+
_logger.error("An error occurred while parsing SAML response: {}".format(str(e)))
104104
raise InterfaceError(e)

redshift_connector/plugin/ping_credentials_provider.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from redshift_connector.plugin.saml_credentials_provider import SamlCredentialsProvider
77
from redshift_connector.redshift_property import RedshiftProperty
88

9-
logger = logging.getLogger(__name__)
9+
_logger: logging.Logger = logging.getLogger(__name__)
1010

1111

1212
class PingCredentialsProvider(SamlCredentialsProvider):
@@ -35,25 +35,25 @@ def get_saml_assertion(self: "PingCredentialsProvider") -> str:
3535
response: "requests.Response" = requests.get(url)
3636
response.raise_for_status()
3737
except requests.exceptions.HTTPError as e:
38-
logger.error("Request for SAML assertion when refreshing credentials was unsuccessful. {}".format(str(e)))
38+
_logger.error("Request for SAML assertion when refreshing credentials was unsuccessful. {}".format(str(e)))
3939
raise InterfaceError(e)
4040
except requests.exceptions.Timeout as e:
41-
logger.error("A timeout occurred when requesting SAML assertion")
41+
_logger.error("A timeout occurred when requesting SAML assertion")
4242
raise InterfaceError(e)
4343
except requests.exceptions.TooManyRedirects as e:
44-
logger.error(
44+
_logger.error(
4545
"A error occurred when requesting SAML assertion to refresh credentials. "
4646
"Verify RedshiftProperties are correct"
4747
)
4848
raise InterfaceError(e)
4949
except requests.exceptions.RequestException as e:
50-
logger.error("A unknown error occurred when requesting SAML assertion to refresh credentials")
50+
_logger.error("A unknown error occurred when requesting SAML assertion to refresh credentials")
5151
raise InterfaceError(e)
5252

5353
try:
5454
soup = bs4.BeautifulSoup(response.text)
5555
except Exception as e:
56-
logger.error("An error occurred while parsing response: {}".format(str(e)))
56+
_logger.error("An error occurred while parsing response: {}".format(str(e)))
5757
raise InterfaceError(e)
5858

5959
payload: typing.Dict[str, typing.Optional[str]] = {}
@@ -93,22 +93,22 @@ def get_saml_assertion(self: "PingCredentialsProvider") -> str:
9393
response = requests.post(url, data=payload)
9494
response.raise_for_status()
9595
except requests.exceptions.HTTPError as e:
96-
logger.error("Request to refresh credentials was unsuccessful. {}".format(str(e)))
96+
_logger.error("Request to refresh credentials was unsuccessful. {}".format(str(e)))
9797
raise InterfaceError(e)
9898
except requests.exceptions.Timeout as e:
99-
logger.error("A timeout occurred when attempting to refresh credentials")
99+
_logger.error("A timeout occurred when attempting to refresh credentials")
100100
raise InterfaceError(e)
101101
except requests.exceptions.TooManyRedirects as e:
102-
logger.error("A error occurred when refreshing credentials. Verify RedshiftProperties are correct")
102+
_logger.error("A error occurred when refreshing credentials. Verify RedshiftProperties are correct")
103103
raise InterfaceError(e)
104104
except requests.exceptions.RequestException as e:
105-
logger.error("A unknown error occurred when refreshing credentials")
105+
_logger.error("A unknown error occurred when refreshing credentials")
106106
raise InterfaceError(e)
107107

108108
try:
109109
soup = bs4.BeautifulSoup(response.text)
110110
except Exception as e:
111-
logger.error("An error occurred while parsing SAML response: {}".format(str(e)))
111+
_logger.error("An error occurred while parsing SAML response: {}".format(str(e)))
112112
raise InterfaceError(e)
113113

114114
assertion: str = ""

0 commit comments

Comments
 (0)