dbus-python 0.79.93 (= 0.80rc3) release candidate
John (J5) Palmieri
johnp at redhat.com
Wed Dec 20 13:26:33 PST 2006
On Wed, 2006-12-20 at 16:35 +0100, Luigi Paioro wrote:
> > I was under the impression that process_introspection_data would only be
> > useful internally. What do you use it for?
>
> Simply I use it to get all the interfaces and methods for each object I
> have.
>
> I try to explain in detail what I do in my code.
>
> I put on the bus objects which have methods and attributes. For each of
> them I export the general object interface and the
> org.freedesktop.DBus.Properties interface with the Get and Set method in
> order to handle the object attributes. To know all the object
> attributes, I also export a org.freedesktop.DBus.Properties.GetAll
> method which returns a dictionary with all the object attributes I want
> to handle.
>
> Then I've created a FriendlyInterface class which extends dbus.Interface
> class. Such class does something like what you example here below for
> the full introspection data. Using the process_introspection_data
> function I get a list of the interfaces and methods and I provide the
> method access putting it directly into the FriendlyInterface.__dict__.
> So I can view them through the python console typing TAB. I do the same
> thing getting the attribute list with
> org.freedesktop.DBus.Properties.GetAll: I put them in the __dict__ and I
> exploit the __getattr__ and __setattr__ to directly access them through
> org.freedesktop.DBus.Properties.Get and
> org.freedesktop.DBus.Properties.Set exported method.
>
> It's pretty tangled but it works.
>
>
> > The reason for the name change was that the libxml2 and expat versions
> > briefly existed in parallel during development. I didn't think the
> > introspect_parser was meant to be public API, hence the new name.
> > (Please note that it's slightly incompatible too - the old version
> > wanted unicode input, the new one wants UTF-8 str objects, and
> > dbus.proxies has been changed accordingly. I can make it backwards-compatibly
> > accept Unicode if you want.)
>
> It doesn't matter in my case, thanks...
>
> > I can move it back and make it "official" public API if you need it, but
> > I'm concerned that it only gives you a small subset of what's in the
> > introspection - no 'out' argument signatures, no annotations and no
> > list of sub-nodes.
>
> For the time being it's not a problem. My software is still a prototype
> under development... I can change it many times...
>
> > If the full introspection data would be useful, it seems a better API
> > to provide it via properties on the proxies, something like:
> >
> > >>> proxy = dbus.SessionBus().get_object('com.example.HelloWorld', '/')
> > >>> proxy.dbus_interfaces
> > ('com.example.HelloWorld',)
> > >>> proxy.dbus_methods
> > ('com.example.HelloWorld.SayHelloTo',)
> > >>> proxy.dbus_signals
> > ('com.example.HelloWorld.Greeting',)
> > >>> iface = dbus.Interface(proxy, 'com.example.HelloWorld')
> > >>> # method SayHelloTo(s: person) -> nothing
> > >>> iface.dbus_methods
> > ('SayHelloTo',)
> > >>> iface.SayHelloTo.in_signature
> > dbus.Signature('s')
> > >>> iface.SayHelloTo.out_signature
> > dbus.Signature('')
> > >>> iface.SayHelloTo.annotations
> > {'com.example.Annotated': 'yes'}
> > >>> iface.dbus_signals
> > >>> # signal Greeting(s: message)
> > ('Greeting',)
> > >>> iface.Greeting.signature
> > dbus.Signature('s')
> > >>> iface.Greeting.annotations
> > {'com.example.Annotated': 'yes'}
> > >>> iface.dbus_nodes
> > ('/SubObject', '/OtherObject')
> >
>
> This would be very nice! ^_^
>
> Luigi
Having a nice stable API we can support would be nice going forward.
One of the things I hate about python is it allows people access to
internal hacked up data that we haven't vetted for outside use. I would
rather have someone complain that they can't do something instead of
using hacks. That way we can fix the issue with input from real world
use cases. In any case patches and input welcomed.
--
John (J5) Palmieri <johnp at redhat.com>
More information about the dbus
mailing list