[PATCH 12/17] Move get_object, constants into Connection and BusConnection. Add docstrings

John (J5) Palmieri johnp at redhat.com
Mon Apr 30 15:04:45 PDT 2007


refresh me why we are implementing the same method on BusConnection and
Connection given that BusConnection inherits from Connection?  Otherwise
looks good.

On Mon, 2007-04-30 at 12:36 +0100, Simon McVittie wrote:
> diff --git a/dbus/_dbus.py b/dbus/_dbus.py
> index 48c623b..bab195a 100644
> --- a/dbus/_dbus.py
> +++ b/dbus/_dbus.py
> @@ -227,30 +227,21 @@ class SignalMatch(object):
>  
> 
>  class Bus(BusConnection):
> -    """A connection to a DBus daemon.
> +    """A connection to one of three possible standard buses, the SESSION,
> +    SYSTEM, or STARTER bus. This class manages shared connections to those
> +    buses.
>  
> -    One of three possible standard buses, the SESSION, SYSTEM,
> -    or STARTER bus
> +    If you're trying to subclass `Bus`, you may be better off subclassing
> +    `BusConnection`, which doesn't have all this magic.
>      """
>  
> -    TYPE_SESSION    = BUS_SESSION
> -    """Represents a session bus (same as the global dbus.BUS_SESSION)"""
> -
> -    TYPE_SYSTEM     = BUS_SYSTEM
> -    """Represents the system bus (same as the global dbus.BUS_SYSTEM)"""
> -
> -    TYPE_STARTER = BUS_STARTER
> -    """Represents the bus that started this service by activation (same as
> -    the global dbus.BUS_STARTER)"""
> -
> -    ProxyObjectClass = ProxyObject
> -
>      START_REPLY_SUCCESS = DBUS_START_REPLY_SUCCESS
>      START_REPLY_ALREADY_RUNNING = DBUS_START_REPLY_ALREADY_RUNNING
>  
>      _shared_instances = {}
>  
> -    def __new__(cls, bus_type=TYPE_SESSION, private=False, mainloop=None):
> +    def __new__(cls, bus_type=BusConnection.TYPE_SESSION, private=False,
> +                mainloop=None):
>          """Constructor, returning an existing instance where appropriate.
>  
>          The returned instance is actually always an instance of `SessionBus`,
> @@ -370,47 +361,6 @@ class Bus(BusConnection):
>  
>      get_starter = staticmethod(get_starter)
>  
> -    def get_object(self, named_service, object_path, introspect=True,
> -                   follow_name_owner_changes=False):
> -        """Return a local proxy for the given remote object.
> -
> -        Method calls on the proxy are translated into method calls on the
> -        remote object.
> -
> -        :Parameters:
> -            `named_service` : str
> -                A bus name (either the unique name or a well-known name)
> -                of the application owning the object
> -            `object_path` : str
> -                The object path of the desired object
> -            `introspect` : bool
> -                If true (default), attempt to introspect the remote
> -                object to find out supported methods and their signatures
> -            `follow_name_owner_changes` : bool
> -                If the object path is a well-known name and this parameter
> -                is false (default), resolve the well-known name to the unique
> -                name of its current owner and bind to that instead; if the
> -                ownership of the well-known name changes in future,
> -                keep communicating with the original owner.
> -                This is necessary if the D-Bus API used is stateful.
> -
> -                If the object path is a well-known name and this parameter
> -                is true, whenever the well-known name changes ownership in
> -                future, bind to the new owner, if any.
> -
> -                If the given object path is a unique name, this parameter
> -                has no effect.
> -
> -        :Returns: a `dbus.proxies.ProxyObject`
> -        :Raises `DBusException`: if resolving the well-known name to a
> -            unique name fails
> -        """
> -        if follow_name_owner_changes:
> -            self._require_main_loop()   # we don't get the signals otherwise
> -        return self.ProxyObjectClass(self, named_service, object_path,
> -                                     introspect=introspect,
> -                                     follow_name_owner_changes=follow_name_owner_changes)
> -
>      def add_signal_receiver(self, handler_function,
>                                    signal_name=None,
>                                    dbus_interface=None,
> diff --git a/dbus/bus.py b/dbus/bus.py
> index e5356d2..45c8505 100644
> --- a/dbus/bus.py
> +++ b/dbus/bus.py
> @@ -16,20 +16,33 @@
>  # along with this program; if not, write to the Free Software
>  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
>  
> +__all__ = ('BusConnection',)
> +__docformat__ = 'reStructuredText'
> +
>  from _dbus_bindings import validate_interface_name, validate_member_name,\
>                             validate_bus_name, validate_object_path,\
>                             validate_error_name,\
>                             DBusException, \
> +                           BUS_SESSION, BUS_STARTER, BUS_SYSTEM, \
>                             BUS_DAEMON_NAME, BUS_DAEMON_PATH, BUS_DAEMON_IFACE
>  from dbus.connection import Connection
>  
> 
>  class BusConnection(Connection):
> -    """This mixin provides simple blocking wrappers for various methods on
> -    the org.freedesktop.DBus bus-daemon object, to reduce the amount of C
> -    code we need.
> +    """A connection to a D-Bus daemon that implements the
> +    ``org.freedesktop.DBus`` pseudo-service.
>      """
>  
> +    TYPE_SESSION    = BUS_SESSION
> +    """Represents a session bus (same as the global dbus.BUS_SESSION)"""
> +
> +    TYPE_SYSTEM     = BUS_SYSTEM
> +    """Represents the system bus (same as the global dbus.BUS_SYSTEM)"""
> +
> +    TYPE_STARTER = BUS_STARTER
> +    """Represents the bus that started this service by activation (same as
> +    the global dbus.BUS_STARTER)"""
> +
>      def activate_name_owner(self, bus_name):
>          if (bus_name is not None and bus_name[:1] != ':'
>              and bus_name != BUS_DAEMON_NAME):
> @@ -46,6 +59,47 @@ class BusConnection(Connection):
>              # already unique
>              return bus_name
>  
> +    def get_object(self, named_service, object_path, introspect=True,
> +                   follow_name_owner_changes=False):
> +        """Return a local proxy for the given remote object.
> +
> +        Method calls on the proxy are translated into method calls on the
> +        remote object.
> +
> +        :Parameters:
> +            `named_service` : str
> +                A bus name (either the unique name or a well-known name)
> +                of the application owning the object
> +            `object_path` : str
> +                The object path of the desired object
> +            `introspect` : bool
> +                If true (default), attempt to introspect the remote
> +                object to find out supported methods and their signatures
> +            `follow_name_owner_changes` : bool
> +                If the object path is a well-known name and this parameter
> +                is false (default), resolve the well-known name to the unique
> +                name of its current owner and bind to that instead; if the
> +                ownership of the well-known name changes in future,
> +                keep communicating with the original owner.
> +                This is necessary if the D-Bus API used is stateful.
> +
> +                If the object path is a well-known name and this parameter
> +                is true, whenever the well-known name changes ownership in
> +                future, bind to the new owner, if any.
> +
> +                If the given object path is a unique name, this parameter
> +                has no effect.
> +
> +        :Returns: a `dbus.proxies.ProxyObject`
> +        :Raises `DBusException`: if resolving the well-known name to a
> +            unique name fails
> +        """
> +        if follow_name_owner_changes:
> +            self._require_main_loop()   # we don't get the signals otherwise
> +        return self.ProxyObjectClass(self, named_service, object_path,
> +                                     introspect=introspect,
> +                                     follow_name_owner_changes=follow_name_owner_changes)
> +
>      def get_unix_user(self, bus_name):
>          """Get the numeric uid of the process owning the given bus name.
>  
> diff --git a/dbus/connection.py b/dbus/connection.py
> index b78e221..1de5ec4 100644
> --- a/dbus/connection.py
> +++ b/dbus/connection.py
> @@ -16,11 +16,15 @@
>  # along with this program; if not, write to the Free Software
>  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
>  
> +__all__ = ('Connection',)
> +__docformat__ = 'reStructuredText'
> +
>  import logging
>  
>  from _dbus_bindings import Connection as _Connection, ErrorMessage, \
>                             MethodCallMessage, MethodReturnMessage, \
>                             DBusException, LOCAL_PATH, LOCAL_IFACE
> +from dbus.proxies import ProxyObject
>  
> 
>  _logger = logging.getLogger('dbus.methods')
> @@ -31,6 +35,32 @@ def _noop(*args, **kwargs):
>  
> 
>  class Connection(_Connection):
> +    """A connection to another application. In this base class there is
> +    assumed to be no bus daemon.
> +    """
> +
> +    ProxyObjectClass = ProxyObject
> +
> +    def get_object(self, named_service, object_path, introspect=True):
> +        """Return a local proxy for the given remote object.
> +
> +        Method calls on the proxy are translated into method calls on the
> +        remote object.
> +
> +        :Parameters:
> +            `named_service` : str
> +                A bus name (either the unique name or a well-known name)
> +                of the application owning the object
> +            `object_path` : str
> +                The object path of the desired object
> +            `introspect` : bool
> +                If true (default), attempt to introspect the remote
> +                object to find out supported methods and their signatures
> +
> +        :Returns: a `dbus.proxies.ProxyObject`
> +        """
> +        return self.ProxyObjectClass(self, named_service, object_path,
> +                                     introspect=introspect)
>  
>      def activate_name_owner(self, bus_name):
>          """Return the unique name for the given bus name, activating it
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus



More information about the dbus mailing list