Pure Python dbus-monitor implementation (w/o using libdbus)

Jakub Piotr Cłapa jpc at pld-linux.org
Wed Aug 10 17:33:33 PDT 2005


So here is the thing I was trying to scare you ;) with --- a pure Python 
DBus implementation together with a rather simple (it's just the debug 
mode I created while coding it) dbus-monitor. It connects to the bus 
(defaults to session bus but you could very easily change it to connect 
to any other address), sends Hello and AddMatch and displays everything 
that's coming from the bus.

It's better than dbus-monitor because it decodes every possible dbus 
message (it's not ,,too dumb'' for any signature) but on the other hand 
it's really experimental, purely coded (I'm proud of about 3/4 of the 
code, the rest is sometimes really messy) and possibly contains bugs. 
The good part is that it's 200Kb of easily readable (I hope) and quite 
heavily commented Python code and contains an almost fully featured 
protocol implementation with SASL authorization, Unmarshaling (these two 
are the ones I am proud of ;) and Marshaling.

It doesn't have any external dependencies (ok, it shouldn't, I may have 
missed something :) and works out of the box (it doesn't even know how 
to install itself, let alone requiring it ;).

It lacks much convenience code and is quite low-level but AFAI-tested-it 
works[1].

I would be really happy if it proved useful to anyone (although I don't 
expect much since the silence I got after the previous email ;). I could 
  clean it up, fix any errors and maintain it (if there is any demand) 
but probably only after Google's Summer of Code ends and I finally get 
some rest.

[1] It can successfully pass (send and receive) a structure like the one
     below which is sadly not possible with current Python bindings (they
     lack Variant (could be worked-around by using Structs instead of
     Arrays) and for unknown reason send only half of this message).

     Yes, this is complete XML (with all namespaces resolved):

   (
    ['jabber:x:delay', 'http://pyxmpp.jabberstudio.org/xmlns/common'],
    (
     '1:presence',
     {':to': 'jpc at zenburn.net/home/Bot', ':from': 
'jpc at zenburn.net/home/Psi'},
     [
      Variant ('\n'),
      Variant (
       (
        '0:x',
        {':stamp': '20050810T19:10:45', ':from': 
'jpc at zenburn.net/home/Psi'},
        []
       )
      ),
      Variant (
       (
        '1:show',
        {},
        [
         Variant ('dnd')
        ]
       )
      ),
      Variant ('\n'),
      Variant (
       (
        '1:status',
        {},
        [
         Variant ("I'm in love, not accidentally... :*\nWork... :)")
        ]
       )
      ),
      Variant ('\n'),
      Variant (
       (
        '1:priority',
        {},
        [
         Variant ('5')
        ]
       )
      ),
      Variant ('\n')
     ]
    )
   )

-- 
z wyrazami szacunku,
Jakub Piotr Cłapa


More information about the dbus mailing list