strange dbus/python callback behavior
John (J5) Palmieri
johnp at redhat.com
Mon May 1 08:04:40 PDT 2006
On Sun, 2006-04-30 at 09:17 -0700, Chris Rebert wrote:
> Well, if the the different call sequences are like you say they are,
> then changing:
>
> class GaimControl:
> # Network device activated
> def nm_device_active_cb(self,path):
> self.start_gaim()
>
> to
>
> class GaimControl:
> # Network device activated
> def nm_device_active_cb(self, path, wireless=None):
> self.start_gaim()
>
> should work.
Yep that should work. I've rolled my eyes at the NetworkManager
developers about using variable length parameters but for better or
worse they do.
> - Chris Rebert
>
> Richard Ferguson wrote:
> > A while back I wrote a small app that just sits and listens to
> > NetworkManager's dbus signals. When a device would come up it would start
> > Gaim, and when a device would go down it would close Gaim. Not very
> > complex but handy when suspending all the time.
> >
> > After recently upgrading to Ubuntu Dapper, my app started showing some
> > strange behavior with one of its call backs.
> >
> > I have attached my app, but here is my code that connects to dbus.
> >
> > ----
> >
> > bus = dbus.SystemBus()
> > proxy_obj = bus.get_object('org.freedesktop.NetworkManager',
> > '/org/freedesktop/NetworkManager')
> > dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.NetworkManager')
> >
> > # Listen for NetworkManager signals
> > dbus_iface.connect_to_signal('DeviceNowActive', gc.nm_device_active_cb)
> > dbus_iface.connect_to_signal('DeviceNoLongerActive',
> > gc.nm_device_notactive_cb)
> >
> > ----
> >
> > The problem is, sometimes the 'DeviceNowActive' callback,
> > gc.nm_device_active_cb, gets called with 2 arguments, and sometimes with 3
> > arguments. I think its 2 for wireline and 3 for wireless.
> >
> > Any ideas on why this would happen? or how to handle it properly?
> > Thanks for your help
> >
> > richard ferguson
> >
> >
> > ------------------------------------------------------------------------
> >
> > #!/usr/bin/python
> > #
> > # nm-gaim-dbus.py - Watch for NetworkManager signals and
> > # shutdown/startup gaim when appropriate.
> > #
> > # Author: Richard Ferguson <gnome at fergusnet.com>
> > #
> > # ChangeLog
> > # -------- --- -------------------------------------------
> > # 11/18/05 RJF Initial Release
> > #
> >
> > import os
> >
> > import gtk
> > import dbus
> > import dbus.glib
> >
> > #######################################
> >
> > class GaimControl:
> > def __init__(self):
> > self.gaim_was_running = 0
> >
> > # Launch gaim
> > def start_gaim(self):
> > if self.gaim_was_running:
> > pid = os.fork()
> > if pid == 0:
> > os.execlp('gaim', 'gaim')
> >
> > # Shutdown gaim
> > def stop_gaim(self):
> > res = os.system('gaim-remote quit')
> > if res != 0:
> > self.gaim_was_running = 0
> > else:
> > self.gaim_was_running = 1
> >
> > # Network device activated
> > def nm_device_active_cb(self,path):
> > self.start_gaim()
> >
> > # Network device deactivated
> > def nm_device_notactive_cb(self,path):
> > self.stop_gaim()
> >
> > #######################################
> >
> > gc = GaimControl()
> >
> > # Connect to DBUS
> > bus = dbus.SystemBus()
> > proxy_obj = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
> > dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.NetworkManager')
> >
> > # Listen for NetworkManager signals
> > dbus_iface.connect_to_signal('DeviceNowActive', gc.nm_device_active_cb)
> > dbus_iface.connect_to_signal('DeviceNoLongerActive', gc.nm_device_notactive_cb)
> >
> > # Loop
> > gtk.main()
> >
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > dbus mailing list
> > dbus at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/dbus
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus
--
More information about the dbus
mailing list