From 63ac302bab3fee5abf0241b160bc51792511de5d Mon Sep 17 00:00:00 2001 From: "John (J5) Palmieri" Date: Mon, 16 May 2005 21:27:04 +0000 Subject: * glib/dbus-gmain.c (io_handler_dispatch): fix deadlock when using recursive g_main_loops * python/_dbus.py (class Bus): add the ProxyObjectClass alias for ProxyObject to make it easier for the Twisted networking framework to integrate dbus. * python/proxies.py (class ProxyObject): add the ProxyMethodClass alias for ProxyMethod to make it easier for the Twisted networking framework to integrate dbus. --- python/_dbus.py | 4 ++- python/proxies.py | 82 ++++++++++++++++++++++++++++--------------------------- 2 files changed, 45 insertions(+), 41 deletions(-) (limited to 'python') diff --git a/python/_dbus.py b/python/_dbus.py index d9c81235..ca7a156a 100644 --- a/python/_dbus.py +++ b/python/_dbus.py @@ -70,6 +70,8 @@ class Bus: """bus_type=[Bus.TYPE_SESSION | Bus.TYPE_SYSTEM | Bus.TYPE_STARTER] """ + ProxyObjectClass = ProxyObject + START_REPLY_SUCCESS = dbus_bindings.DBUS_START_REPLY_SUCCESS START_REPLY_ALREADY_RUNNING = dbus_bindings.DBUS_START_REPLY_ALREADY_RUNNING @@ -106,7 +108,7 @@ class Bus: def get_object(self, named_service, object_path): """Get a proxy object to call over the bus""" - return ProxyObject(self, named_service, object_path) + return self.ProxyObjectClass(self, named_service, object_path) def add_signal_receiver(self, handler_function, signal_name=None, dbus_interface=None, named_service=None, path=None): match_rule = self._get_match_rule(signal_name, dbus_interface, named_service, path) diff --git a/python/proxies.py b/python/proxies.py index cbd49200..688dd8ab 100644 --- a/python/proxies.py +++ b/python/proxies.py @@ -1,45 +1,5 @@ import dbus_bindings -class ProxyObject: - """A proxy to the remote Object. - - A ProxyObject is provided by the Bus. ProxyObjects - have member functions, and can be called like normal Python objects. - """ - def __init__(self, bus, named_service, object_path): - self._bus = bus - self._named_service = named_service - self._object_path = object_path - - def connect_to_signal(self, signal_name, handler_function, dbus_interface=None): - self._bus.add_signal_receiver(handler_function, - signal_name=signal_name, - dbus_interface=dbus_interface, - named_service=self._named_service, - path=self._object_path) - - - - def __getattr__(self, member, **keywords): - if member == '__call__': - return object.__call__ - elif member.startswith('__') and member.endswith('__'): - raise AttributeError(member) - else: - iface = None - if (keywords.has_key('dbus_interface')): - iface = keywords['dbus_interface'] - - return ProxyMethod(self._bus.get_connection(), - self._named_service, - self._object_path, iface, member) - - def __repr__(self): - return ''%( - self._bus, self._named_service, self._object_path , id(self)) - __str__ = __repr__ - - class ProxyMethod: """A proxy Method. @@ -95,3 +55,45 @@ class ProxyMethod: else: return args_tuple + +class ProxyObject: + """A proxy to the remote Object. + + A ProxyObject is provided by the Bus. ProxyObjects + have member functions, and can be called like normal Python objects. + """ + ProxyMethodClass = ProxyMethod + + def __init__(self, bus, named_service, object_path): + self._bus = bus + self._named_service = named_service + self._object_path = object_path + + def connect_to_signal(self, signal_name, handler_function, dbus_interface=None): + self._bus.add_signal_receiver(handler_function, + signal_name=signal_name, + dbus_interface=dbus_interface, + named_service=self._named_service, + path=self._object_path) + + + + def __getattr__(self, member, **keywords): + if member == '__call__': + return object.__call__ + elif member.startswith('__') and member.endswith('__'): + raise AttributeError(member) + else: + iface = None + if (keywords.has_key('dbus_interface')): + iface = keywords['dbus_interface'] + + return self.ProxyMethodClass(self._bus.get_connection(), + self._named_service, + self._object_path, iface, member) + + def __repr__(self): + return ''%( + self._bus, self._named_service, self._object_path , id(self)) + __str__ = __repr__ + -- cgit