[orca] Python 3 migration - filter, map, and dict



commit 25476fc7c05a9b2692915053120536d57ed18deb
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue May 1 01:00:18 2012 -0400

    Python 3 migration - filter, map, and dict

 src/orca/acss.py                                   |    4 +-
 src/orca/app_prefs.py                              |    2 +-
 src/orca/backends/json_backend.py                  |    6 ++--
 src/orca/debug.py                                  |    8 +++---
 src/orca/event_manager.py                          |   14 +++++-----
 src/orca/formatting.py                             |    2 +-
 src/orca/generator.py                              |   13 +++-------
 src/orca/input_event.py                            |    2 +-
 src/orca/keybindings.py                            |    4 +-
 src/orca/label_inference.py                        |   20 ++++++++--------
 src/orca/liveregions.py                            |   10 ++++----
 src/orca/orca.py                                   |    8 +++---
 src/orca/orca_gui_prefs.py                         |    8 +++---
 src/orca/script.py                                 |    4 +-
 src/orca/script_manager.py                         |   16 ++++++------
 src/orca/script_utilities.py                       |   24 +++++++++----------
 src/orca/scripts/apps/soffice/script_utilities.py  |    2 +-
 src/orca/scripts/default.py                        |   16 ++++++------
 src/orca/scripts/toolkits/Gecko/bookmarks.py       |    6 ++--
 .../scripts/toolkits/Gecko/braille_generator.py    |    2 +-
 src/orca/scripts/toolkits/Gecko/script.py          |    4 +-
 .../scripts/toolkits/Gecko/speech_generator.py     |    2 +-
 src/orca/scripts/toolkits/WebKitGtk/script.py      |    6 ++--
 .../scripts/toolkits/WebKitGtk/script_utilities.py |    4 +-
 src/orca/settings_manager.py                       |   18 +++++++-------
 src/orca/speech.py                                 |    2 +-
 src/orca/speechdispatcherfactory.py                |    4 +-
 src/orca/structural_navigation.py                  |    4 +-
 src/orca/text_attribute_names.py                   |    2 +-
 29 files changed, 105 insertions(+), 112 deletions(-)
---
diff --git a/src/orca/acss.py b/src/orca/acss.py
index 4f27731..fafd7ba 100644
--- a/src/orca/acss.py
+++ b/src/orca/acss.py
@@ -73,7 +73,7 @@ class ACSS(dict):
                     #
                     if k == ACSS.FAMILY:
                         self[k] = {}
-                        for j in props[k].keys():
+                        for j in list(props[k].keys()):
                             self[k][j] = props[k][j]
                     else:
                         self[k] = props[k]
@@ -94,7 +94,7 @@ class ACSS(dict):
 
     def name(self):
         _name = 'acss-'
-        names = self.keys()
+        names = list(self.keys())
         if names:
             names.sort()
             for  k in names:
diff --git a/src/orca/app_prefs.py b/src/orca/app_prefs.py
index 7c7c328..71aa318 100644
--- a/src/orca/app_prefs.py
+++ b/src/orca/app_prefs.py
@@ -313,7 +313,7 @@ class OrcaPrefs:
             # settings manager.
             voiceDict = voices[voice]
             newDict = {}
-            for key, value in voiceDict.items():
+            for key, value in list(voiceDict.items()):
                 newDict[str(key)] = value
             voicesStr += "'%s' : orca.acss.ACSS(" % voice
             voicesStr += pprint.pformat(newDict) + "),\n"
diff --git a/src/orca/backends/json_backend.py b/src/orca/backends/json_backend.py
index b792623..7d7bd3f 100644
--- a/src/orca/backends/json_backend.py
+++ b/src/orca/backends/json_backend.py
@@ -99,9 +99,9 @@ class Backend:
         self._getSettings()
         generalSettings = self.general.copy()
         profileSettings = self.profiles[profile].copy()
-        for key, value in profileSettings.items():
+        for key, value in list(profileSettings.items()):
             if key == 'voices':
-                for voiceType, voiceDef in value.items():
+                for voiceType, voiceDef in list(value.items()):
                     value[voiceType] = acss.ACSS(voiceDef)
             if key not in settings.excludeKeys:
                 generalSettings[key] = value
@@ -162,7 +162,7 @@ class Backend:
         self._getSettings()
         profiles = []
 
-        for profileName in self.profiles.keys():
+        for profileName in list(self.profiles.keys()):
             profileDict = self.profiles[profileName].copy()
             profiles.append(profileDict.get('profile'))
 
diff --git a/src/orca/debug.py b/src/orca/debug.py
index 7c44b59..49eaa00 100644
--- a/src/orca/debug.py
+++ b/src/orca/debug.py
@@ -371,7 +371,7 @@ def _shouldTraceIt():
         return False
 
     if TRACE_EVENTS and \
-       not filter(lambda x: x, map(objEvent.type.startswith, TRACE_EVENTS)):
+       not [x for x in map(objEvent.type.startswith, TRACE_EVENTS) if x]:
         return False
 
     return True
@@ -407,12 +407,12 @@ def traceit(frame, event, arg):
 
     if event == 'call':
         argvals = inspect.getargvalues(frame)
-        keys = filter(lambda x: x != 'self', argvals[0])
+        keys = [x for x in argvals[0] if x != 'self']
         try:
-            values = map(argvals[3].get, keys)
+            values = list(map(argvals[3].get, keys))
         except TypeError:
             if len(keys) == 1 and isinstance(keys[0], list):
