r47012 - tests pass (amazing)

hawkowl-TA+aISz0psMTMxyoc4vAAJOcrHinNvQL0E9HWUfgJXw@public.gmane.org Thu, 17 Mar 2016 09:49:49 -0600 (MDT)
Newsgroups gmane.comp.python.twisted.commits
Message-ID <[email protected]>
Author: hawkowl
Date: Thu Mar 17 09:49:45 2016
New Revision: 47012

Modified:
   branches/tlogger-twistd-8235/twisted/application/app.py
   branches/tlogger-twistd-8235/twisted/scripts/_twistd_unix.py
   branches/tlogger-twistd-8235/twisted/test/test_twistd.py

Log:
tests pass (amazing)

Modified: branches/tlogger-twistd-8235/twisted/application/app.py
==============================================================================
--- branches/tlogger-twistd-8235/twisted/application/app.py	(original)
+++ branches/tlogger-twistd-8235/twisted/application/app.py	Thu Mar 17 09:49:45 2016
@@ -10,16 +10,17 @@
 import getpass
 import traceback
 import signal
+import warnings
 
 from operator import attrgetter
 
-from twisted import copyright, plugin
+from twisted import copyright, plugin, logger
 from twisted.application import service, reactors
 from twisted.internet import defer
 from twisted.persisted import sob
 from twisted.python import runtime, log, usage, failure, util, logfile
 from twisted.logger import (globalLogBeginner, LegacyLogObserverWrapper,
-                            _logFor, ILogObserver)
+                            _logFor, ILogObserver, globalLogPublisher)
 from twisted.python.log import ILogObserver as LegacyILogObserver
 from twisted.python.reflect import qual, namedAny
 
@@ -182,7 +183,9 @@
         if self._observerFactory is not None:
             observer = self._observerFactory()
         else:
-            observer = application.getComponent(LegacyILogObserver, None)
+            observer = application.getComponent(ILogObserver, None)
+            if observer is None:
+                observer = application.getComponent(LegacyILogObserver, None)
 
         if observer is None:
             observer = self._getLogObserver()
@@ -191,6 +194,14 @@
         if ILogObserver.providedBy(self._observer):
             observers = [self._observer]
         else:
+
+            warnings.warn(
+                ("Passing legacy log observers using --logger was deprecated "
+                 "in Twisted 16.1. Please use loggers that provide "
+                 "twisted.logger.ILogObserver instead."),
+                DeprecationWarning,
+                stacklevel=2)
+
             observers = [LegacyLogObserverWrapper(self._observer)]
 
         globalLogBeginner.beginLoggingTo(observers)
@@ -218,16 +229,16 @@
             logFile = sys.stdout
         else:
             logFile = logfile.LogFile.fromFullPath(self._logfilename)
-        return log.FileLogObserver(logFile).emit
+        return logger.textFileLogObserver(logFile)
 
 
     def stop(self):
         """
         Remove all log observers previously set up by L{AppLogger.start}.
         """
-        log.msg("Server Shut Down.")
+        _logFor(self).info("Server Shut Down.")
         if self._observer is not None:
-            log.removeObserver(self._observer)
+            globalLogPublisher.removeObserver(self._observer)
             self._observer = None
 
 

Modified: branches/tlogger-twistd-8235/twisted/scripts/_twistd_unix.py
==============================================================================
--- branches/tlogger-twistd-8235/twisted/scripts/_twistd_unix.py	(original)
+++ branches/tlogger-twistd-8235/twisted/scripts/_twistd_unix.py	Thu Mar 17 09:49:45 2016
@@ -14,7 +14,7 @@
     switchUID, uidFromString, gidFromString, untilConcludes)
 from twisted.application import app, service
 from twisted.internet.interfaces import IReactorDaemonize
-from twisted import copyright
+from twisted import copyright, logger
 from twisted.python.runtime import platformType
 
 
@@ -146,8 +146,6 @@
             from twisted.python import syslog
             return syslog.SyslogObserver(self._syslogPrefix).emit
 
