[orca] Move the code which has nothing to do with dbus out of dbusserver.py



commit 0d4734f4a866fb6fc14a0d4564dc47b5cdc7a868
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue May 8 21:16:54 2012 -0400

    Move the code which has nothing to do with dbus out of dbusserver.py

 src/orca/Makefile.am   |    1 +
 src/orca/dbusserver.py |   89 +++-----------------------------------
 src/orca/logger.py     |  113 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/orca/settings.py   |    4 --
 4 files changed, 120 insertions(+), 87 deletions(-)
---
diff --git a/src/orca/Makefile.am b/src/orca/Makefile.am
index d7f5f25..5eacbde 100644
--- a/src/orca/Makefile.am
+++ b/src/orca/Makefile.am
@@ -35,6 +35,7 @@ orca_python_PYTHON = \
 	label_inference.py \
 	laptop_keyboardmap.py \
 	liveregions.py \
+	logger.py \
 	mouse_review.py \
 	notification_messages.py \
 	orca.py \
diff --git a/src/orca/dbusserver.py b/src/orca/dbusserver.py
index c6fce3c..da119bd 100644
--- a/src/orca/dbusserver.py
+++ b/src/orca/dbusserver.py
@@ -31,12 +31,7 @@ import dbus.mainloop.glib
 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
 
 import debug
-import settings
-
-# Handlers for logging speech and braille output.
-#
-loggingFileHandlers = {}
-loggingStreamHandlers = {}
+import logger
 
 # pylint: disable-msg=R0923
 # Server: Interface not implemented
@@ -49,99 +44,27 @@ class Server(dbus.service.Object):
 
     def __init__(self, object_path, bus_name):
         dbus.service.Object.__init__(self, None, object_path, bus_name)
+        self._logger = logger.Logger()
 
     @dbus.service.method(dbus_interface='org.gnome.Orca.Logging',
                          in_signature='si', out_signature='')
     def setDebug(self, debugFile, debugLevel):
-        """Sets the file to send detailed debug information."""
-        if not settings.enableRemoteLogging:
-            return
-        debug.println(debug.LEVEL_FINEST,
-                      "DBus Logging.setDebug(%s, %d)" \
-                      % (debugFile, debugLevel))
-        if debug.debugFile:
-            debug.debugFile.close()
-            debug.debugFile = None
-        if debugFile and len(debugFile):
-            debug.debugFile = open('%s.debug' % debugFile, 'w', 0)
-        debug.debugLevel = debugLevel
+        self._logger.setDebug(debugFile, debugLevel)
 
     @dbus.service.method(dbus_interface='org.gnome.Orca.Logging',
                          in_signature='s', out_signature='')
     def setLogFile(self, logFile):
-        """Sets the file to send speech and braille logging information."""
-        if not settings.enableRemoteLogging:
-            return
-        import logging
-        debug.println(debug.LEVEL_FINEST,
-                      "DBus Logging.setLogFile(%s)" % logFile)
-        for logger in ['braille', 'speech']:
-            log = logging.getLogger(logger)
-            formatter = logging.Formatter('%(message)s')
-            try:
-                loggingFileHandlers[logger].flush()
-                loggingFileHandlers[logger].close()
-                log.removeHandler(loggingFileHandlers[logger])
-            except:
-                pass
-            if logFile and len(logFile):
-                loggingFileHandlers[logger] = logging.FileHandler(
-                    '%s.%s' % (logFile, logger), 'w')
-                loggingFileHandlers[logger].setFormatter(formatter)
-                log.addHandler(loggingFileHandlers[logger])
-            log.setLevel(logging.INFO)
+        self._logger.setLogFile(logFile)
 
     @dbus.service.method(dbus_interface='org.gnome.Orca.Logging',
                          in_signature='', out_signature='')
     def startRecording(self):
-        """Tells Orca to start logging speech and braille output."""
-        if not settings.enableRemoteLogging:
-            return
-        debug.println(debug.LEVEL_FINEST, "DBus Logging.startRecording")
-        import logging
-        import StringIO
-        for logger in ['braille', 'speech']:
-            log = logging.getLogger(logger)
-            try:
-                [stringIO, handler] = loggingStreamHandlers[logger]
-                handler.close()
-                log.removeHandler(handler)
-                stringIO.close()
-            except:
-                pass
-            formatter = logging.Formatter('%(message)s')
-            stringIO = StringIO.StringIO()
-            handler = logging.StreamHandler(stringIO)
-            handler.setFormatter(formatter)
-            log.addHandler(handler)
-            loggingStreamHandlers[logger] = [stringIO, handler]
-            log.setLevel(logging.INFO)
+        self._logger.startRecording()
 
     @dbus.service.method(dbus_interface='org.gnome.Orca.Logging',
                          in_signature='', out_signature='s')
     def stopRecording(self):