-                values = map(argvals[3].get, keys[0])
+                values = list(map(argvals[3].get, keys[0]))
             else:
                 return traceit
         for i, key in enumerate(keys):
diff --git a/src/orca/event_manager.py b/src/orca/event_manager.py
index 01ba50d..7ad7b7b 100644
--- a/src/orca/event_manager.py
+++ b/src/orca/event_manager.py
@@ -67,7 +67,7 @@ class EventManager:
 
         # Tell BrlTTY which commands we care about.
         #
-        braille.setupKeyRanges(orca_state.activeScript.brailleBindings.keys())
+        braille.setupKeyRanges(list(orca_state.activeScript.brailleBindings.keys()))
 
         self._registerListener("window:activate")
         self._registerListener("window:deactivate")
@@ -79,7 +79,7 @@ class EventManager:
         """Called when this event manager is deactivated."""
 
         debug.println(debug.LEVEL_FINEST, 'INFO: Dectivating event manager')
-        for eventType in self._scriptListenerCounts.keys():
+        for eventType in list(self._scriptListenerCounts.keys()):
             self.registry.deregisterEventListener(self._enqueue, eventType)
         self._scriptListenerCounts = {}
         debug.println(debug.LEVEL_FINEST, 'INFO: Event manager deactivated')
@@ -93,7 +93,7 @@ class EventManager:
         ignoredList = ['object:state-changed:defunct',
                        'object:property-change:accessible-parent']
         ignoredList.extend(settings.ignoredEventsList)
-        if filter(event.type.startswith, ignoredList):
+        if list(filter(event.type.startswith, ignoredList)):
             return True
 
         # This should ultimately be changed as there are valid reasons
@@ -322,7 +322,7 @@ class EventManager:
                       'INFO: Event manager registering listeners for: %s' \
                        % script)
 
-        for eventType in script.listeners.keys():
+        for eventType in list(script.listeners.keys()):
             self._registerListener(eventType)
 
     def deregisterScriptListeners(self, script):
@@ -337,19 +337,19 @@ class EventManager:
                       'INFO: Event manager deregistering listeners for: %s' \
                        % script)
 
-        for eventType in script.listeners.keys():
+        for eventType in list(script.listeners.keys()):
             self._deregisterListener(eventType)
 
     def registerModuleListeners(self, listeners):
         """Register the listeners on behalf of the caller."""
 
-        for eventType, function in listeners.items():
+        for eventType, function in list(listeners.items()):
             self.registry.registerEventListener(function, eventType)
 
     def deregisterModuleListeners(self, listeners):
         """Deegister the listeners on behalf of the caller."""
 
-        for eventType, function in listeners.items():
+        for eventType, function in list(listeners.items()):
             self.registry.deregisterEventListener(function, eventType)
 
     def registerKeystrokeListener(self, function, mask=None, kind=None):
diff --git a/src/orca/formatting.py b/src/orca/formatting.py
index 639cf29..ce7d650 100644
--- a/src/orca/formatting.py
+++ b/src/orca/formatting.py
@@ -616,7 +616,7 @@ class Formatting(dict):
         self.update(copy.deepcopy(formatting))
 
     def update(self, newDict):
-        for key, val in newDict.iteritems():
+        for key, val in newDict.items():
             if key in self:
                 if isinstance(self[key], dict) and isinstance(val, dict):
                     self[key].update(val)
diff --git a/src/orca/generator.py b/src/orca/generator.py
index bb2641e..ccdcd99 100644
--- a/src/orca/generator.py
+++ b/src/orca/generator.py
@@ -72,10 +72,7 @@ class Generator:
         self._script = script
         self._methodsDict = {}
         for method in \
-            filter(lambda z: isinstance(z, collections.Callable),
-                   map(lambda y: getattr(self, y).__get__(self, self.__class__),
-                       filter(lambda x: x.startswith(METHOD_PREFIX),
-                                        dir(self)))):
+            [z for z in [getattr(self, y).__get__(self, self.__class__) for y in [x for x in dir(self) if x.startswith(METHOD_PREFIX)]] if isinstance(z, collections.Callable)]:
             name = method.__name__[len(METHOD_PREFIX):]
             name = name[0].lower() + name[1:]
             self._methodsDict[name] = method
@@ -98,7 +95,7 @@ class Generator:
         # for the results of all the legal method names.
         #
         globalsDict = {}
-        for key in self._methodsDict.keys():
+        for key in list(self._methodsDict.keys()):
             globalsDict[key] = []
         self._addGlobals(globalsDict)
 
@@ -331,10 +328,8 @@ class Generator:
         the assumption being that the user was able to see the text prior
         to giving the widget focus.
         """
-        result = filter(lambda x:
-                        x.startswith('placeholder-text:'),
-                        obj.getAttributes())
-        return map(lambda x: x.replace('placeholder-text:', ''), result)
+        result = [x for x in obj.getAttributes() if x.startswith('placeholder-text:')]
+        return [x.replace('placeholder-text:', '') for x in result]
 
     def _generateLabelAndName(self, obj, **args):
         """Returns the label and the name as an array of strings for speech
diff --git a/src/orca/input_event.py b/src/orca/input_event.py
index 8fdfb19..a4a92e0 100644
--- a/src/orca/input_event.py
+++ b/src/orca/input_event.py
@@ -269,7 +269,7 @@ class KeyboardEvent(InputEvent):
 
         orcaMods = settings.orcaModifierKeys
         try:
-            orcaMods = map(lambda x: x.encode('UTF-8'), orcaMods)
+            orcaMods = [x.encode('UTF-8') for x in orcaMods]
         except (UnicodeDecodeError, UnicodeEncodeError):
             pass
 