-        from twisted.logger import textFileLogObserver
-
         if self._logfilename == '-':
             if not self._nodaemon:
                 sys.exit('Daemons cannot log to stdout, exiting!')
@@ -169,7 +167,7 @@
                         from twisted.internet import reactor
                         reactor.callFromThread(logFile.rotate)
                     signal.signal(signal.SIGUSR1, rotateLog)
-        return textFileLogObserver(logFile)
+        return logger.textFileLogObserver(logFile)
 
 
 

Modified: branches/tlogger-twistd-8235/twisted/test/test_twistd.py
==============================================================================
--- branches/tlogger-twistd-8235/twisted/test/test_twistd.py	(original)
+++ branches/tlogger-twistd-8235/twisted/test/test_twistd.py	Thu Mar 17 09:49:45 2016
@@ -30,19 +30,21 @@
 from twisted.trial import unittest
 from twisted.test.test_process import MockOS
 
-from twisted import plugin
+from twisted import plugin, logger
 from twisted.application.service import IServiceMaker
 from twisted.application import service, app, reactors
 from twisted.scripts import twistd
 from twisted.python import log
 from twisted.python.compat import NativeStringIO
 from twisted.python.usage import UsageError
-from twisted.python.log import ILogObserver
+from twisted.python.log import ILogObserver as LegacyILogObserver
 from twisted.python.components import Componentized
 from twisted.internet.defer import Deferred
 from twisted.internet.interfaces import IReactorDaemonize
 from twisted.internet.test.modulehelpers import AlternateReactor
 from twisted.python.fakepwd import UserDatabase
+from twisted.logger import globalLogBeginner, globalLogPublisher, ILogObserver
+
 try:
     from twisted.scripts import _twistd_unix
 except ImportError:
@@ -1091,10 +1093,10 @@
 
 
 
-def _patchFileLogObserver(patch):
+def _patchTextFileLogObserver(patch):
     """
-    Patch L{log.FileLogObserver} to record every call and keep a reference to
-    the passed log file for tests.
+    Patch L{logger.textFileLogObserver} to record every call and keep a
+    reference to the passed log file for tests.
 
     @param patch: a callback for patching (usually L{unittest.TestCase.patch}).
 
@@ -1102,13 +1104,13 @@
     @rtype: C{list}
     """
     logFiles = []
-    oldFileLobObserver = log.FileLogObserver
+    oldFileLogObserver = logger.textFileLogObserver
 
-    def FileLogObserver(logFile):
+    def FileLogObserver(logFile, *args, **kwargs):
         logFiles.append(logFile)
-        return oldFileLobObserver(logFile)
+        return oldFileLogObserver(logFile, *args, **kwargs)
 
-    patch(log, 'FileLogObserver', FileLogObserver)
+    patch(logger, 'textFileLogObserver', FileLogObserver)
     return logFiles
 
 
@@ -1147,11 +1149,12 @@
         """
         self.observers = []
 
-        def startLoggingWithObserver(observer):
-            self.observers.append(observer)
-            log.addObserver(observer)
+        def beginLoggingTo(observers):
+            for observer in observers:
+                self.observers.append(observer)
+                globalLogPublisher.addObserver(observer)
 
-        self.patch(log, 'startLoggingWithObserver', startLoggingWithObserver)
+        self.patch(globalLogBeginner, 'beginLoggingTo', beginLoggingTo)
 
 
     def tearDown(self):
@@ -1159,20 +1162,34 @@
         Remove all installed observers.
         """
         for observer in self.observers:
-            log.removeObserver(observer)
+            globalLogPublisher.removeObserver(observer)
+
+
+    def _makeObserver(self):
+
+        @implementer(ILogObserver)
+        class TestObserver(object):
+
+            _logs = []
 
+            def __call__(self, event):
+                self._logs.append(event)
 
-    def _checkObserver(self, logs):
+        return TestObserver()
+
+
+    def _checkObserver(self, observer):
         """
         Ensure that initial C{twistd} logs are written to the given list.
 
         @type logs: C{list}
         @param logs: The list whose C{append} method was specified as the
             initial log observer.
+
         """
