11import logging
22import re
3- import requests
43import time
54
6- REQ_MSG = "Requested: {}" # get request url
7- RESPONSE_TIME_MSG = "Response received in {} seconds." # requests.elapsed value.
8- RESPONSE_MSG = "HTTP Response: {} ({})" # Brief description, status code
9- MULTIPAGE_MSG = ("The requested data quantity is greater than the "
10- "supplied row limit and will be downloaded over multiple requests." )
5+ import requests
116
7+ REQ_MSG = "Requested: {}" # get request url
8+ RESPONSE_TIME_MSG = "Response received in {} seconds." # requests.elapsed value.
9+ RESPONSE_MSG = "HTTP Response: {} ({})" # Brief description, status code
10+ MULTIPAGE_MSG = (
11+ "The requested data quantity is greater than the "
12+ "supplied row limit and will be downloaded over multiple requests."
13+ )
1214
1315
1416LEVEL_MAP = {
15- ' CRITICAL' : logging .CRITICAL ,
16- ' ERROR' : logging .ERROR ,
17- ' WARNING' : logging .WARNING ,
18- ' INFO' : logging .INFO ,
19- ' DEBUG' : logging .DEBUG ,
17+ " CRITICAL" : logging .CRITICAL ,
18+ " ERROR" : logging .ERROR ,
19+ " WARNING" : logging .WARNING ,
20+ " INFO" : logging .INFO ,
21+ " DEBUG" : logging .DEBUG ,
2022}
2123
2224
2325class OnclibFormatter (logging .Formatter ):
2426 """
2527 Custom formatter that removes prefix for INFO level logs.
2628 """
29+
2730 def format (self , record ):
2831 if record .levelno == logging .INFO :
2932 return record .getMessage ()
3033 return super ().format (record )
3134
3235
33- def setup_logger (logger_name : str = 'onc' ,
34- level : int | str = 'INFO' ) -> logging .Logger :
36+ def setup_logger (logger_name : str = "onc" , level : int | str = "INFO" ) -> logging .Logger :
3537 """
3638 Set up a logger object for displaying verbose messages to console.
3739
38- :param logger_name: The unique logger name to use. Can be shared between modules
39- :param level: The logging level to use. Default is 'INFO'.
40- :return: The configured logging.Logger object.
40+ Parameters
41+ ----------
42+ logger_name : str, optional
43+ The unique logger name to use. Can be shared between modules.
44+ level : int or str, optional
45+ The logging level to use. Default is 'INFO'.
46+
47+ Returns
48+ -------
49+ logging.Logger
50+ The configured logging.Logger object.
4151 """
4252
4353 # Ensure level is a valid logging level integer
@@ -55,8 +65,10 @@ def setup_logger(logger_name: str = 'onc',
5565 console .setLevel (level )
5666
5767 # Set the logging format.
58- dtfmt = '%Y-%m-%dT%H:%M:%S'
59- strfmt = f'%(asctime)s.%(msecs)03dZ | %(name)-12s | %(levelname)-8s | %(message)s'
68+ dtfmt = "%Y-%m-%dT%H:%M:%S"
69+ strfmt = (
70+ "%(asctime)s.%(msecs)03dZ | %(name)-12s | %(levelname)-8s | %(message)s"
71+ )
6072 fmt = OnclibFormatter (strfmt , datefmt = dtfmt )
6173 fmt .converter = time .gmtime
6274
@@ -70,15 +82,21 @@ def setup_logger(logger_name: str = 'onc',
7082 return logger
7183
7284
73-
7485def scrub_token (input : str ) -> str :
7586 """
7687 Replace a token in a query URL or other string with the string 'REDACTED'
7788 so that users don't accidentally commit their tokens to public repositories
7889 if ONC Info/Warnings are too verbose.
7990
80- :param input: An Oceans 3.0 API URL or string with a token query parameter.
81- :return: A scrubbed url.
91+ Parameters
92+ ----------
93+ input : str
94+ An Oceans 3.0 API URL or string with a token query parameter.
95+
96+ Returns
97+ -------
98+ str
99+ A scrubbed url.
82100 """
83101 return re .sub (r"([?&]token=)[a-f0-9-]{36}" , r"\1REDACTED" , input )
84102
@@ -87,9 +105,17 @@ def build_error_message(response: requests.Response, redact_token: bool) -> str:
87105 """
88106 Build an error message from a requests.Response object.
89107
90- :param response: A requests.Response object.
91- :param redact_token: If true, redact tokens before returning an error message.
92- :return: An error message.
108+ Parameters
109+ ----------
110+ response : requests.Response
111+ A requests.Response object.
112+ redact_token : bool
113+ If true, redact tokens before returning an error message.
114+
115+ Returns
116+ -------
117+ str
118+ An error message.
93119 """
94120 payload = response .json ()
95121 message = payload .get ("message" )
@@ -98,15 +124,16 @@ def build_error_message(response: requests.Response, redact_token: bool) -> str:
98124 errors = payload ["errors" ]
99125 error_messages = []
100126 for error in errors :
101- emsg = (f"(API Error Code { error ['errorCode' ]} ) "
102- f"{ error ['errorMessage' ]} for query parameter(s) "
103- f"'{ error ['parameter' ]} '." )
127+ emsg = (
128+ f"(API Error Code { error ['errorCode' ]} ) "
129+ f"{ error ['errorMessage' ]} for query parameter(s) "
130+ f"'{ error ['parameter' ]} '."
131+ )
104132 error_messages .append (emsg )
105- error_message = ' \n ' .join (error_messages )
133+ error_message = " \n " .join (error_messages )
106134 else :
107135 error_message = None
108- msg = ' \n ' .join ([m for m in (message , error_message ) if m is not None ])
109- if redact_token is True and ' token=' in msg :
136+ msg = " \n " .join ([m for m in (message , error_message ) if m is not None ])
137+ if redact_token is True and " token=" in msg :
110138 msg = scrub_token (msg )
111139 return msg
112-
0 commit comments