pass error messages into environment, None's are empty strings
[dbuscron] / dbuscron / command.py
index 43b0824..e25c5f6 100644 (file)
@@ -29,12 +29,13 @@ class Command(object):
             dbus_env = dict(
                     (('DBUS_ARG%d' % i, a) for i, a in enumerate(args_list)),
                     DBUS_ARGN   = str(len(args_list)),
-                    DBUS_SENDER = str(message.get_sender()),
-                    DBUS_DEST   = str(message.get_destination()),
-                    DBUS_IFACE  = str(message.get_interface()),
-                    DBUS_PATH   = str(message.get_path()),
-                    DBUS_MEMBER = str(message.get_member()),
+                    DBUS_SENDER = str(message.get_sender() or ''),
+                    DBUS_DEST   = str(message.get_destination() or ''),
+                    DBUS_IFACE  = str(message.get_interface() or ''),
+                    DBUS_PATH   = str(message.get_path() or ''),
+                    DBUS_MEMBER = str(message.get_member() or ''),
                     DBUS_BUS    = bus.__class__.__name__.lower()[0:-3],
+                    DBUS_ERROR  = str(message.get_error_name() or ''),
                     DBUS_TYPE   = get_dbus_message_type(message)
                     )
             env.update(dbus_env)
@@ -43,7 +44,17 @@ class Command(object):
             raise e
 
         if self.__auto_args:
-            args_list.insert(0, self.__file)
+            if dbus_env['DBUS_TYPE'] in ('signal', 'method_call'):
+                args_list[0:0] = [
+                    dbus_env['DBUS_IFACE'],
+                    dbus_env['DBUS_MEMBER']]
+            elif dbus_env['DBUS_TYPE'] == 'error':
+               args_list.insert(0, dbus_env['DBUS_ERROR'])
+
+            args_list[0:0] = [
+                    self.__file,
+                    dbus_env['DBUS_SENDER'],
+                    dbus_env['DBUS_DEST']]
         else:
             args_list = self.__args