[CalendarServer-changes] [11236] CalendarServer/trunk/twext/python

source_changes at macosforge.org source_changes at macosforge.org
Wed May 22 16:40:30 PDT 2013


Revision: 11236
          http://trac.calendarserver.org//changeset/11236
Author:   wsanchez at apple.com
Date:     2013-05-22 16:40:30 -0700 (Wed, 22 May 2013)
Log Message:
-----------
Change .err and .msg on Logger to be compatible with twisted.python.log.

Modified Paths:
--------------
    CalendarServer/trunk/twext/python/log.py
    CalendarServer/trunk/twext/python/test/test_log.py

Modified: CalendarServer/trunk/twext/python/log.py
===================================================================
--- CalendarServer/trunk/twext/python/log.py	2013-05-22 22:53:21 UTC (rev 11235)
+++ CalendarServer/trunk/twext/python/log.py	2013-05-22 23:40:30 UTC (rev 11236)
@@ -63,6 +63,7 @@
 import inspect
 import logging
 
+from twisted.python.failure import Failure
 from twisted.python.reflect import safe_str
 from twisted.python.log import msg as twistedLogMessage
 from twisted.python.log import addObserver, removeObserver
@@ -109,7 +110,7 @@
     raise InvalidLogLevelError(level)
 
 #    #
-#    # In case we add log levels that don't map to pythong logging levels:
+#    # In case we add log levels that don't map to python logging levels:
 #    #
 #    for l in logLevels:
 #        print("Trying %s: %s, %s" % (l, l in pythonLogLevelMapping, cmpLogLevels(level, l) <= 0))
@@ -196,7 +197,7 @@
     def __repr__(self):
         return "<%s %r>" % (self.__class__.__name__, self.namespace)
 
-    def emit(self, level, message, **kwargs):
+    def emit(self, level, message=None, **kwargs):
         """
         Called internally to emit log messages at a given log level.
         """
@@ -216,8 +217,17 @@
             kwargs["legacyMessage"] = message
             kwargs["format"] = "%(legacyMessage)s"
 
+        prefix = "[%(namespace)s#%(level)s] "
+
+        if "failure" in kwargs:
+            # Handle unfortunate logic in twisted.log.textFromEventDict()
+            # in which format is ignored if we have a failure and no why.
+            why = kwargs.get("why", None)
+            if not why:
+                why = "Unhandled Error"
+            kwargs["why"] = "%s%s" % (prefix % kwargs, why)
+
         if "format" in kwargs:
-            prefix = "[%(namespace)s#%(level)s] "
             kwargs["format"] = "%s%s" % (prefix, kwargs["format"])
 
         twistedLogMessage(**kwargs)
@@ -244,15 +254,31 @@
         return cmpLogLevels(self.level(), level) <= 0
 
 
-    def msg(self, *message, **kw):
+    def msg(self, *message, **kwargs):
         if message:
             message = " ".join(map(safe_str, message))
         else:
             message = None
-        return self.emit("info", message, **kw)
+        return self.emit("info", message, **kwargs)
 
 
+    def err(self, _stuff=None, _why=None, **kwargs):
+        if _stuff is None:
+            _stuff = Failure()
+        elif isinstance(_stuff, Exception):
+            _stuff = Failure(_stuff)
 
+        # FIXME: We are setting isError=0 below to work around
+        # existing bugs, should be =1.
+
+        if isinstance(_stuff, Failure):
+            self.emit("error", failure=_stuff, why=_why, isError=0, **kwargs)
+        else:
+            # We got called with an invalid _stuff.
+            self.emit("error", repr(_stuff), why=_why, isError=0, **kwargs)
+
+
+
 class LoggingMixIn (object):
     """
     Mix-in class for logging methods.
@@ -321,10 +347,6 @@
 del level
 
 
-# Add some compatibility with twisted's log module
-Logger.err = Logger.error
-
-
 ##
 # Errors
 ##

Modified: CalendarServer/trunk/twext/python/test/test_log.py
===================================================================
--- CalendarServer/trunk/twext/python/test/test_log.py	2013-05-22 22:53:21 UTC (rev 11235)
+++ CalendarServer/trunk/twext/python/test/test_log.py	2013-05-22 23:40:30 UTC (rev 11236)
@@ -108,9 +108,13 @@
             if log.willLogAtLevel(level):
                 self.assertEquals(log.eventDict["level"], level)
                 self.assertEquals(log.eventDict["logLevel"], pythonLogLevelForLevel(level))
+                self.assertEquals(log.eventDict["junk"], message)
+
                 # FIXME: this checks the end of message because we do formatting in emit()
-                self.assertEquals(log.eventDict["message"][0][-len(message):], message)
-                self.assertEquals(log.eventDict["junk"], message)
+                self.assertEquals(
+                    twistedLogging.textFromEventDict(log.eventDict)[-len(message):],
+                    message
+                )
             else:
                 self.assertFalse(hasattr(log, "eventDict"))
 
@@ -136,9 +140,13 @@
             if object.logger.willLogAtLevel(level):
                 self.assertEquals(object.logger.eventDict["level"], level)
                 self.assertEquals(object.logger.eventDict["logLevel"], pythonLogLevelForLevel(level))
+                self.assertEquals(object.logger.eventDict["junk"], message)
+
                 # FIXME: this checks the end of message because we do formatting in emit()
-                self.assertEquals(object.logger.eventDict["message"][0][-len(message):], message)
-                self.assertEquals(object.logger.eventDict["junk"], message)
+                self.assertEquals(
+                    twistedLogging.textFromEventDict(object.logger.eventDict)[-len(message):],
+                    message
+                )
             else:
                 self.assertFalse(hasattr(object.logger, "eventDict"))
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130522/98a8e619/attachment-0001.html>


More information about the calendarserver-changes mailing list