Auto-Introspection In DBussy/Ravel

Lawrence D'Oliveiro <ldo-kC51rjc0cqs1dNLGKZg6taU/[email protected]>
Newsgroups gmane.comp.freedesktop.dbus
Organization Geek Central
Message-ID <[email protected]>
I previously mentioned DBussy <https://gitlab.com/ldo/dbussy>,
<https://github.com/ldo/dbussy>, my pure-Python wrapper around libdbus
that uses the coroutine feature added in Python 3.5.

This consists of two modules: “dbussy”, which implements the core
libdbus support and various related definitions mentioned in the D-Bus
spec; and “ravel”, which adds a higher-level layer of Python interface
classes that represent D-Bus interfaces.

I have also published a repo of examples for the use of this library
<https://github.com/ldo/dbussy_examples>,
<https://gitlab.com/ldo/dbussy_examples>. I will probably add more
elaborate examples as I get more features working.

I have been working on an auto-introspection feature in the ravel
layer. A simple instance of this is currently included in the
“bigben_server_ravelled” example script. The main services provided by
this script are defined by this interface class:

    @ravel.interface(ravel.INTERFACE.SERVER, name = my_iface_name)
    class BigBen :

        @ravel.method \
          (
            name = "whats_the_time",
            in_signature = "",
            out_signature = "s"
          )
        async def handle_whats_the_time(self) :
            ...

        @ravel.signal(name = "chime", in_signature = "as")
        def chime_dummy(self) : pass

        @ravel.method \
          (
            name = "stop",
            in_signature = "",
            out_signature = "",
            connection_keyword = "conn",
            message_keyword = "message",
          )
        def handle_stop(self, conn, message) :
            ...

    #end BigBen

and registered on the bus connection with

    bus.register \
      (
        path = "/",
        fallback = True,
        interface = BigBen
      )

When you send an Introspect request to this server, the following XML
is automatically generated and returned:

    <node name="/">
        <interface name="com.example.bigben">
            <method name="stop"/>
            <method name="whats_the_time">
                <arg type="s" direction="out"/>
            </method>
            <signal name="chime">
                <arg type="as"/>
            </signal>
        </interface>
        <interface name="org.freedesktop.DBus.Introspectable">
            <method name="Introspect">
                <arg type="s" direction="out"/>
            </method>
        </interface>
    </node>
_______________________________________________
dbus mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dbus
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.