diff options
author | Robert McQueen <robot101@debian.org> | 2005-11-14 02:53:29 +0000 |
---|---|---|
committer | Robert McQueen <robot101@debian.org> | 2005-11-14 02:53:29 +0000 |
commit | 82393f9a2d555cfce75ec463a6824f098f94425b (patch) | |
tree | 6fd00c1e88cdf7e57e4a52640864c41329533ff2 | |
parent | ca5dc264c71c423b74f1674e5721186c52b0f6f6 (diff) |
2005-11-14 Robert McQueen <robot101@debian.org>
* python/decorators.py, python/service.py: Add a new argument to the
dbus.service.method decorator called sender_keyword, which if set,
specifies the name of an argument which will be provided the bus
name of the method caller.
* test/python/test-client.py, test/python/test-service.py: Add a
method and test to check the sender_keyword functionality.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | python/decorators.py | 6 | ||||
-rw-r--r-- | python/service.py | 4 | ||||
-rwxr-xr-x | test/python/test-client.py | 5 | ||||
-rwxr-xr-x | test/python/test-service.py | 4 |
5 files changed, 28 insertions, 1 deletions
@@ -1,3 +1,13 @@ +2005-11-14 Robert McQueen <robot101@debian.org> + + * python/decorators.py, python/service.py: Add a new argument to the + dbus.service.method decorator called sender_keyword, which if set, + specifies the name of an argument which will be provided the bus + name of the method caller. + + * test/python/test-client.py, test/python/test-service.py: Add a + method and test to check the sender_keyword functionality. + 2005-11-07 John (J5) Palmieri <johnp@redhat.com> * bus/driver.c (bus_driver_handle_reload_config): Make sure we send an diff --git a/python/decorators.py b/python/decorators.py index e4cc024..c9bc17f 100644 --- a/python/decorators.py +++ b/python/decorators.py @@ -2,7 +2,7 @@ import _util import inspect import dbus_bindings -def method(dbus_interface, in_signature=None, out_signature=None, async_callbacks=None): +def method(dbus_interface, in_signature=None, out_signature=None, async_callbacks=None, sender_keyword=None): _util._validate_interface_or_name(dbus_interface) def decorator(func): @@ -17,6 +17,9 @@ def method(dbus_interface, in_signature=None, out_signature=None, async_callback args.remove(async_callbacks[0]) args.remove(async_callbacks[1]) + if sender_keyword: + args.remove(sender_keyword) + if in_signature: in_sig = tuple(dbus_bindings.Signature(in_signature)) @@ -30,6 +33,7 @@ def method(dbus_interface, in_signature=None, out_signature=None, async_callback func._dbus_interface = dbus_interface func._dbus_in_signature = in_signature func._dbus_out_signature = out_signature + func._dbus_sender_keyword = sender_keyword func._dbus_args = args return func diff --git a/python/service.py b/python/service.py index 3eec65f..409fc78 100644 --- a/python/service.py +++ b/python/service.py @@ -294,6 +294,10 @@ class Object(Interface): keywords[return_callback] = lambda *retval: _method_reply_return(connection, message, method_name, signature, *retval) keywords[error_callback] = lambda exception: _method_reply_error(connection, message, exception) + # include the sender if desired + if parent_method._dbus_sender_keyword: + keywords[parent_method._dbus_sender_keyword] = message.get_sender() + # call method retval = candidate_method(self, *args, **keywords) diff --git a/test/python/test-client.py b/test/python/test-client.py index e207d49..ab70350 100755 --- a/test/python/test-client.py +++ b/test/python/test-client.py @@ -218,6 +218,11 @@ class TestDBusBindings(unittest.TestCase): self.assert_(private_type != private_func, '%s should not equal %s' % (private_type, private_func)) self.assert_(private_func != private_cls, '%s should not equal %s' % (private_func, private_cls)) + def testSenderName(self): + print '\n******** Testing sender name keyword ********' + myself = self.iface.WhoAmI() + print "I am", myself + def testBusNameCreation(self): print '\n******** Testing BusName creation ********' test = [('org.freedesktop.DBus.Python.TestName', True), diff --git a/test/python/test-service.py b/test/python/test-service.py index d5488c4..e821380 100755 --- a/test/python/test-service.py +++ b/test/python/test-service.py @@ -130,6 +130,10 @@ class TestObject(dbus.service.Object, TestInterface): except Exception, e: error_cb(e) + @dbus.service.method('org.freedesktop.DBus.TestSuiteInterface', in_signature='', out_signature='s', sender_keyword='sender') + def WhoAmI(self, sender): + return sender + session_bus = dbus.SessionBus() name = dbus.service.BusName("org.freedesktop.DBus.TestSuitePythonService", bus=session_bus) object = TestObject(name) |