-        self.assertEqual(self.observers, [logs.append])
-        self.assertIn("starting up", logs[0]["message"][0])
-        self.assertIn("reactor class", logs[1]["message"][0])
+        self.assertEqual(self.observers, [observer])
+        self.assertIn("starting up", observer._logs[0]["log_format"])
+        self.assertIn("reactor class", observer._logs[1]["log_format"])
 
 
     def test_start(self):
@@ -1181,8 +1198,8 @@
         messages about twistd and the reactor.
         """
         logger = app.AppLogger({})
-        observer = []
-        logger._getLogObserver = lambda: observer.append
+        observer = self._makeObserver()
+        logger._getLogObserver = lambda: observer
         logger.start(Componentized())
         self._checkObserver(observer)
 
@@ -1194,11 +1211,11 @@
         new one.
         """
         application = Componentized()
-        logs = []
-        application.setComponent(ILogObserver, logs.append)
+        observer = self._makeObserver()
+        application.setComponent(ILogObserver, observer)
         logger = app.AppLogger({})
         logger.start(application)
-        self._checkObserver(logs)
+        self._checkObserver(observer)
 
 
     def _setupConfiguredLogger(self, application, extraLogArgs={},
@@ -1217,12 +1234,12 @@
         @rtype: C{list}
         @return: The logs accumulated by the log observer.
         """
-        logs = []
-        logArgs = {"logger": lambda: logs.append}
+        observer = self._makeObserver()
+        logArgs = {"logger": lambda: observer}
         logArgs.update(extraLogArgs)
         logger = appLogger(logArgs)
         logger.start(application)
-        return logs
+        return observer
 
 
     def test_startUsesConfiguredLogObserver(self):
@@ -1284,7 +1301,7 @@
         returns a log observer pointing at C{sys.stdout}.
         """
         logger = app.AppLogger({"logfile": "-"})
-        logFiles = _patchFileLogObserver(self.patch)
+        logFiles = _patchTextFileLogObserver(self.patch)
 
         logger._getLogObserver()
 
@@ -1303,7 +1320,7 @@
         When passing the C{logfile} option, L{app.AppLogger._getLogObserver}
         returns a log observer pointing at the specified path.
         """
-        logFiles = _patchFileLogObserver(self.patch)
+        logFiles = _patchTextFileLogObserver(self.patch)
         filename = self.mktemp()
         logger = app.AppLogger({"logfile": filename})
 
@@ -1326,7 +1343,7 @@
         def remove(observer):
             removed.append(observer)
 
-        self.patch(log, 'removeObserver', remove)
+        self.patch(globalLogPublisher, 'removeObserver', remove)
         logger = app.AppLogger({})
         logger._observer = observer
         logger.stop()
@@ -1367,7 +1384,7 @@
         L{UnixAppLogger._getLogObserver} returns a log observer pointing at
         C{sys.stdout}.
         """
-        logFiles = _patchFileLogObserver(self.patch)
+        logFiles = _patchTextFileLogObserver(self.patch)
 
         logger = UnixAppLogger({"logfile": "-", "nodaemon": True})
         logger._getLogObserver()
@@ -1396,7 +1413,7 @@
         returns a log observer pointing at the specified path, and a signal
         handler rotating the log is installed.
         """
-        logFiles = _patchFileLogObserver(self.patch)
+        logFiles = _patchTextFileLogObserver(self.patch)
         filename = self.mktemp()
         logger = UnixAppLogger({"logfile": filename})
         logger._getLogObserver()
@@ -1441,7 +1458,7 @@
         L{UnixAppLogger._getLogObserver} points at C{twistd.log} in the current
         directory.
         """
-        logFiles = _patchFileLogObserver(self.patch)
+        logFiles = _patchTextFileLogObserver(self.patch)
         logger = UnixAppLogger({"logfile": "", "nodaemon": False})
         logger._getLogObserver()