diff --git a/src/orca/keybindings.py b/src/orca/keybindings.py
index 49d09ac..de2deff 100644
--- a/src/orca/keybindings.py
+++ b/src/orca/keybindings.py
@@ -329,7 +329,7 @@ class KeyBindings:
           filtered out (default: False)
         """
 
-        bound = filter(lambda kb: kb.keysymstring, self.keyBindings)
+        bound = [kb for kb in self.keyBindings if kb.keysymstring]
         if uniqueOnly:
             handlers = [kb.handler.description for kb in bound]
             bound = [bound[i] for i in map(handlers.index, set(handlers))]
@@ -339,7 +339,7 @@ class KeyBindings:
     def getBindingsForHandler(self, handler):
         """Returns the KeyBinding instances associated with handler."""
 
-        return filter(lambda kb: kb.handler == handler, self.keyBindings)
+        return [kb for kb in self.keyBindings if kb.handler == handler]
 
     def getInputHandler(self, keyboardEvent):
         """Returns the input handler of the key binding that matches the
diff --git a/src/orca/label_inference.py b/src/orca/label_inference.py
index 4d65e56..4d61b7d 100644
--- a/src/orca/label_inference.py
+++ b/src/orca/label_inference.py
@@ -137,7 +137,7 @@ class LabelInference:
             debug.println(debug.LEVEL_FINE, 'Dead Accessible in %s' % obj)
             return False
 
-        children = filter(lambda x: x.getRole() != pyatspi.ROLE_LINK, children)
+        children = [x for x in children if x.getRole() != pyatspi.ROLE_LINK]
         if len(children) > 1:
             return False
 
@@ -223,11 +223,11 @@ class LabelInference:
 
         contents = self._script.utilities.getObjectsFromEOCs(obj)
         objects = [content[0] for content in contents]
-        if filter(self._isWidget, objects):
+        if list(filter(self._isWidget, objects)):
             return ''
 
         strings = [content[3] or content[0].name for content in contents]
-        strings = map(lambda x: x.strip(), strings)
+        strings = [x.strip() for x in strings]
         return ' '.join(strings)
 
     def _getLineContents(self, obj):
@@ -277,14 +277,14 @@ class LabelInference:
 
         extents = self._getExtents(obj)
         contents = self._getLineContents(obj)
-        content = filter(lambda o: o[0] == obj, contents)
+        content = [o for o in contents if o[0] == obj]
         try:
             index = contents.index(content[0])
         except IndexError:
             index = len(contents)
 
         onLeft = contents[max(0, index-1):index]
-        onLeft = filter(lambda o: o[0] and not self._isWidget(o[0]), onLeft)
+        onLeft = [o for o in onLeft if o[0] and not self._isWidget(o[0])]
         if not onLeft:
             return None
 
@@ -314,14 +314,14 @@ class LabelInference:
 
         extents = self._getExtents(obj)
         contents = self._getLineContents(obj)
-        content = filter(lambda o: o[0] == obj, contents)
+        content = [o for o in contents if o[0] == obj]
         try:
             index = contents.index(content[0])
         except IndexError:
             index = len(contents)
 
         onRight = contents[min(len(contents), index+1):]
-        onRight = filter(lambda o: o[0] and not self._isWidget(o[0]), onRight)
+        onRight = [o for o in onRight if o[0] and not self._isWidget(o[0])]
         if not onRight:
             return None
 
@@ -486,14 +486,14 @@ class LabelInference:
         # as a functional label. Therefore, see if this table looks like a grid
         # of widgets with the functional labels in the first row.
         firstRow = [table.getAccessibleAt(0, i) for i in range(table.nColumns)]
-        if not firstRow or filter(self._isWidget, firstRow):
+        if not firstRow or list(filter(self._isWidget, firstRow)):
             return None
 
         cells = [table.getAccessibleAt(i, col) for i in range(1, table.nRows)]
-        if filter(lambda x: x == None, cells):
+        if [x for x in cells if x == None]:
             debug.println(debug.LEVEL_FINE, "INFER: Potentially broken table!")
             return None
-        if filter(lambda x: x[0] and x[0].getRole() != obj.getRole(), cells):
+        if [x for x in cells if x[0] and x[0].getRole() != obj.getRole()]:
             return None
 
         label = self._createLabelFromContents(firstRow[col])
diff --git a/src/orca/liveregions.py b/src/orca/liveregions.py
index 234266d..025b424 100644
--- a/src/orca/liveregions.py
+++ b/src/orca/liveregions.py
@@ -50,13 +50,13 @@ class PriorityQueue:
         time """
         currenttime = time.time()
         myfilter = lambda item: item[1] + MSG_KEEPALIVE_TIME > currenttime
-        self.queue = filter(myfilter, self.queue)
+        self.queue = list(filter(myfilter, self.queue))
 
     def purgeByPriority(self, priority):
         """ Purge items from the queue that have a lower than or equal priority
         than the given argument """
         myfilter = lambda item: item[0] > priority
-        self.queue = filter(myfilter, self.queue)
+        self.queue = list(filter(myfilter, self.queue))
 
     def clumpContents(self):
         """ Combines messages with the same 'label' by appending newer  
@@ -142,7 +142,7 @@ class LiveRegionManager:
         # objects that are not registered for this page
         newpoliteness = {}
         currenturi = self._script.bookmarks.getURIKey()
