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

John (J5) Palmieri johnp at redhat.com
Mon Apr 30 14:49:42 PDT 2007


Hmm, my only issue with this wrapping is it encourages people to use
blocking calls.  Ok to commit though.

On Mon, 2007-04-30 at 11:39 +0100, Simon McVittie wrote:
> 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),
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus



More information about the dbus mailing list