at-spi r1009 - trunk/pyatspi



Author: eitani
Date: Wed Apr 23 20:56:23 2008
New Revision: 1009
URL: http://svn.gnome.org/viewvc/at-spi?rev=1009&view=rev

Log:
* registry.py:
* __init__.py: Suppress exceptions at import time, raise
RuntimeError when we don't have a reference to a remote registry
during a registry operation (bug #529611).


Modified:
   trunk/pyatspi/ChangeLog
   trunk/pyatspi/__init__.py
   trunk/pyatspi/registry.py

Modified: trunk/pyatspi/__init__.py
==============================================================================
--- trunk/pyatspi/__init__.py	(original)
+++ trunk/pyatspi/__init__.py	Wed Apr 23 20:56:23 2008
@@ -41,9 +41,10 @@
 # initialize the ORB
 orb = ORBit.CORBA.ORB_init()
 # get a reference to the gnome Accessibility registry
-reg = bonobo.activation.activate_from_id(REGISTRY_IID, 0, 0)
-if reg is None:
-  raise RuntimeError('could not activate:', REGISTRY_IID)
+try:
+  reg = bonobo.activation.activate_from_id(REGISTRY_IID, 0, 0)
+except Exception:
+  reg = None
 # generate Python code for the Accessibility module from the IDL
 ORBit.load_typelib(TYPELIB_NAME)
 

Modified: trunk/pyatspi/registry.py
==============================================================================
--- trunk/pyatspi/registry.py	(original)
+++ trunk/pyatspi/registry.py	Wed Apr 23 20:56:23 2008
@@ -303,20 +303,35 @@
     @param reg: Reference to the AT-SPI registry daemon
     @type reg: Accessibility.Registry
     '''
-    self.async = None
     self.reg = reg
-    self.dev = self.reg.getDeviceEventController()
+    self.async = None
     self.queue = Queue.Queue()
     self.clients = {}
     self.observers = {}
-    
+
+    if self.reg is not None:
+      self.dev = self.reg.getDeviceEventController()
+    else:
+      self.dev = None
+
   def __call__(self, reg):
     '''
-    @return: This instance of the registry
+    @return: This instance of the registry. If we are passed a remote registry
+    instance for the first time, add it to our instance, and get a device event
+    controller.
     @rtype: L{Registry}
     '''
+    if reg and not self.reg:
+      self.reg = reg
+      self.dev = self.reg.getDeviceEventController()
     return self
   
+  def __getattribute__(self, attr):
+    if attr != 'reg' and object.__getattribute__(self, 'reg') is None:
+      raise RuntimeError('Could not find or activate registry')
+    else:
+      return object.__getattribute__(self, attr)
+
   def start(self, async=False, gil=True):
     '''
     Enter the main loop to start receiving and dispatching events.



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