diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/decorators.py | 17 | ||||
| -rw-r--r-- | python/introspect_parser.py | 27 | ||||
| -rw-r--r-- | python/service.py | 4 | 
3 files changed, 26 insertions, 22 deletions
diff --git a/python/decorators.py b/python/decorators.py index 3973f3e4..e4cc0249 100644 --- a/python/decorators.py +++ b/python/decorators.py @@ -39,20 +39,25 @@ def signal(dbus_interface, signature=None):      _util._validate_interface_or_name(dbus_interface)      def decorator(func):          def emit_signal(self, *args, **keywords): -            func(self, *args, **keywords)            +            func(self, *args, **keywords)              message = dbus_bindings.Signal(self._object_path, dbus_interface, func.__name__)              iter = message.get_iter(True) -            -            for arg in args: -                iter.append(arg) -       + +            if emit_signal._dbus_signature: +                signature = tuple(dbus_bindings.Signature(emit_signal._dbus_signature)) +                for (arg, sig) in zip(args, signature): +                    iter.append_strict(arg, sig) +            else: +                for arg in args: +                    iter.append(arg) +              self._connection.send(message)          args = inspect.getargspec(func)[0]          args.pop(0)          if signature: -            sig = tuple(dbus_bindings.Signature(func._dbus_signature)) +            sig = tuple(dbus_bindings.Signature(signature))              if len(sig) > len(args):                  raise ValueError, 'signal signature is longer than the number of arguments provided' diff --git a/python/introspect_parser.py b/python/introspect_parser.py index 40cae1e7..47c9806e 100644 --- a/python/introspect_parser.py +++ b/python/introspect_parser.py @@ -13,35 +13,36 @@ def process_introspection_data(data):      reader = input_source.newTextReader("urn:introspect")      ret = reader.Read() -    current_iface='' -    current_method='' +    current_iface = None +    current_method = None      current_sigstr = '' -     +      while ret == 1:          name = reader.LocalName()          if reader.NodeType() == XMLREADER_START_ELEMENT_NODE_TYPE: -            if name == 'interface': +            if (not current_iface and not current_method and name == 'interface'):                  current_iface = reader.GetAttribute('name') -            elif name == 'method': +            elif (current_iface and not current_method and name == 'method'):                  current_method = reader.GetAttribute('name')                  if reader.IsEmptyElement(): -                    method_map[current_iface + '.' + current_method] = ''  -                    current_method = '' +                    method_map[current_iface + '.' + current_method] = '' +                    current_method = None                      current_sigstr = '' -                     -            elif name == 'arg': + +            elif (current_iface and current_method and name == 'arg'):                  direction = reader.GetAttribute('direction')                  if not direction or direction == 'in':                      current_sigstr = current_sigstr + reader.GetAttribute('type')          elif reader.NodeType() == XMLREADER_END_ELEMENT_NODE_TYPE: -            if name == 'method': -                method_map[current_iface + '.' + current_method] = current_sigstr  -                current_method = '' +            if (current_iface and not current_method and name == 'interface'): +                current_iface = None +            if (current_iface and current_method and name == 'method'): +                method_map[current_iface + '.' + current_method] = current_sigstr +                current_method = None                  current_sigstr = '' -                   ret = reader.Read()      if ret != 0: diff --git a/python/service.py b/python/service.py index d1973b04..3eec65f6 100644 --- a/python/service.py +++ b/python/service.py @@ -20,21 +20,19 @@ class BusName(object):          # otherwise register the name          retval = dbus_bindings.bus_request_name(bus.get_connection(), name) -        print retval +          # TODO: more intelligent tracking of bus name states?          if retval == dbus_bindings.REQUEST_NAME_REPLY_PRIMARY_OWNER:              pass          elif retval == dbus_bindings.REQUEST_NAME_REPLY_IN_QUEUE:              # you can't arrive at this state via the high-level bindings              # because you can't put flags in, but... who knows? -            print "joined queue for %s" % name              pass          elif retval == dbus_bindings.REQUEST_NAME_REPLY_EXISTS:              raise dbus_bindings.DBusException('requested name %s already exists' % name)          elif retval == dbus_bindings.REQUEST_NAME_REPLY_ALREADY_OWNER:              # if this is a shared bus which is being used by someone              # else in this process, this can happen legitimately -            print "already owner of %s" % name              pass          else:              raise dbus_bindings.DBusException('requesting name %s returned unexpected value %s' % (name, retval))  | 