-        for key, value in self._politenessOverrides.iteritems():
+        for key, value in self._politenessOverrides.items():
             if key[0] == currenturi or value != LIVE_NONE:
                 newpoliteness[key] = value
         self._politenessOverrides = newpoliteness
@@ -320,7 +320,7 @@ class LiveRegionManager:
             self._restoreOverrides = copy.copy(self._politenessOverrides)
 
             # Set all politeness overrides to LIVE_OFF.
-            for override in self._politenessOverrides.keys():
+            for override in list(self._politenessOverrides.keys()):
                 self._politenessOverrides[override] = LIVE_OFF
 
             # look through all the objects on the page and set/add to
@@ -336,7 +336,7 @@ class LiveRegionManager:
 
         # The user wants to restore politeness levels
         else:
-            for key, value in self._restoreOverrides.iteritems():
+            for key, value in self._restoreOverrides.items():
                 self._politenessOverrides[key] = value
             # Translators: This lets the user know that all live regions
             # have been restored to their original politeness level.
diff --git a/src/orca/orca.py b/src/orca/orca.py
index 1508a17..28a2dc8 100644
--- a/src/orca/orca.py
+++ b/src/orca/orca.py
@@ -140,7 +140,7 @@ class Options(argparse.Namespace):
             self._printMessageAndExit(parser.print_help)
 
         if self.listApps and self.desktopRunning:
-            apps = filter(lambda x: x != None, pyatspi.Registry.getDesktop(0))
+            apps = [x for x in pyatspi.Registry.getDesktop(0) if x != None]
             names = [app.name for app in apps]
             message = "\n".join(names)
             if message:
@@ -197,11 +197,11 @@ class Options(argparse.Namespace):
         or disabled), stores them in the self.settings dictionary and then
         returns that dictionary."""
 
-        toEnable = map(self.canEnable.get, self.enable)
+        toEnable = list(map(self.canEnable.get, self.enable))
         for item in toEnable:
             self.settings[item] = True
 
-        toDisable = map(self.canEnable.get, self.disable)
+        toDisable = list(map(self.canEnable.get, self.disable))
         for item in toDisable:
             self.settings[item] = False
 
@@ -1406,7 +1406,7 @@ def multipleOrcas():
 
     pid = os.getpid()
     ppid = os.getppid()
-    return len(filter(lambda p: p not in [pid, ppid], orcas)) > 0
+    return len([p for p in orcas if p not in [pid, ppid]]) > 0
 
 def cleanupGarbage():
     """Cleans up garbage on the heap."""
diff --git a/src/orca/orca_gui_prefs.py b/src/orca/orca_gui_prefs.py
index c6bdc52..0f53d0f 100644
--- a/src/orca/orca_gui_prefs.py
+++ b/src/orca/orca_gui_prefs.py
@@ -719,7 +719,7 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
             serverInfo = speech.getInfo()
 
         try:
-            serverInfo = map(lambda x: x.encode('UTF-8'), serverInfo)
+            serverInfo = [x.encode('UTF-8') for x in serverInfo]
         except (UnicodeDecodeError, UnicodeEncodeError):
             pass
 
@@ -2114,7 +2114,7 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
         #
         iterBB = self._createNode(_("Braille Bindings"))
         self.bbindings = defScript.getBrailleBindings()
-        for com, inputEvHand in self.bbindings.iteritems():
+        for com, inputEvHand in self.bbindings.items():
             handl = defScript.getInputEventHandlerKey(inputEvHand)
             self._insertRowBraille(handl, com, inputEvHand, iterBB)
 
@@ -2806,7 +2806,7 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
 
         orcaMods = settings.orcaModifierKeys
         try:
-            orcaMods = map(lambda x: x.encode('UTF-8'), orcaMods)
+            orcaMods = [x.encode('UTF-8') for x in orcaMods]
         except (UnicodeDecodeError, UnicodeEncodeError):
             pass
         if eventString in orcaMods:
@@ -2877,7 +2877,7 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
                           and x.modifiers == modifiers \
                           and x.click_count == clickCount \
                           and x.handler
-            matches = filter(match, self.kbindings.keyBindings)
+            matches = list(filter(match, self.kbindings.keyBindings))
             if matches:
                 description = matches[0].handler.description
 
diff --git a/src/orca/script.py b/src/orca/script.py
index 8aa03b7..95d7ecf 100644
--- a/src/orca/script.py
+++ b/src/orca/script.py
@@ -192,7 +192,7 @@ class Script:
         braille.py) that match the given inputEventHandler passed.
         """
         return [command
-                for command, handler in self.brailleBindings.iteritems()
+                for command, handler in self.brailleBindings.items()
                 if inputEventHandler == handler]
 
     def getFormatting(self):
@@ -399,7 +399,7 @@ class Script:
         # to the order in which they were added.  So...we need to do something
         # different here.  Logged as bugzilla bug 319781.]]]
         #
-        for key in self.listeners.keys():
+        for key in list(self.listeners.keys()):
             if event.type.startswith(key):
                 self.listeners[key](event)
 
diff --git a/src/orca/script_manager.py b/src/orca/script_manager.py
index 047874c..99153f7 100644
--- a/src/orca/script_manager.py
+++ b/src/orca/script_manager.py
@@ -106,14 +106,14 @@ class ScriptManager:
         # Many python apps have an accessible name which ends in '.py'.
         # Sometimes OOo has 'soffice.bin' as its name.
         name = app.name.split('.')[0]
-        altNames = self._appNames.keys()
+        altNames = list(self._appNames.keys())
 
