LFRequest.py: converting if(debug):print() to self.logger.debug() statements

This change hooks into the global python logging instance and exercises level based logging
without more advanced logic like "digest/json/http/gui" as documented elsewhere. Need to
establish the correctness of this usage before moving forward.

Signed-off-by: Jed Reynolds <jed@bitratchet.com>
This commit is contained in:
Jed Reynolds
2021-11-03 19:53:19 -07:00
parent 2f7baf2987
commit 8a0b5c22f0

View File

@@ -3,9 +3,10 @@
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Class holds default settings for json requests - # Class holds default settings for json requests -
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
import logging
import sys import sys
import os import os
import pprint from pprint import pprint, pformat, PrettyPrinter
import urllib import urllib
from urllib import request from urllib import request
import json import json
@@ -17,7 +18,7 @@ if sys.version_info[0] != 3:
sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../../"))) sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../../")))
debug_printer = pprint.PrettyPrinter(indent=2) debug_printer = PrettyPrinter(indent=2)
class LFRequest: class LFRequest:
Default_Base_URL = "http://localhost:8080" Default_Base_URL = "http://localhost:8080"
@@ -26,6 +27,7 @@ class LFRequest:
post_data = No_Data post_data = No_Data
default_headers = { 'Accept': 'application/json'} default_headers = { 'Accept': 'application/json'}
proxies = None proxies = None
logger = logging.getLogger(__name__)
def __init__(self, url=None, def __init__(self, url=None,
uri=None, uri=None,
@@ -61,7 +63,7 @@ class LFRequest:
# pprint.pprint(self.proxies) # pprint.pprint(self.proxies)
if not url.startswith("http://") and not url.startswith("https://"): if not url.startswith("http://") and not url.startswith("https://"):
print("No http:// or https:// found, prepending http:// to "+url) self.logger.warning("No http:// or https:// found, prepending http:// to "+url)
url = "http://" + url url = "http://" + url
if uri is not None: if uri is not None:
if not url.endswith('/') and not uri.startswith('/'): if not url.endswith('/') and not uri.startswith('/'):
@@ -83,8 +85,7 @@ class LFRequest:
self.requested_url = self.requested_url.replace('#', '%23') self.requested_url = self.requested_url.replace('#', '%23')
if (self.requested_url.find(' ') >= 1): if (self.requested_url.find(' ') >= 1):
self.requested_url = self.requested_url.replace(' ', '+') self.requested_url = self.requested_url.replace(' ', '+')
if self.debug: self.logger.debug("new LFRequest[%s]" % self.requested_url )
print("new LFRequest[%s]" % self.requested_url )
# request first url on stack # request first url on stack
def formPost(self, show_error=True, debug=False, die_on_error_=False): def formPost(self, show_error=True, debug=False, die_on_error_=False):
@@ -104,19 +105,17 @@ class LFRequest:
request.install_opener(opener) request.install_opener(opener)
if (debug): self.logger.debug("formPost: url: "+self.requested_url)
print("formPost: url: "+self.requested_url)
if ((self.post_data != None) and (self.post_data is not self.No_Data)): if ((self.post_data != None) and (self.post_data is not self.No_Data)):
urlenc_data = urllib.parse.urlencode(self.post_data).encode("utf-8") urlenc_data = urllib.parse.urlencode(self.post_data).encode("utf-8")
if (debug): self.logger.debug("formPost: data looks like:" + str(urlenc_data))
print("formPost: data looks like:" + str(urlenc_data)) self.logger.debug("formPost: url: "+self.requested_url)
print("formPost: url: "+self.requested_url)
myrequest = request.Request(url=self.requested_url, myrequest = request.Request(url=self.requested_url,
data=urlenc_data, data=urlenc_data,
headers=self.default_headers) headers=self.default_headers)
else: else:
myrequest = request.Request(url=self.requested_url, headers=self.default_headers) myrequest = request.Request(url=self.requested_url, headers=self.default_headers)
print("No data for this formPost?") self.logger.error("No data for this formPost?")
myrequest.headers['Content-type'] = 'application/x-www-form-urlencoded' myrequest.headers['Content-type'] = 'application/x-www-form-urlencoded'
@@ -166,7 +165,7 @@ class LFRequest:
headers=self.default_headers) headers=self.default_headers)
else: else:
myrequest = request.Request(url=self.requested_url, headers=self.default_headers) myrequest = request.Request(url=self.requested_url, headers=self.default_headers)
print("No data for this jsonPost?") self.logger.error("No data for this jsonPost?")
myrequest.headers['Content-type'] = 'application/json' myrequest.headers['Content-type'] = 'application/json'
@@ -176,22 +175,22 @@ class LFRequest:
resp = urllib.request.urlopen(myrequest) resp = urllib.request.urlopen(myrequest)
resp_data = resp.read().decode('utf-8') resp_data = resp.read().decode('utf-8')
if (debug and die_on_error_): if (debug and die_on_error_):
print("----- LFRequest::json_post:128 debug: --------------------------------------------") self.logger.debug("----- LFRequest::json_post:128 debug: --------------------------------------------")
print("URL: %s :%d "% (self.requested_url, resp.status)) self.logger.debug("URL: %s :%d "% (self.requested_url, resp.status))
if resp.status != 200: if resp.status != 200:
debug_printer.pprint(resp.getheaders()) self.logger.debug(pformat(resp.getheaders()))
print("----- resp_data:128 -------------------------------------------------") self.logger.debug("----- resp_data:128 -------------------------------------------------")
print(resp_data) self.logger.debug(resp_data)
print("-------------------------------------------------") self.logger.debug("-------------------------------------------------")
responses.append(resp) responses.append(resp)
if response_json_list_ is not None: if response_json_list_ is not None:
if type(response_json_list_) is not list: if type(response_json_list_) is not list:
raise ValueError("reponse_json_list_ needs to be type list") raise ValueError("reponse_json_list_ needs to be type list")
j = json.loads(resp_data) j = json.loads(resp_data)
if debug: if debug:
print("----- LFRequest::json_post:140 debug: --------------------------------------------") self.logger.debug("----- LFRequest::json_post:140 debug: --------------------------------------------")
debug_printer.pprint(j) self.logger.debug(pformat(j))
print("-------------------------------------------------") self.logger.debug("-------------------------------------------------")
response_json_list_.append(j) response_json_list_.append(j)
return responses[0] return responses[0]
@@ -231,7 +230,7 @@ class LFRequest:
if self.die_on_error == True: if self.die_on_error == True:
die_on_error_ = True die_on_error_ = True
if debug: if debug:
print("LFUtils.get: url: "+self.requested_url) self.logger.debug("LFUtils.get: url: "+self.requested_url)
# https://stackoverflow.com/a/59635684/11014343 # https://stackoverflow.com/a/59635684/11014343
if (self.proxies is not None) and (len(self.proxies) > 0): if (self.proxies is not None) and (len(self.proxies) > 0):
@@ -279,8 +278,7 @@ class LFRequest:
self.print_errors() self.print_errors()
return None return None
if responses[0] == None: if responses[0] == None:
if debug_: self.logger.debug("No response from "+self.requested_url)
print("No response from "+self.requested_url)
return None return None
json_data = json.loads(responses[0].read().decode('utf-8')) json_data = json.loads(responses[0].read().decode('utf-8'))
return json_data return json_data
@@ -301,10 +299,10 @@ class LFRequest:
def print_errors(self): def print_errors(self):
if not self.has_errors: if not self.has_errors:
print("---------- no errors ----------") self.logger.debug("---------- no errors ----------")
return return
for err in self.error_list: for err in self.error_list:
print("error: %s" % err) self.logger.error("error: %s" % err)
def plain_get(url_=None, debug_=False, die_on_error_=False, proxies_=None): def plain_get(url_=None, debug_=False, die_on_error_=False, proxies_=None):
""" """
@@ -345,16 +343,16 @@ def plain_get(url_=None, debug_=False, die_on_error_=False, proxies_=None):
def print_diagnostics(url_=None, request_=None, responses_=None, error_=None, error_list_=None, debug_=False): def print_diagnostics(url_=None, request_=None, responses_=None, error_=None, error_list_=None, debug_=False):
if debug_: logger = logging.getLogger(__name__)
print("LFRequest::print_diagnostics: error_.__class__: %s"%error_.__class__) #logger.error("LFRequest::print_diagnostics: error_.__class__: %s"%error_.__class__)
debug_printer.pprint(error_) #logger.error(pformat(error_))
if url_ is None: if url_ is None:
print("WARNING LFRequest::print_diagnostics: url_ is None") logger.warning("WARNING LFRequest::print_diagnostics: url_ is None")
if request_ is None: if request_ is None:
print("WARNING LFRequest::print_diagnostics: request_ is None") logger.warning("WARNING LFRequest::print_diagnostics: request_ is None")
if error_ is None: if error_ is None:
print("WARNING LFRequest::print_diagnostics: error_ is None") logger.warning("WARNING LFRequest::print_diagnostics: error_ is None")
method = 'NA' method = 'NA'
if (hasattr(request_, 'method')): if (hasattr(request_, 'method')):
@@ -380,48 +378,46 @@ def print_diagnostics(url_=None, request_=None, responses_=None, error_=None, er
if headername.startswith("X-Error-"): if headername.startswith("X-Error-"):
xerrors.append("%s: %s" % (headername, err_headers.get(headername))) xerrors.append("%s: %s" % (headername, err_headers.get(headername)))
if len(xerrors) > 0: if len(xerrors) > 0:
print(" = = LANforge Error Messages = =") logger.error(" = = LANforge Error Messages = =")
print(" = = URL: %s" % err_full_url) logger.error(" = = URL: %s" % err_full_url)
for xerr in xerrors: for xerr in xerrors:
print(xerr) logger.error(xerr)
if (error_list_ is not None) and isinstance(error_list_, list): if (error_list_ is not None) and isinstance(error_list_, list):
error_list_.append(xerr) error_list_.append(xerr)
print(" = = = = = = = = = = = = = = = =") logger.error(" = = = = = = = = = = = = = = = =")
if (error_.__class__ is urllib.error.HTTPError): if (error_.__class__ is urllib.error.HTTPError):
if debug_: logger.debug("----- LFRequest: HTTPError: --------------------------------------------")
print("----- LFRequest: HTTPError: --------------------------------------------") logger.debug("%s <%s> HTTP %s: %s" % (method, err_full_url, err_code, err_reason))
print("%s <%s> HTTP %s: %s" % (method, err_full_url, err_code, err_reason))
if err_code == 404: if err_code == 404:
if (error_list_ is not None) and isinstance(error_list_, list): if (error_list_ is not None) and isinstance(error_list_, list):
error_list_.append("[%s HTTP %s] <%s> : %s" % (method, err_code, err_full_url, err_reason)) error_list_.append("[%s HTTP %s] <%s> : %s" % (method, err_code, err_full_url, err_reason))
else: else:
if debug_: logger.debug(" Content-type:[%s] Accept[%s]" % (request_.get_header('Content-type'), request_.get_header('Accept')))
print(" Content-type:[%s] Accept[%s]" % (request_.get_header('Content-type'), request_.get_header('Accept')))
if hasattr(request_, "data") and (request_.data is not None): if hasattr(request_, "data") and (request_.data is not None):
print(" Data:") logger.debug(" Data:")
debug_printer.pprint(request_.data) logger.debug(debug_printer.pformat(request_.data))
elif debug_: elif debug_:
print(" <no request data>") logger.debug(" <no request data>")
if debug_ and (len(err_headers) > 0): if len(err_headers) > 0:
# the HTTPError is of type HTTPMessage a subclass of email.message # the HTTPError is of type HTTPMessage a subclass of email.message
print(" Response Headers: ") logger.debug(" Response Headers: ")
for headername in sorted(err_headers.keys()): for headername in sorted(err_headers.keys()):
print(" %s: %s" % (headername, err_headers.get(headername))) logger.debug(" %s: %s" % (headername, err_headers.get(headername)))
if len(responses_) > 0: if len(responses_) > 0:
print("----- Response: --------------------------------------------------------") logger.debug("----- Response: --------------------------------------------------------")
debug_printer.pprint(responses_[0].reason) logger.debug(debug_printer.pformat(responses_[0].reason))
if debug_:
print("------------------------------------------------------------------------") logger.debug("------------------------------------------------------------------------")
return return
if (error_.__class__ is urllib.error.URLError): if (error_.__class__ is urllib.error.URLError):
print("----- LFRequest: URLError: ---------------------------------------------") logger.error("----- LFRequest: URLError: ---------------------------------------------")
print("%s <%s> HTTP %s: %s" % (method, err_full_url, err_code, err_reason)) logger.error("%s <%s> HTTP %s: %s" % (method, err_full_url, err_code, err_reason))
print("------------------------------------------------------------------------") logger.error("------------------------------------------------------------------------")
# ~LFRequest # ~LFRequest