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

source_changes at macosforge.org source_changes at macosforge.org
Mon Jun 10 14:29:13 PDT 2013


Revision: 11326
          http://trac.calendarserver.org//changeset/11326
Author:   wsanchez at apple.com
Date:     2013-06-10 14:29:13 -0700 (Mon, 10 Jun 2013)
Log Message:
-----------
log.emit() now takes a format, instead of a message.

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-06-07 16:43:52 UTC (rev 11325)
+++ CalendarServer/trunk/twext/python/log.py	2013-06-10 21:29:13 UTC (rev 11326)
@@ -50,6 +50,7 @@
 # TODO List:
 #
 # * Replace message argument with format argument
+# * Filter in observers, not emit()
 #
 
 __all__ = [
@@ -244,19 +245,21 @@
         return "<%s %r>" % (self.__class__.__name__, self.namespace)
 
 
-    def emit(self, level, message=None, **kwargs):
+    def emit(self, level, format=None, **kwargs):
         """
         Emit a log message to all log observers at the given level.
 
         @param level: a L{LogLevel}
 
-        @param message: a message
+        @param format: a message format using PEP3101 formatting.  All
+            variables in C{kwargs} are available.
 
         @param kwargs: additional keyword parameters to include with the
             message.
         """
         if level not in LogLevel.iterconstants():
-            raise InvalidLogLevelError(level)
+            self.failure(Failure(InvalidLogLevelError(level)))
+            level = LogLevel.error
 
         # FIXME: Filtering should be done by the log observer(s)
         if not self.willLogAtLevel(level):
@@ -274,10 +277,6 @@
         if level in pythonLogLevelMapping:
             kwargs["logLevel"] = pythonLogLevelMapping[level]
 
-        if message:
-            kwargs["legacyMessage"] = message
-            kwargs["format"] = "%(legacyMessage)s"
-
         prefix = "[%(namespace)s#%(levelName)s] "
 
         if "failure" in kwargs:
@@ -288,9 +287,21 @@
                 why = "Unhandled Error"
             kwargs["why"] = "%s%s" % (prefix % kwargs, why)
 
-        if "format" in kwargs:
-            kwargs["format"] = "%s%s" % (prefix, kwargs["format"])
+        if format:
+            kwargs["log_format"] = format
 
+            #
+            # Create an object that implements __str__() in order to
+            # defer the work of formatting until it's needed by a
+            # legacy log observer.
+            #
+            class LegacyFormatStub(object):
+                def __str__(self):
+                    return format.format(**kwargs)
+
+            kwargs["format"] = prefix + "%(log_legacy)s"
+            kwargs["log_legacy"] = LegacyFormatStub()
+
         twistedLogMessage(**kwargs)
 
 
@@ -390,8 +401,8 @@
     #
     # Attach methods to Logger
     #
-    def log_emit(self, message=None, **kwargs):
-        self.emit(level, message, **kwargs)
+    def log_emit(self, format=None, **kwargs):
+        self.emit(level, format, **kwargs)
 
     def will_emit(self):
         return self.willLogAtLevel(level)

Modified: CalendarServer/trunk/twext/python/test/test_log.py
===================================================================
--- CalendarServer/trunk/twext/python/test/test_log.py	2013-06-07 16:43:52 UTC (rev 11325)
+++ CalendarServer/trunk/twext/python/test/test_log.py	2013-06-10 21:29:13 UTC (rev 11326)
@@ -72,7 +72,7 @@
 
 
     def __str__(self):
-        return "<LogComposedObject %s>" % (self.state,)
+        return "<LogComposedObject {state}>".format(state=self.state)
 
 
 
@@ -126,7 +126,7 @@
         """
         obj = LogComposedObject("hello")
         log = obj.log
-        log.error(format="Hello. %(source)s")
+        log.error("Hello. {source}")
         stuff = twistedLogging.textFromEventDict(log.eventDict)
         self.assertIn("Hello. <LogComposedObject hello>", stuff)
 
@@ -137,7 +137,7 @@
         Logger.
         """
         for level in LogLevel.iterconstants():
-            message = "This is a %s message" % (level.name,)
+            message = "This is a {level} message".format(level=level.name)
 
             log = TestLogger()
             method = getattr(log, level.name)
@@ -306,6 +306,18 @@
                 self.assertFalse(log.willLogAtLevel(level))
 
 
+    def test_logInvalidLogLevel(self):
+        """
+        Test passing in a bogus log level to C{emit()}.
+        """
+        log = TestLogger()
+
+        log.emit("*bogus*")
+
+        errors = self.flushLoggedErrors(InvalidLogLevelError)
+        self.assertEquals(len(errors), 1)
+
+
     def test_legacy_msg(self):
         """
         Test LegacyLogger's log.msg()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130610/cbbdade6/attachment.html>


More information about the calendarserver-changes mailing list