unregister dbus match rule in it's destructor
[dbuscron] / dbuscron / bus.py
index 6c07f36..2bf9116 100644 (file)
@@ -1,15 +1,19 @@
 
 import dbus
 
+from dbuscron.logger import Logger
+log = Logger(__name__)
+
 def dbus_to_str(value):
+    log('converting', value, 'of type', type(value))
     if isinstance(value, dbus.Byte):
         return str(int(value))
     elif isinstance(value, dbus.ByteArray):
         return ','.join(str(ord(v)) for v in value)
     elif isinstance(value, dbus.Array):
-        return ','.join(str(v) for v in value)
+        return ','.join(dbus_to_str(v) for v in value)
     elif isinstance(value, dbus.Dictionary):
-        return ','.join('%s:%s' % (k, v) for k, v in value.iteritems())
+        return ','.join('%s:%s' % (k, dbus_to_str(v)) for k, v in value.iteritems())
     else:
         return str(value)
 
@@ -69,7 +73,15 @@ class DbusRule(object):
     def register(self):
         rule = str(self)
         if rule:
-            self._bus.add_match_string(str(self))
+            self._bus.add_match_string(rule)
+
+    def unregister(self):
+        rule = str(self)
+        if rule:
+            self._bus.remove_match_string(rule)
+
+    def __del__(self):
+       self.unregister()
 
     def __str__(self):
         rule = []