diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/_dbus.py | 8 | ||||
| -rw-r--r-- | python/dbus_bindings.pyx | 6 | ||||
| -rw-r--r-- | python/matchrules.py | 17 | 
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) | 
