from dbus.exceptions import *
import interfaces
-from factory import create_accessible
__all__ = [
"AccessibleObjectNoLongerExists",
+ "AccessibleObjectNotAvailable",
"Enum",
"BaseProxy",
+ "_repack_tuple",
]
class AccessibleObjectNoLongerExists(Exception):
pass
+class AccessibleObjectNotAvailable(Exception):
+ pass
+
#------------------------------------------------------------------------------
-class Enum(int):
+def _repack_tuple (tup):
+ """
+ Re-packs a tuple moving the last element to the beginning.
+ """
+ return (tup[-1] ,) + tup[:-1]
+
+#------------------------------------------------------------------------------
+
+class Enum(dbus.UInt32):
def __str__(self):
return self._enum_lookup[int(self)]
+ def __eq__(self, other):
+ if other is None:
+ return False
+ if int(self) == int(other):
+ return True
+ else:
+ return False
+
+ def __hash__(self):
+ return int(self)
+
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
-class BaseProxy(Interface):
+class BaseProxy(object):
"""
The base D-Bus proxy for a remote object that implements one or more
of the AT-SPI interfaces.
__metaclass__ = BaseProxyMeta
- def __init__(self, cache, app_name, acc_path, interface, dbus_object=None, connection=None, parent=None):
+ def __init__(self, app_name, acc_path, cache, interface, dbus_object=None):
"""
Create a D-Bus Proxy for an ATSPI interface.
app_name - D-Bus bus name of the application this accessible belongs to.
acc_path - D-Bus object path of the server side accessible object.
parent - Parent accessible.
- interface - D-Bus interface of the object. Used to decide which accessible class to instanciate.
dbus_object(kwarg) - The D-Bus proxy object used by the accessible for D-Bus method calls.
"""
self._cache = cache
self._app_name = app_name
self._acc_path = acc_path
- self._parent = parent
+ self._dbus_interface = interface
if not dbus_object:
- dbus_object = connection.get_object(self._app_name, self._acc_path, introspect=False)
+ dbus_object = cache.connection.get_object(self._app_name,
+ self._acc_path,
+ introspect=False)
self._dbus_object = dbus_object
- Interface.__init__(self, self._dbus_object, interface)
-
- self._pgetter = self.get_dbus_method("Get", dbus_interface="org.freedesktop.DBus.Properties")
- self._psetter = self.get_dbus_method("Set", dbus_interface="org.freedesktop.DBus.Properties")
-
- def __getattr__(self, attr):
- raise AttributeError("\'%s\' has no attribute \'%s\'" % (self.__class__.__name__, attr))
+ self._pgetter = self.get_dbus_method("Get",
+ dbus_interface="org.freedesktop.DBus.Properties")
+ self._psetter = self.get_dbus_method("Set",
+ dbus_interface="org.freedesktop.DBus.Properties")
def __str__(self):
try:
except Exception:
return '[DEAD]'
+ def __eq__(self, other):
+ if other is None:
+ return False
+ try:
+ if self._app_name == other._app_name and \
+ self._acc_path == other._acc_path:
+ return True
+ else:
+ return False
+ except AttributeError:
+ return False
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __hash__(self):
+ return hash(self._app_name + self._acc_path)
+
def get_dbus_method(self, *args, **kwargs):
- method = Interface.get_dbus_method(self, *args, **kwargs)
+ method = self._dbus_object.get_dbus_method(*args, **kwargs)
- def dbus_method_func(*args, **kwargs):
+ def dbus_method_func(*iargs, **ikwargs):
# TODO Need to throw an AccessibleObjectNoLongerExists exception
# on D-Bus error of the same type.
try:
- return method(*args, **kwargs)
+ return method(*iargs, **ikwargs)
except UnknownMethodException, e:
raise NotImplementedError(e)
except DBusException, e:
@property
def cached_data(self):
try:
- return self._cache[self._app_name][self._acc_path]
+ return self._cache.get_cache_data(self._app_name, self._acc_path)
except KeyError:
raise AccessibleObjectNoLongerExists, \
'Cache data cannot be found for path %s in app %s' % (self._acc_path, self._app_name)
is not supported.
"""
if interface in self.interfaces:
- return create_accessible(self._cache,
- self._app_name,
- self._acc_path,
- interface,
- dbus_object=self._dbus_object)
+ return self._cache.create_accessible(self._app_name,
+ self._acc_path,
+ interface,
+ dbus_object=self._dbus_object)
else:
raise NotImplementedError(
"%s not supported by accessible object at path %s"
% (interface, self._acc_path))
+ def flushCache(self):
+ pass
+
#END----------------------------------------------------------------------------