-        names = filter(lambda n: n.lower() == name.lower(), altNames)
+        names = [n for n in altNames if n.lower() == name.lower()]
         if names:
             name = self._appNames.get(names[0])
         else:
             for nameList in (self._appModules, self._toolkitModules):
-                names = filter(lambda n: n.lower() == name.lower(), nameList)
+                names = [n for n in nameList if n.lower() == name.lower()]
                 if names:
                     name = names[0]
                     break
@@ -145,8 +145,8 @@ class ScriptManager:
         if not (app and name):
             return None
 
-        altNames = self._toolkitNames.keys()
-        names = filter(lambda n: n.lower() == name.lower(), altNames)
+        altNames = list(self._toolkitNames.keys())
+        names = [n for n in altNames if n.lower() == name.lower()]
         if names:
             newName = self._toolkitNames.get(names[0])
             debug.println(debug.LEVEL_FINEST,
@@ -295,8 +295,8 @@ class ScriptManager:
             debug.printException(debug.LEVEL_FINEST)
             return
 
-        appList = self.appScripts.keys()
-        appList = filter(lambda a: a!= None and a not in desktop, appList)
+        appList = list(self.appScripts.keys())
+        appList = [a for a in appList if a!= None and a not in desktop]
         for app in appList:
             appScript = self.appScripts.pop(app)
             _eventManager.deregisterScriptListeners(appScript)
@@ -307,7 +307,7 @@ class ScriptManager:
             except KeyError:
                 pass
             else:
-                for toolkitScript in toolkitScripts.values():
+                for toolkitScript in list(toolkitScripts.values()):
                     _eventManager.deregisterScriptListeners(toolkitScript)
                     del toolkitScript
 
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index 21e57ed..784ea40 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -439,7 +439,7 @@ class Utilities:
         """
 
         allObjs = Utilities.allDescendants(root, onlyShowing)
-        return filter(lambda o: o.getRole() == role, allObjs)
+        return [o for o in allObjs if o.getRole() == role]
 
     def displayedLabel(self, obj):
         """If there is an object labelling the given object, return the
@@ -936,8 +936,7 @@ class Utilities:
         debug.println(debug.LEVEL_FINEST,
                       "knownApplications...")
 
-        apps = filter(lambda x: x is not None,
-                      pyatspi.Registry.getDesktop(0))
+        apps = [x for x in pyatspi.Registry.getDesktop(0) if x is not None]
 
         debug.println(debug.LEVEL_FINEST,
                       "...knownApplications")
@@ -1532,16 +1531,15 @@ class Utilities:
         """
 
         allLabels = self.descendantsWithRole(root, pyatspi.ROLE_LABEL)
-        labels = filter(lambda x: not x.getRelationSet(), allLabels)
-        labels = filter(lambda x: x.parent and x.name != x.parent.name, labels)
-        labels = filter(
-            lambda x: x.getState().contains(pyatspi.STATE_SHOWING), labels)
+        labels = [x for x in allLabels if not x.getRelationSet()]
+        labels = [x for x in labels if x.parent and x.name != x.parent.name]
+        labels = [x for x in labels if x.getState().contains(pyatspi.STATE_SHOWING)]
 
         # Eliminate duplicates
         d = {}
         for label in labels:
             d[label.name] = label
-        labels = d.values()
+        labels = list(d.values())
 
         return sorted(labels, self.spatialComparison)
 
@@ -2662,7 +2660,7 @@ class Utilities:
         superscripted = set(re.findall(self.SUPERSCRIPTS_RE, uString))
 
         for number in superscripted:
-            new = map(lambda d: str(self.SUPERSCRIPT_DIGITS.index(d)), number)
+            new = [str(self.SUPERSCRIPT_DIGITS.index(d)) for d in number]
             # Translators: This string is part of the presentation of an
             # item that includes one or several consequtive superscripted
             # characters, e.g. 'X' followed by 'superscript 2' followed by
@@ -2676,7 +2674,7 @@ class Utilities:
             uString = re.sub(number, newString, uString)
 
         for number in subscripted:
-            new = map(lambda d: str(self.SUBSCRIPT_DIGITS.index(d)), number)
+            new = [str(self.SUBSCRIPT_DIGITS.index(d)) for d in number]
             # Translators: This string is part of the presentation of an
             # item that includes one or several consequtive subscripted
             # characters, e.g. 'X' followed by 'subscript 2' followed by
@@ -2936,9 +2934,9 @@ class Utilities:
 
         try:
             items = [s.strip() for s in string.split(";")]
-            items = filter(lambda item: len(item.split(':')) == 2, items)
-            keys = map(lambda item: item.split(':')[0].strip(), items)
-            dictionary = dict(map(lambda item: item.split(':'), items))
+            items = [item for item in items if len(item.split(':')) == 2]
+            keys = [item.split(':')[0].strip() for item in items]
+            dictionary = dict([item.split(':') for item in items])
         except:
             return [], {}
 
diff --git a/src/orca/scripts/apps/soffice/script_utilities.py b/src/orca/scripts/apps/soffice/script_utilities.py
index 15f293a..7c65f6e 100644
--- a/src/orca/scripts/apps/soffice/script_utilities.py
+++ b/src/orca/scripts/apps/soffice/script_utilities.py
@@ -224,7 +224,7 @@ class Utilities(script_utilities.Utilities):
         #
         docFrames = self.descendantsWithRole(
             self.topLevelObject(obj), pyatspi.ROLE_DOCUMENT_FRAME)
-        docFrame = filter(lambda o: ":" in o.name and "/" in o.name, docFrames)
+        docFrame = [o for o in docFrames if ":" in o.name and "/" in o.name]
         if docFrame:
             return docFrame[0]
 
diff --git a/src/orca/scripts/default.py b/src/orca/scripts/default.py
index f1688ae..d9b2a5b 100644
--- a/src/orca/scripts/default.py
+++ b/src/orca/scripts/default.py
@@ -1043,7 +1043,7 @@ class Script(script.Script):
         passed as argument
         """
 
-        for keyName, handler in self.inputEventHandlers.iteritems():
+        for keyName, handler in self.inputEventHandlers.items():
             if handler == inputEventHandler:
                 return keyName
 
@@ -1293,7 +1293,7 @@ class Script(script.Script):
         if oldParent is not None and oldParent == newParent and \
               newParent.getRole() in [pyatspi.ROLE_TABLE,
                                       pyatspi.ROLE_TREE_TABLE]:
-            for key in self.pointOfReference.keys():
+            for key in list(self.pointOfReference.keys()):
                 if key not in ('lastRow', 'lastColumn'):
                     del self.pointOfReference[key]
         else:
@@ -1470,7 +1470,7 @@ class Script(script.Script):
     def activate(self):
         """Called when this script is activated."""
 
-        braille.setupKeyRanges(self.brailleBindings.keys())
+        braille.setupKeyRanges(list(self.brailleBindings.keys()))
         speech.updatePunctuationLevel()
 
     def updateBraille(self, obj, extraRegion=None):
@@ -2017,7 +2017,7 @@ class Script(script.Script):
                 # attributes for this character returned by getAttributes().
                 #
                 if allAttributes:
-                    for key in charDict.keys():
+                    for key in list(charDict.keys()):
                         allAttributes[key] = charDict[key]
                 else:
                     allAttributes = charDict
@@ -4392,7 +4392,7 @@ class Script(script.Script):
                 #
                 defunctBars = 0
                 mostRecentUpdate = [obj, 0]
-                for key, value in self.lastProgressBarTime.items():
+                for key, value in list(self.lastProgressBarTime.items()):
                     if value > mostRecentUpdate[1]:
                         mostRecentUpdate = [key, value]
                     try:
@@ -4440,7 +4440,7 @@ class Script(script.Script):
                         #
                         if len(self.lastProgressBarTime) > 1:
                             index = 0
-                            for key in self.lastProgressBarTime.keys():
+                            for key in list(self.lastProgressBarTime.keys()):
                                 if key == obj and key != mostRecentUpdate[0]:
                                     # Translators: this is an index value
                                     # so that we can tell which progress bar
@@ -4786,7 +4786,7 @@ class Script(script.Script):
         otherwise.
         """
 
-        for key, value in self.attributeNamesDict.items():
+        for key, value in list(self.attributeNamesDict.items()):
             if value == attribName:
                 return key
 
@@ -5590,7 +5590,7 @@ class Script(script.Script):
             if isinstance(message[0], list):
                 message = message[0]
             if isinstance(message, list):
-                message = filter(lambda i: isinstance(i, str), message)
+                message = [i for i in message if isinstance(i, str)]
                 message = " ".join(message)
 
             if _settingsManager.getSetting('flashIsPersistent'):
diff --git a/src/orca/scripts/toolkits/Gecko/bookmarks.py b/src/orca/scripts/toolkits/Gecko/bookmarks.py
index 8c33639..182486e 100644
--- a/src/orca/scripts/toolkits/Gecko/bookmarks.py
+++ b/src/orca/scripts/toolkits/Gecko/bookmarks.py
@@ -144,7 +144,7 @@ class GeckoBookmarks(bookmarks.Bookmarks):
         saved = {}
          
         # save obj as a path instead of an accessible
-        for index, bookmark in self._bookmarks.iteritems():
+        for index, bookmark in self._bookmarks.items():
             saved[index] = bookmark[0], bookmark[1]
             
         try:
@@ -170,7 +170,7 @@ class GeckoBookmarks(bookmarks.Bookmarks):
         # offset by the difficulty in finding the next bookmark.  We will 
         # need to sort our keys to determine the next bookmark on a page by 
         # page basis.
-        bm_keys = self._bookmarks.keys()
+        bm_keys = list(self._bookmarks.keys())
         current_uri = self.getURIKey()
         
         # mine out the hardware keys for this page and sort them
@@ -203,7 +203,7 @@ class GeckoBookmarks(bookmarks.Bookmarks):
     def goToPrevBookmark(self, inputEvent):
         """ Go to the previous bookmark location.  If no bookmark has yet to be
         selected, the first bookmark will be used.  """
-        bm_keys = self._bookmarks.keys()
+        bm_keys = list(self._bookmarks.keys())
         current_uri = self.getURIKey()
         
         # mine out the hardware keys for this page and sort them
diff --git a/src/orca/scripts/toolkits/Gecko/braille_generator.py b/src/orca/scripts/toolkits/Gecko/braille_generator.py
index 5fab47f..e7e9003 100644
--- a/src/orca/scripts/toolkits/Gecko/braille_generator.py
+++ b/src/orca/scripts/toolkits/Gecko/braille_generator.py
@@ -227,7 +227,7 @@ class BrailleGenerator(braille_generator.BrailleGenerator):
         items = [s.getSelectedChild(i) for i in range(s.nSelectedChildren)]
         if not items and obj.childCount:
             items.append(obj[0])
-        items = map(self._generateName, items)
+        items = list(map(self._generateName, items))
         for item in items:
             result.extend(item)
 
diff --git a/src/orca/scripts/toolkits/Gecko/script.py b/src/orca/scripts/toolkits/Gecko/script.py
index e4ed727..14af07f 100644
--- a/src/orca/scripts/toolkits/Gecko/script.py
+++ b/src/orca/scripts/toolkits/Gecko/script.py
@@ -4129,7 +4129,7 @@ class Script(default.Script):
 
         # Maybe we've already made a guess and saved it.
         #
-        for field, label in self._guessedLabels.items():
+        for field, label in list(self._guessedLabels.items()):
             if self.utilities.isSameObject(field, obj):
                 return label
 
@@ -5111,7 +5111,7 @@ class Script(default.Script):
                and lastExtents != nextExtents \
                or nextExtents == (0, 0, 0, 0):
                 toAdd = self.getObjectsFromEOCs(nextObj, nOffset, boundary)
-                toAdd = filter(lambda x: x not in objects, toAdd)
+                toAdd = [x for x in toAdd if x not in objects]
                 objects.extend(toAdd)
             elif (nextObj.getRole() in [pyatspi.ROLE_SECTION,
                                         pyatspi.ROLE_TABLE_CELL] \
diff --git a/src/orca/scripts/toolkits/Gecko/speech_generator.py b/src/orca/scripts/toolkits/Gecko/speech_generator.py
index b73e9ed..db29014 100644
--- a/src/orca/scripts/toolkits/Gecko/speech_generator.py
+++ b/src/orca/scripts/toolkits/Gecko/speech_generator.py
@@ -317,7 +317,7 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         items = [s.getSelectedChild(i) for i in range(s.nSelectedChildren)]
         if not items and obj.childCount:
             items.append(obj[0])
-        items = map(self._generateName, items)
+        items = list(map(self._generateName, items))
         for item in items:
             result.extend(item)
 
diff --git a/src/orca/scripts/toolkits/WebKitGtk/script.py b/src/orca/scripts/toolkits/WebKitGtk/script.py
index 62baa33..41d2a49 100644
--- a/src/orca/scripts/toolkits/WebKitGtk/script.py
+++ b/src/orca/scripts/toolkits/WebKitGtk/script.py
@@ -402,7 +402,7 @@ class Script(default.Script):
                 voice = self.voices[settings.DEFAULT_VOICE]
 
             phrase = self.utilities.adjustForRepeats(phrase)
-            links = filter(lambda x: x.getRole() == pyatspi.ROLE_LINK, obj)
+            links = [x for x in obj if x.getRole() == pyatspi.ROLE_LINK]
             if links:
                 phrase = self.utilities.adjustForLinks(obj, phrase, startOffset)
             speech.speak(phrase, voice)
@@ -535,7 +535,7 @@ class Script(default.Script):
         allTextObjs = utils.findAllDescendants(
             document, lambda x: 'Text' in utils.listInterfaces(x))
         allTextObjs = allTextObjs[allTextObjs.index(obj):len(allTextObjs)]
-        textObjs = filter(lambda x: x.parent not in allTextObjs, allTextObjs)
+        textObjs = [x for x in allTextObjs if x.parent not in allTextObjs]
         if not textObjs:
             return
 
@@ -583,7 +583,7 @@ class Script(default.Script):
         else:
             linkCount = hypertext.getNLinks()
             links = [hypertext.getLink(x) for x in range(linkCount)]
-            if filter(lambda l: l.startIndex <= offset <= l.endIndex, links):
+            if [l for l in links if l.startIndex <= offset <= l.endIndex]:
                 return
 
         text.setCaretOffset(offset)
diff --git a/src/orca/scripts/toolkits/WebKitGtk/script_utilities.py b/src/orca/scripts/toolkits/WebKitGtk/script_utilities.py
index dee2779..5dee35f 100644
--- a/src/orca/scripts/toolkits/WebKitGtk/script_utilities.py
+++ b/src/orca/scripts/toolkits/WebKitGtk/script_utilities.py
@@ -152,7 +152,7 @@ class Utilities(script_utilities.Utilities):
 
         pattern = re.compile(self.EMBEDDED_OBJECT_CHARACTER)
         offsets = [m.start(0) for m in re.finditer(pattern, string)]
-        offsets = filter(lambda x: start <= x < end, offsets)
+        offsets = [x for x in offsets if start <= x < end]
 
         objects = []
         try:
@@ -165,6 +165,6 @@ class Utilities(script_utilities.Utilities):
             objects.append((objs[i], first, last, ''))
             start = last
         objects.append((obj, start, end, string[start:end]))
-        objects = filter(lambda x: x[1] < x[2], objects)
+        objects = [x for x in objects if x[1] < x[2]]
 
         return objects
diff --git a/src/orca/settings_manager.py b/src/orca/settings_manager.py
index e062686..5e2c6e4 100644
--- a/src/orca/settings_manager.py
+++ b/src/orca/settings_manager.py
@@ -216,12 +216,12 @@ class SettingsManager(object):
             return self.customizedSettings
 
         originalSettings = {}
-        for key, value in settings.__dict__.items():
+        for key, value in list(settings.__dict__.items()):
             originalSettings[key] = value
 
         self._customizationCompleted = self._loadUserCustomizations()
 
-        for key, value in originalSettings.items():
+        for key, value in list(originalSettings.items()):
             customValue = settings.__dict__.get(key)
             if value != customValue:
                 self.customizedSettings[key] = customValue
@@ -358,10 +358,10 @@ class SettingsManager(object):
         return (general, pronunciations, keybindings)
 
     def _setSettingsRuntime(self, settingsDict):
-        for key, value in settingsDict.items():
+        for key, value in list(settingsDict.items()):
             setattr(settings, str(key), value)
         self._getCustomizedSettings()
-        for key, value in self.customizedSettings.items():
+        for key, value in list(self.customizedSettings.items()):
             setattr(settings, str(key), value)
         self._setPronunciationsRuntime()
 
@@ -397,7 +397,7 @@ class SettingsManager(object):
         as the profile's."""
         self.profileGeneral = {}
 
-        for key, value in general.items():
+        for key, value in list(general.items()):
             if isinstance(value, unicode):
                 value = value.encode('UTF-8')
             if key in settings.excludeKeys:
@@ -457,7 +457,7 @@ class SettingsManager(object):
 
     def overrideKeyBindings(self, script, scriptKeyBindings):
         keybindingsSettings = self.getKeybindings(self.profile)
-        for handlerString, bindingTuples in keybindingsSettings.items():
+        for handlerString, bindingTuples in list(keybindingsSettings.items()):
             handler = script.inputEventHandlers.get(handlerString)
             if not handler:
                 continue
@@ -496,7 +496,7 @@ class SettingsManager(object):
 
         general = {}
 
-        for key, value in prefs.items():
+        for key, value in list(prefs.items()):
             if key not in settings.excludeKeys:
                 general[key] = value
 
@@ -553,7 +553,7 @@ class SettingsManager(object):
         reload(self._knownAppSettings[name])
 
         appVoices = self.getSetting('voices')
-        for voiceType, voiceDef in appVoices.items():
+        for voiceType, voiceDef in list(appVoices.items()):
             script.voices[voiceType].update(voiceDef)
 
         keybindings = getattr(module, 'overrideAppKeyBindings', None)
@@ -569,7 +569,7 @@ class SettingsManager(object):
 
 def getVoiceKey(voice):
     voicesKeys = getattr(settings, 'voicesKeys')
-    for key in voicesKeys.keys():
+    for key in list(voicesKeys.keys()):
         if voicesKeys[key] == voice:
             return key
     return ""
diff --git a/src/orca/speech.py b/src/orca/speech.py
index ec622fa..c39d34b 100644
--- a/src/orca/speech.py
+++ b/src/orca/speech.py
@@ -169,7 +169,7 @@ def _speak(text, acss, interrupt):
 
     logLine = "SPEECH OUTPUT: '" + text + "'"
     extraDebug = ""
-    if acss in settings.voices.values():
+    if acss in list(settings.voices.values()):
         for key in settings.voices:
             if acss == settings.voices[key]:
                 if key != settings.DEFAULT_VOICE:
diff --git a/src/orca/speechdispatcherfactory.py b/src/orca/speechdispatcherfactory.py
index 9ec4fcf..11c072f 100644
--- a/src/orca/speechdispatcherfactory.py
+++ b/src/orca/speechdispatcherfactory.py
@@ -129,7 +129,7 @@ class SpeechServer(speechserver.SpeechServer):
     getSpeechServer = staticmethod(getSpeechServer)
 
     def shutdownActiveServers():
-        for server in SpeechServer._active_servers.values():
+        for server in list(SpeechServer._active_servers.values()):
             server.shutdown()
     shutdownActiveServers = staticmethod(shutdownActiveServers)
 
@@ -373,7 +373,7 @@ class SpeechServer(speechserver.SpeechServer):
                 if t == speechserver.SayAllContext.COMPLETED:
                     GObject.idle_add(self._say_all, iterator, orca_callback)
             self._speak(context.utterance, acss, callback=callback,
-                        event_types=self._CALLBACK_TYPE_MAP.keys())
+                        event_types=list(self._CALLBACK_TYPE_MAP.keys()))
         return False # to indicate, that we don't want to be called again.
 
     def _cancel(self):
