[PATCH 08/17] dbus/_bus_mixin.py: Add bindings for ListNames, ListActivatableNames, GetNameOwner too

Simon McVittie simon.mcvittie at collabora.co.uk
Mon Apr 30 03:39:57 PDT 2007


diff --git a/dbus/bus.py b/dbus/bus.py
index 070409e..6899b12 100644
--- a/dbus/bus.py
+++ b/dbus/bus.py
@@ -107,6 +107,35 @@ class _BusDaemonMixin(object):
                                   BUS_DAEMON_IFACE, 'ReleaseName',
                                   's', (name,))
 
+    def list_names(self):
+        """Return a list of all currently-owned names on the bus.
+
+        :Returns: a dbus.Array of dbus.UTF8String
+        """
+        return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+                                  BUS_DAEMON_IFACE, 'ListNames',
+                                  '', (), utf8_strings=True)
+
+    def list_activatable_names(self):
+        """Return a list of all names that can be activated on the bus.
+
+        :Returns: a dbus.Array of dbus.UTF8String
+        """
+        return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+                                  BUS_DAEMON_IFACE, 'ListNames',
+                                  '', (), utf8_strings=True)
+
+    def get_name_owner(self, bus_name):
+        """Return the unique connection name of the primary owner of the
+        given name.
+
+        :Raises DBusException: if the `bus_name` has no owner
+        """
+        validate_bus_name(bus_name, allow_unique=False)
+        return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+                                  BUS_DAEMON_IFACE, 'GetNameOwner',
+                                  's', (bus_name,), utf8_strings=True)
+
     def name_has_owner(self, bus_name):
         """Return True iff the given bus name has an owner on this bus.
 
diff --git a/test/test-client.py b/test/test-client.py
index 11be7db..b9d2242 100755
--- a/test/test-client.py
+++ b/test/test-client.py
@@ -60,11 +60,15 @@ test_types_vals = [1, 12323231, 3.14159265, 99999999.99,
                  #([1,2,3],"c", 1.2, ["a","b","c"], {"a": (1,"v"), "b": (2,"d")})
                  ]
 
+NAME = "org.freedesktop.DBus.TestSuitePythonService"
+IFACE = "org.freedesktop.DBus.TestSuiteInterface"
+OBJECT = "/org/freedesktop/DBus/TestSuitePythonObject"
+
 class TestDBusBindings(unittest.TestCase):
     def setUp(self):
         self.bus = dbus.SessionBus()
-        self.remote_object = self.bus.get_object("org.freedesktop.DBus.TestSuitePythonService", "/org/freedesktop/DBus/TestSuitePythonObject")
-        self.iface = dbus.Interface(self.remote_object, "org.freedesktop.DBus.TestSuiteInterface")
+        self.remote_object = self.bus.get_object(NAME, OBJECT)
+        self.iface = dbus.Interface(self.remote_object, IFACE)
 
     def testWeakRefs(self):
         # regression test for Sugar crash caused by smcv getting weak refs
@@ -307,6 +311,22 @@ class TestDBusBindings(unittest.TestCase):
         myself = self.iface.WhoAmI()
         print "I am", myself
 
+    def testBusGetNameOwner(self):
+        ret = self.bus.get_name_owner(NAME)
+        self.assert_(ret.startswith(':'), ret)
+
+    def testBusListNames(self):
+        ret = self.bus.list_names()
+        self.assert_(NAME in ret, ret)
+
+    def testBusListActivatableNames(self):
+        ret = self.bus.list_activatable_names()
+        self.assert_(NAME in ret, ret)
+
+    def testBusNameHasOwner(self):
+        self.assert_(self.bus.name_has_owner(NAME))
+        self.assert_(not self.bus.name_has_owner('badger.mushroom.snake'))
+
     def testBusNameCreation(self):
         print '\n******** Testing BusName creation ********'
         test = [('org.freedesktop.DBus.Python.TestName', True),


More information about the dbus mailing list