logging: enhanced HTTPHandler

This commit is contained in:
Vinay Sajip 2010-09-13 20:40:30 +00:00
parent 1b5646ac56
commit af9d10aa30
2 changed files with 16 additions and 4 deletions

View File

@ -977,7 +977,7 @@ class HTTPHandler(logging.Handler):
A class which sends records to a Web server, using either GET or
POST semantics.
"""
def __init__(self, host, url, method="GET"):
def __init__(self, host, url, method="GET", secure=False, credentials=None):
"""
Initialize the instance with the host, the request URL, and the method
("GET" or "POST")
@ -989,12 +989,14 @@ class HTTPHandler(logging.Handler):
self.host = host
self.url = url
self.method = method
self.secure = secure
self.credentials = credentials
def mapLogRecord(self, record):
"""
Default implementation of mapping the log record into a dict
that is sent as the CGI data. Overwrite in your class.
Contributed by Franz Glasner.
Contributed by Franz Glasner.
"""
return record.__dict__
@ -1007,7 +1009,10 @@ class HTTPHandler(logging.Handler):
try:
import http.client, urllib.parse
host = self.host
h = http.client.HTTP(host)
if self.secure:
h = http.client.HTTPSConnection(host)
else:
h = http.client.HTTPConnection(host)
url = self.url
data = urllib.parse.urlencode(self.mapLogRecord(record))
if self.method == "GET":
@ -1027,8 +1032,13 @@ class HTTPHandler(logging.Handler):
h.putheader("Content-type",
"application/x-www-form-urlencoded")
h.putheader("Content-length", str(len(data)))
if self.credentials:
import base64
s = ('u%s:%s' % self.credentials).encode('utf-8')
s = 'Basic ' + base64.b64encode(s).strip()
h.putheader('Authorization', s)
h.endheaders(data if self.method == "POST" else None)
h.getreply() #can't do anything with the result
h.getresponse() #can't do anything with the result
except (KeyboardInterrupt, SystemExit):
raise
except:

View File

@ -40,6 +40,8 @@ Core and Builtins
Library
-------
- logging: Enhanced HTTPHandler with secure and credentials initializers.
- Issue #767645: Set os.path.supports_unicode_filenames to True on Mac OS X
(macpath module).