diff --git a/src/orca/structural_navigation.py b/src/orca/structural_navigation.py
index 94ad02d..1986966 100644
--- a/src/orca/structural_navigation.py
+++ b/src/orca/structural_navigation.py
@@ -590,7 +590,7 @@ class StructuralNavigation:
                 #
                 _("Toggles structural navigation keys."))
 
-        for structuralNavigationObject in self.enabledObjects.values():
+        for structuralNavigationObject in list(self.enabledObjects.values()):
             self.inputEventHandlers.update(\
                 structuralNavigationObject.inputEventHandlers)
             self.functions.extend(structuralNavigationObject.functions)
@@ -613,7 +613,7 @@ class StructuralNavigation:
                 settings.ORCA_MODIFIER_MASK,
                 self.inputEventHandlers["toggleStructuralNavigationHandler"]))
 
-        for structuralNavigationObject in self.enabledObjects.values():
+        for structuralNavigationObject in list(self.enabledObjects.values()):
             bindings = structuralNavigationObject.keyBindings.keyBindings
             for keybinding in bindings:
                 keyBindings.add(keybinding)
diff --git a/src/orca/text_attribute_names.py b/src/orca/text_attribute_names.py
index eefb4fa..3f27435 100644
--- a/src/orca/text_attribute_names.py
+++ b/src/orca/text_attribute_names.py
@@ -758,7 +758,7 @@ def getTextAttributeKey(localizedTextAttr):
     if isinstance(localizedTextAttr, unicode):
         localizedTextAttr = localizedTextAttr.encode("UTF-8")
 
-    for key, value in _textAttributeTable.items():
+    for key, value in list(_textAttributeTable.items()):
         if value == localizedTextAttr:
             return key
 



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