summaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/_dbus.py8
-rw-r--r--python/dbus_bindings.pyx6
-rw-r--r--python/matchrules.py17
3 files changed, 24 insertions, 7 deletions
diff --git a/python/_dbus.py b/python/_dbus.py
index 2376f172..7e17d9f6 100644
--- a/python/_dbus.py
+++ b/python/_dbus.py
@@ -158,6 +158,8 @@ class Bus(object):
args_dict[num] = value
except ValueError:
raise TypeError("Invalid arg index %s"%snum)
+ elif key in ("sender_keyword", "path_keyword"):
+ pass
else:
raise TypeError("Unknown keyword %s"%(key))
@@ -178,6 +180,12 @@ class Bus(object):
match_rule = SignalMatchRule(signal_name, dbus_interface, named_service, path)
+ for kw in ("sender_keyword", "path_keyword"):
+ if kw in keywords:
+ setattr(match_rule, kw, keywords[kw])
+ else:
+ setattr(match_rule, kw, None)
+
if args_dict:
match_rule.add_args_match(args_dict)
diff --git a/python/dbus_bindings.pyx b/python/dbus_bindings.pyx
index 3bde96a1..836dbf8e 100644
--- a/python/dbus_bindings.pyx
+++ b/python/dbus_bindings.pyx
@@ -741,10 +741,10 @@ cdef class MessageIter:
return dbus_message_iter_get_element_type(self.iter)
def get_byte(self):
- cdef char c_val
- dbus_message_iter_get_basic(self.iter, <char *>&c_val)
+ cdef unsigned char c_val
+ dbus_message_iter_get_basic(self.iter, <unsigned char *>&c_val)
return c_val
-
+
def get_boolean(self):
cdef dbus_bool_t c_val
dbus_message_iter_get_basic(self.iter, <dbus_bool_t *>&c_val)
diff --git a/python/matchrules.py b/python/matchrules.py
index 3a2fbedf..023a5b76 100644
--- a/python/matchrules.py
+++ b/python/matchrules.py
@@ -130,16 +130,25 @@ class SignalMatchRule:
self.args = args
def execute(self, message, args=None):
- #optimization just in case we already extarcted the args
+ keywords = {}
+
+ if self.sender_keyword is not None:
+ keywords[self.sender_keyword] = message.get_sender()
+ if self.path_keyword is not None:
+ keywords[self.path_keyword] = message.get_path()
+
+ # optimization just in case we already extracted the args
if not args:
args = message.get_args_list()
for handler in self.handler_functions:
if getattr(handler, "_dbus_pass_message", False):
- keywords = {"dbus_message": message}
- handler(*args, **keywords)
- else:
+ keywords["dbus_message"] = message
+
+ if len(keywords) == 0:
handler(*args)
+ else:
+ handler(*args, **keywords)
def add_handler(self, handler):
self.handler_functions.append(handler)