[Python-checkins] r84789 - in python/branches/py3k: Lib/logging/handlers.py Misc/NEWS

vinay.sajip python-checkins at python.org
Mon Sep 13 22:40:30 CEST 2010


Author: vinay.sajip
Date: Mon Sep 13 22:40:30 2010
New Revision: 84789

Log:
logging: enhanced HTTPHandler

Modified:
   python/branches/py3k/Lib/logging/handlers.py
   python/branches/py3k/Misc/NEWS

Modified: python/branches/py3k/Lib/logging/handlers.py
==============================================================================
--- python/branches/py3k/Lib/logging/handlers.py	(original)
+++ python/branches/py3k/Lib/logging/handlers.py	Mon Sep 13 22:40:30 2010
@@ -977,7 +977,7 @@
     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 @@
         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 @@
         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 @@
                 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:

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Mon Sep 13 22:40:30 2010
@@ -40,6 +40,8 @@
 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).
 


More information about the Python-checkins mailing list