def test_get_args_options(self): aeq = self.assertEqual s = _dbus_bindings.SignalMessage('/', 'foo.bar', 'baz') s.append(b'b', b'bytes', -1, 1, 'str', 'var', signature='yayiusv') aeq(s.get_args_list(), [ ord('b'), [ord('b'),ord('y'),ord('t'),ord('e'), ord('s')], -1, 1, 'str', 'var' ]) byte, bytes, int32, uint32, string, variant = s.get_args_list() aeq(byte.__class__, types.Byte) aeq(bytes.__class__, types.Array) aeq(bytes[0].__class__, types.Byte) aeq(int32.__class__, types.Int32) aeq(uint32.__class__, types.UInt32) aeq(string.__class__, types.String) aeq(string.variant_level, 0) aeq(variant.__class__, types.String) aeq(variant.variant_level, 1) byte, bytes, int32, uint32, string, variant = s.get_args_list( byte_arrays=True) aeq(byte.__class__, types.Byte) aeq(bytes.__class__, types.ByteArray) aeq(bytes, b'bytes') if is_py3: aeq(bytes[0].__class__, int) else: aeq(bytes[0].__class__, str) aeq(int32.__class__, types.Int32) aeq(uint32.__class__, types.UInt32) aeq(string.__class__, types.String) aeq(variant.__class__, types.String) aeq(variant.variant_level, 1) kwargs = {} if is_py2: kwargs['utf8_strings'] = True byte, bytes, int32, uint32, string, variant = s.get_args_list( **kwargs) aeq(byte.__class__, types.Byte) aeq(bytes.__class__, types.Array) aeq(bytes[0].__class__, types.Byte) aeq(int32.__class__, types.Int32) aeq(uint32.__class__, types.UInt32) if is_py2: aeq(string.__class__, types.UTF8String) aeq(string, 'str') if is_py2: aeq(variant.__class__, types.UTF8String) aeq(variant.variant_level, 1) aeq(variant, 'var')
def emit_signal(self, *args, **keywords): abs_path = None if path_keyword is not None: if self.SUPPORTS_MULTIPLE_OBJECT_PATHS: raise TypeError('path_keyword cannot be used on the ' 'signals of an object that supports ' 'multiple object paths') abs_path = keywords.pop(path_keyword, None) if (abs_path != self.__dbus_object_path__ and not self.__dbus_object_path__.startswith(abs_path + '/')): raise ValueError('Path %r is not below %r', abs_path, self.__dbus_object_path__) rel_path = None if rel_path_keyword is not None: rel_path = keywords.pop(rel_path_keyword, None) func(self, *args, **keywords) for location in self.locations: if abs_path is None: # non-deprecated case if rel_path is None or rel_path in ('/', ''): object_path = location[1] else: # will be validated by SignalMessage ctor in a moment object_path = location[1] + rel_path else: object_path = abs_path message = _dbus_bindings.SignalMessage(object_path, dbus_interface, member_name) message.append(signature=signature, *args) location[0].send_message(message)