Don't match unset args
[dbuscron] / dbuscron / bus.py
index f82cb21..c766860 100644 (file)
@@ -2,7 +2,10 @@
 import dbus
 
 def get_dbus_message_type(message):
-    return message.__class__.__name__.lower()[0:-7]
+    result = message.__class__.__name__[0:-7]
+    for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
+        result = result.replace(c, '_'+c.lower())
+    return result.strip('_')
 
 class DbusBus(object):
     __bus = None
@@ -14,6 +17,10 @@ class DbusBus(object):
             cls.__bus = super(DbusBus, cls).__new__(cls)
         return cls.__bus
 
+    def __init__(self):
+        from dbus.mainloop.glib import DBusGMainLoop
+        DBusGMainLoop(set_as_default=True)
+
     @property
     def system(self):
         if not self.__system_bus:
@@ -90,12 +97,13 @@ class DbusRule(object):
         if self._destination not in (None, message.get_destination()):
             return False
 
-        args_ = message.get_args_list()
-        for i, arg in enumerate(args_):
-            if i >= len(self._args):
-                break
-            if self._args[i] not in (None, arg):
-                return False
+        if self._args is not None:
+            args_ = message.get_args_list()
+            for i, arg in enumerate(args_):
+                if i >= len(self._args):
+                    break
+                if self._args[i] not in (None, arg):
+                    return False
 
         return True