-        """Tells Orca to stop logging speech and braille output and
-        to return whatever was recorded since the last call to
-        startRecording."""
-        if not settings.enableRemoteLogging:
-            return ""
-        debug.println(debug.LEVEL_FINEST, "DBus Logging.stopRecording")
-        import logging
-        import StringIO
-        result = ''
-        for logger in ['braille', 'speech']:
-            log = logging.getLogger(logger)
-            try:
-                [stringIO, handler] = loggingStreamHandlers[logger]
-                handler.flush()
-                handler.close()
-                log.removeHandler(handler)
-                result += stringIO.getvalue()
-                stringIO.close()
-            except:
-                debug.printException(debug.LEVEL_OFF)
-            stringIO = StringIO.StringIO()
-        return result
+        return self._logger.stopRecording()
 
 def init():
     """Sets up the Orca DBus service.  This will only take effect once
diff --git a/src/orca/logger.py b/src/orca/logger.py
new file mode 100644
index 0000000..700b642
--- /dev/null
+++ b/src/orca/logger.py
@@ -0,0 +1,113 @@
+# Orca
+#
+# Copyright 2008 Sun Microsystems Inc.
+# Copyright 2012 Igalia, S.L.
+#
+# Author: Joanmarie Diggs <jdiggs igalia com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., Franklin Street, Fifth Floor,
+# Boston MA  02110-1301 USA.
+
+"""Output logger for regression testing."""
+
+__id__        = "$Id$"
+__version__   = "$Revision$"
+__date__      = "$Date$"
+__copyright__ = "Copyright (c) 2012 Igalia, S.L."
+__license__   = "LGPL"
+
+import logging
+import StringIO
+
+import debug
+
+class Logger:
+
+    def __init__(self, *types):
+        self._types = types or ['braille', 'speech']
+        self._fileHandlers = {}
+        self._streamHandlers = {}
+        self._formatter = logging.Formatter('%(message)s')
+
+    def setDebug(self, debugFile, debugLevel):
+        if debug.debugFile:
+            debug.debugFile.close()
+            debug.debugFile = None
+        if debugFile:
+            debug.debugFile = open('%s.debug' % debugFile, 'w', 0)
+            debug.debugLevel = debugLevel
+
+    def setLogFile(self, logFile):
+        self._closeFileHandlers()
+        self._createFileHandlers(logFile)
+
+    def startRecording(self):
+        self._closeStreamHandlers()
+        self._createStreamHandlers()
+
+    def stopRecording(self):
+        return self._closeStreamHandlers()
+
+    def _createFileHandlers(self, fileName):
+        if not fileName:
+            return
+
+        for logger in self._types:
+            handler = logging.FileHandler('%s.%s' % (fileName, logger), 'w')
+            self._fileHandlers[logger] = handler
+            log = logging.getLogger(logger)
+            self._createHandler(log, handler)
+
+    def _createStreamHandlers(self):
+        for logger in self._types:
+            stringIO = StringIO.StringIO()
+            handler = logging.StreamHandler(stringIO)
+            self._streamHandlers[logger] = [stringIO, handler]
+            log = logging.getLogger(logger)
+            self._createHandler(log, handler)
+
+    def _createHandler(self, log, handler):
+        handler.setFormatter(self._formatter)
+        log.setLevel(logging.INFO)
+        log.addHandler(handler)
+
+    def _closeFileHandlers(self):
+        for logger in self._types:
+            log = logging.getLogger(logger)
+            handler = self._fileHandlers.get(logger)
+            self._closeHandler(log, handler)
+
+    def _closeStreamHandlers(self):
+        result = ''
+        for logger in self._types:
+            log = logging.getLogger(logger)
+            stringIO, handler = self._streamHandlers.get(logger, (None, None))
+            self._closeHandler(log, handler)
+            if stringIO:
+                try:
+                    result += stringIO.getvalue()
+                    stringIO.close()
+                except ValueError:
+                    pass
+
+        return result
+
+    def _closeHandler(self, log, handler):
+        try:
+            handler.flush()
+            handler.close()
+            log.removeHandler(handler)
+        except:
+            pass
diff --git a/src/orca/settings.py b/src/orca/settings.py
index 71a1ed7..66f9e57 100644
--- a/src/orca/settings.py
+++ b/src/orca/settings.py
@@ -289,10 +289,6 @@ if os.getenv("DBUS_SESSION_BUS_ADDRESS"):
 else:
     useDBus = False
 
-# Whether or not recording is enabled via the HTTP server.
-#
-enableRemoteLogging     = False
-
 # If True, enable speech.
 #
 enableSpeech            = True



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]