diff options
Diffstat (limited to 'python')
-rw-r--r-- | python/dbus.py | 24 | ||||
-rw-r--r-- | python/dbus_bindings.pyx.in | 591 | ||||
-rw-r--r-- | python/examples/example-service.py | 4 | ||||
-rw-r--r-- | python/examples/example-signal-emitter.py | 3 | ||||
-rw-r--r-- | python/examples/list-system-services.py | 7 |
5 files changed, 277 insertions, 352 deletions
diff --git a/python/dbus.py b/python/dbus.py index 72919d90..e80b0cef 100644 --- a/python/dbus.py +++ b/python/dbus.py @@ -54,13 +54,13 @@ class Bus: """A connection to a DBus daemon. One of three possible standard buses, the SESSION, SYSTEM, - or ACTIVATION bus + or STARTER bus """ TYPE_SESSION = dbus_bindings.BUS_SESSION TYPE_SYSTEM = dbus_bindings.BUS_SYSTEM - TYPE_ACTIVATION = dbus_bindings.BUS_ACTIVATION + TYPE_STARTER = dbus_bindings.BUS_STARTER - """bus_type=[Bus.TYPE_SESSION | Bus.TYPE_SYSTEM | Bus.TYPE_ACTIVATION] + """bus_type=[Bus.TYPE_SESSION | Bus.TYPE_SYSTEM | Bus.TYPE_STARTER] """ START_REPLY_SUCCESS = dbus_bindings.DBUS_START_REPLY_SUCCESS @@ -117,7 +117,7 @@ class Bus: bus_service = self.get_service("org.freedesktop.DBus") bus_object = bus_service.get_object('/org/freedesktop/DBus', 'org.freedesktop.DBus') - service = bus_object.GetServiceOwner(service) + service = bus_object.GetNameOwner(service) match_rule = match_rule + ",sender='%s'" % (service) if (path): @@ -158,12 +158,12 @@ class SessionBus(Bus): def __init__(self): Bus.__init__(self, Bus.TYPE_SESSION) -class ActivationBus(Bus): +class StarterBus(Bus): """The bus that activated this process (if this process was launched by DBus activation) """ def __init__(self): - Bus.__init__(self, Bus.TYPE_ACTIVATION) + Bus.__init__(self, Bus.TYPE_STARTER) class RemoteObject: @@ -212,7 +212,7 @@ class RemoteMethod: message.set_destination(self._service_name) # Add the arguments to the function - iter = message.get_iter() + iter = message.get_iter(True) for arg in args: iter.append(arg) @@ -268,9 +268,9 @@ def _dispatch_dbus_method_call(target_method, argument_list, message): else: reply = dbus_bindings.MethodReturn(message) if retval != None: - iter = reply.get_iter() + iter = reply.get_iter(append=True) iter.append(retval) - + return reply def _build_method_dictionary(methods): @@ -305,7 +305,7 @@ class Object: def emit_signal(self, interface, signal_name, *args): message = dbus_bindings.Signal(self._object_path, interface, signal_name) - iter = message.get_iter() + iter = message.get_iter(True) for arg in args: iter.append(arg) @@ -320,10 +320,8 @@ class Object: args = message.get_args_list() reply = _dispatch_dbus_method_call(target_method, args, message) - - self._connection.send(reply) - + self._connection.send(reply) class ObjectTree: """An object tree allows you to register a handler for a tree of object paths. diff --git a/python/dbus_bindings.pyx.in b/python/dbus_bindings.pyx.in index b42ba7f3..2da70b31 100644 --- a/python/dbus_bindings.pyx.in +++ b/python/dbus_bindings.pyx.in @@ -426,13 +426,19 @@ cdef class Watch: cdef class MessageIter: cdef DBusMessageIter *iter cdef DBusMessageIter real_iter + cdef dbus_uint32_t level - def __init__(self): + def __init__(self, level=0): self.iter = &self.real_iter - + self.level = level + #don't allow us to recurse forever + #FIXME: what is a sane limit? + if(self.level > 100): + raise TypeError, 'Type recurion is too deep' + cdef __cinit__(self, DBusMessageIter *iter): self.real_iter = iter[0] - + cdef DBusMessageIter *_get_iter(self): return self.iter @@ -442,13 +448,12 @@ cdef class MessageIter: def next(self): return dbus_message_iter_next(self.iter) - def get(self): - arg_type = self.get_arg_type() + def get(self, arg_type=None): + if(arg_type == None): + arg_type = self.get_arg_type() if arg_type == TYPE_INVALID: raise TypeError, 'Invalid arg type in MessageIter' - elif arg_type == TYPE_NIL: - retval = None elif arg_type == TYPE_STRING: retval = self.get_string() elif arg_type == TYPE_INT32: @@ -465,186 +470,153 @@ cdef class MessageIter: retval = self.get_byte() elif arg_type == TYPE_BOOLEAN: retval = self.get_boolean() + elif arg_type == TYPE_SIGNATURE: + raise TypeError, 'Signitures not implemented yet!' + elif arg_type == TYPE_ARRAY: - array_type = self.get_array_type() - - if array_type == TYPE_STRING: - retval = self.get_string_array() - elif array_type == TYPE_OBJECT_PATH: - retval = self.get_object_path_array() - elif array_type == TYPE_BYTE: - retval = self.get_byte_array() - elif array_type == TYPE_INT32: - retval = self.get_int32_array() - elif array_type == TYPE_UINT32: - retval = self.get_uint32_array() - elif array_type == TYPE_INT64: - retval = self.get_int64_array() - elif array_type == TYPE_UINT64: - retval = self.get_uint64_array() - elif array_type == TYPE_DOUBLE: - retval = self.get_double_array() - else: - raise TypeError, "Unknown array type %d in MessageIter" % (array_type) - elif arg_type == TYPE_DICT: - retval = self.get_dict() + array_type = self.get_element_type() + retval = self.get_array(array_type) + #elif arg_type == TYPE_DICT: + # retval = self.get_dict() + # TODO: Implement DICT when new type system implements them elif arg_type == TYPE_OBJECT_PATH: retval = self.get_object_path() + elif arg_type == TYPE_STRUCT: + raise TypeError, 'Structs not implemented yet!' + #TODO: implement structs + elif arg_type == TYPE_VARIANT: + raise TypeError, 'Varients not implemented yet!' + #TODO: implement variants else: raise TypeError, 'Unknown arg type %d in MessageIter' % (arg_type) return retval - def get_dict(self): - cdef DBusMessageIter c_dict_iter - cdef MessageIter dict_iter - - dbus_message_iter_init_dict_iterator(self.iter, &c_dict_iter) - - dict_iter = MessageIter() - dict_iter.__cinit__(&c_dict_iter) - - dict = {} - - end_of_dict = False - - while True: - key = dict_iter.get_dict_key() - value = dict_iter.get() - dict[key] = value - if not dict_iter.has_next(): - break - dict_iter.next() - - return dict - +# TODO: Implement get_dict when DBUS supports dicts again +# def get_dict(self): +# cdef DBusMessageIter c_dict_iter +# cdef MessageIter dict_iter +# +# dbus_message_iter_recurse(self.iter, &c_dict_iter) +# +# dict_iter = MessageIter() +# dict_iter.__cinit__(&c_dict_iter) +# +# dict = {} +# +# end_of_dict = False +# +# while True: +# key = dict_iter.get_dict_key() +# value = dict_iter.get() +# dict[key] = value +# if not dict_iter.has_next(): +# break +# dict_iter.next() +# +# return dict def get_arg_type(self): return dbus_message_iter_get_arg_type(self.iter) - def get_array_type(self): - return dbus_message_iter_get_array_type(self.iter) - - # FIXME: implement get_byte - #def get_byte(self): - # return dbus_message_iter_get_byte(self.iter) + def get_element_type(self): + 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) + return c_val + def get_boolean(self): - return dbus_message_iter_get_boolean(self.iter) - + cdef dbus_bool_t c_val + dbus_message_iter_get_basic(self.iter, <dbus_bool_t *>&c_val) + return c_val + def get_int32(self): - return dbus_message_iter_get_int32(self.iter) - + cdef dbus_int32_t c_val + dbus_message_iter_get_basic(self.iter, <dbus_int32_t *>&c_val) + return c_val + def get_uint32(self): - return dbus_message_iter_get_uint32(self.iter) - + cdef dbus_uint32_t c_val + dbus_message_iter_get_basic(self.iter, <dbus_uint32_t *>&c_val) + return c_val + def get_int64(self): - return dbus_message_iter_get_int64(self.iter) + cdef dbus_int64_t c_val + dbus_message_iter_get_basic(self.iter, <dbus_int64_t *>&c_val) + return c_val def get_uint64(self): - return dbus_message_iter_get_uint64(self.iter) + cdef dbus_uint64_t c_val + dbus_message_iter_get_basic(self.iter, <dbus_uint64_t *>&c_val) + return c_val def get_double(self): - return dbus_message_iter_get_double(self.iter) + cdef double c_val + dbus_message_iter_get_basic(self.iter, <double *>&c_val) + return c_val def get_string(self): - return dbus_message_iter_get_string(self.iter) + cdef char *c_str + dbus_message_iter_get_basic(self.iter, <char **>&c_str) + return c_str def get_object_path(self): - object_path_string = dbus_message_iter_get_object_path(self.iter) + object_path_string = self.get_string() return ObjectPath(object_path_string) - - def get_dict_key(self): - return dbus_message_iter_get_dict_key(self.iter) - # FIXME: implement dbus_message_iter_init_array_iterator - - def get_byte_array(self): - cdef int len - cdef unsigned char *bytearray - cdef int i - dbus_message_iter_get_byte_array(self.iter, &bytearray, <int*>&len) - python_string = PyString_FromStringAndSize(<char *>bytearray, len) - return python_string - - # FIXME: implement dbus_message_iter_get_boolean_array - - def get_int32_array(self): - cdef int len - cdef dbus_int32_t *retval - cdef int i - dbus_message_iter_get_int32_array(self.iter, &retval, <int*>&len) - python_list = [] - for i from 0 <= i < len: - python_list.append(retval[i]) - return python_list +# TODO: Implement dict when DBUS supports it again +# def get_dict_key(self): +# return dbus_message_iter_get_dict_key(self.iter) - def get_uint32_array(self): - cdef int len - cdef dbus_uint32_t *retval - cdef int i - dbus_message_iter_get_uint32_array(self.iter, &retval, <int*>&len) - python_list = [] - for i from 0 <= i < len: - python_list.append(retval[i]) - return python_list + def get_array(self, type): + cdef DBusMessageIter c_array_iter + cdef MessageIter array_iter + level = self.level + 1 - def get_int64_array(self): - cdef int len - cdef dbus_int64_t *retval - cdef int i - dbus_message_iter_get_int64_array(self.iter, &retval, <int*>&len) + dbus_message_iter_recurse(self.iter, <DBusMessageIter *>&c_array_iter) + array_iter = MessageIter(level) + array_iter.__cinit__(&c_array_iter) + python_list = [] - for i from 0 <= i < len: - python_list.append(retval[i]) - return python_list + while True: + value = array_iter.get(type) + python_list.append(value) + if not array_iter.has_next(): + break + array_iter.next() - def get_uint64_array(self): - cdef int len - cdef dbus_uint64_t *retval - cdef int i - dbus_message_iter_get_uint64_array(self.iter, &retval, <int*>&len) - python_list = [] - for i from 0 <= i < len: - python_list.append(retval[i]) - return python_list - - def get_double_array(self): - cdef int len - cdef double *retval - cdef int i - dbus_message_iter_get_double_array(self.iter, &retval, <int*>&len) - python_list = [] - for i from 0 <= i < len: - python_list.append(retval[i]) return python_list + #FIXME: handle all the different types? + def python_value_to_dbus_sig(self, value): + ptype = type(value) + ret = "" + if ptype == bool: + ret = TYPE_BOOL + elif ptype == int: + ret = TYPE_INT32 + elif ptype == long: + ret = TYPE_INT64 + elif ptype == str: + ret = TYPE_STRING + elif ptype == float: + ret = TYPE_FLOAT +# elif ptype == dict: +# TODO: Implement dict when DBUS supports it again + elif ptype == list: + ret = TYPE_ARRAY + elif isinstance(value, ObjectPath): + ret = TYPE_PATH + else: + raise TypeError, "Argument of unknown type '%s'" % (ptype) - def get_string_array(self): - cdef int len - cdef char **retval - cdef int i - dbus_message_iter_get_string_array(self.iter, &retval, <int*>&len) - list = [] - for i from 0 <= i < len: - list.append(retval[i]) - return list - - def get_object_path_array(self): - cdef int len - cdef char **retval - cdef int i - dbus_message_iter_get_object_path_array(self.iter, &retval, <int*>&len) - list = [] - for i from 0 <= i < len: - list.append(ObjectPath(retval[i])) - return list - - # dbus_message_append_iter_init included in class Message + return str(chr(ret)) + #FIXME: handle all the different types? def append(self, value): value_type = type(value) - if value_type == bool: retval = self.append_boolean(value) elif value_type == int: @@ -655,172 +627,170 @@ cdef class MessageIter: retval = self.append_string(value) elif value_type == float: retval = self.append_double(value) - elif value_type == dict: - retval = self.append_dict(value) +# elif value_type == dict: +# retval = self.append_dict(value) +# TODO: Implement dict when DBUS supports it again elif value_type == list: - if len(value) == 0: - # Empty lists are currently not supported, returning None instead - retval = self.append(None) - else: - list_type = type(value[0]) - if list_type == str: - self.append_string_array(value) - elif list_type == int: - self.append_int32_array(value) - elif list_type == long: - self.append_int64_array(value) - elif list_type == float: - self.append_double_array(value) - elif isinstance(value[0], ObjectPath): - self.append_object_path_array(value) - else: - raise TypeError, "List of unknown type '%s'" % (list_type) - elif value_type == None.__class__: - retval = self.append_nil() + retval = self.append_array(value) + #elif value_type == None.__class__: + # retval = self.append_nil() elif isinstance(value, ObjectPath): retval = self.append_object_path(value) elif isinstance(value, ByteArray): - retval = self.append_byte_array(value) + retval = self.append_array(value) else: raise TypeError, "Argument of unknown type '%s'" % (value_type) return retval - def append_nil(self): - return dbus_message_iter_append_nil(self.iter) - def append_boolean(self, value): - return dbus_message_iter_append_boolean(self.iter, value) + cdef dbus_bool_t c_value + c_value = value + return dbus_message_iter_append_basic(self.iter, TYPE_BOOLEAN, <dbus_bool_t *>&c_value) def append_byte(self, value): + cdef char b if type(value) != str or len(value) != 1: raise TypeError - return dbus_message_iter_append_byte(self.iter, ord(value)) + + b = ord(value) + return dbus_message_iter_append_basic(self.iter, TYPE_BYTE, <char *>&b) def append_int32(self, value): - return dbus_message_iter_append_int32(self.iter, value) + cdef dbus_int32_t c_value + c_value = value + return dbus_message_iter_append_basic(self.iter, TYPE_INT32, <dbus_int32_t *>&c_value) def append_uint32(self, value): - return dbus_message_iter_append_uint32(self.iter, value) + cdef dbus_uint32_t c_value + c_value = value + return dbus_message_iter_append_basic(self.iter, TYPE_UINT32, <dbus_uint32_t *>&c_value) def append_int64(self, value): - return dbus_message_iter_append_int64(self.iter, value) + cdef dbus_int64_t c_value + c_value = value + return dbus_message_iter_append_basic(self.iter, TYPE_INT64, <dbus_int64_t *>&c_value) def append_uint64(self, value): - return dbus_message_iter_append_uint64(self.iter, value) + cdef dbus_uint64_t c_value + c_value = value + return dbus_message_iter_append_basic(self.iter, TYPE_UINT64, <dbus_uint64_t *>&c_value) def append_double(self, value): - return dbus_message_iter_append_double(self.iter, value) + cdef double c_value + c_value = value + return dbus_message_iter_append_basic(self.iter, TYPE_DOUBLE, <double *>&c_value) def append_string(self, value): - return dbus_message_iter_append_string(self.iter, value) - - def append_dict_key(self, value): - return dbus_message_iter_append_dict_key(self.iter, value) + cdef char *c_value + c_value = value + return dbus_message_iter_append_basic(self.iter, TYPE_STRING, <char **>&c_value) +# TODO: Implement dict when DBUS supports it again +# def append_dict_key(self, value): +# return dbus_message_iter_append_dict_key(self.iter, value) def append_object_path(self, value): - return dbus_message_iter_append_object_path(self.iter, value) + cdef char *c_value + c_value = value + return dbus_message_iter_append_basic(self.iter, TYPE_PATH, <char **>&c_value) # FIXME: append_array, append_boolean_array, append_uint32_array, # append_uint64_array +#TODO: Implement dict when DBUS supports it again +# def append_dict(self, python_dict): +# cdef DBusMessageIter c_dict_iter +# cdef MessageIter dict_iter +# +# dbus_message_iter_append_dict(self.iter, &c_dict_iter) +# +# dict_iter = MessageIter() +# dict_iter.__cinit__(&c_dict_iter) +# +# for key, value in python_dict.iteritems(): +# if type(key) != str: +# raise TypeError, "DBus dict keys must be strings" +# dict_iter.append_dict_key(key) +# dict_iter.append(value) + def append_array(self, python_list): + cdef DBusMessageIter c_array_iter + cdef MessageIter array_iter + + level = self.level + 1 + sig = self.python_value_to_dbus_sig(python_list[0]) + dbus_message_iter_open_container(self.iter, TYPE_ARRAY, sig, <DBusMessageIter *>&c_array_iter) + array_iter = MessageIter(level) + array_iter.__cinit__(&c_array_iter) - def append_dict(self, python_dict): - cdef DBusMessageIter c_dict_iter - cdef MessageIter dict_iter - - dbus_message_iter_append_dict(self.iter, &c_dict_iter) - - dict_iter = MessageIter() - dict_iter.__cinit__(&c_dict_iter) - - for key, value in python_dict.iteritems(): - if type(key) != str: - raise TypeError, "DBus dict keys must be strings" - dict_iter.append_dict_key(key) - dict_iter.append(value) - - def append_byte_array(self, python_list): - cdef unsigned char * value - cdef int length - cdef int i - length = len(python_list) - value = <unsigned char*>malloc(length * sizeof(unsigned char)) - for i from 0 <= i < length: - item = python_list[i] - if type(item) != str or len(item) != 1: - raise TypeError - value[i] = ord(item) - return dbus_message_iter_append_byte_array(self.iter, value, length) - - def append_int32_array(self, python_list): - cdef dbus_int32_t *value - cdef int length - cdef int i - length = len(python_list) - value = <dbus_int32_t*>malloc(length * sizeof(dbus_int32_t)) - for i from 0 <= i < length: - item = python_list[i] - if type(item) != int: - raise TypeError - value[i] = item - return dbus_message_iter_append_int32_array(self.iter, value, length) - - def append_int64_array(self, python_list): - cdef dbus_int64_t *value - cdef int length - cdef int i - length = len(python_list) - value = <dbus_int64_t*>malloc(length * sizeof(dbus_int64_t)) - for i from 0 <= i < length: - item = python_list[i] - if type(item) != int: - raise TypeError - value[i] = item - return dbus_message_iter_append_int64_array(self.iter, value, length) - - def append_double_array(self, python_list): - cdef double *value - cdef int length - cdef int i - length = len(python_list) - value = <double*>malloc(length * sizeof(double)) - for i from 0 <= i < length: - item = python_list[i] - if type(item) != float: - raise TypeError - value[i] = item - return dbus_message_iter_append_double_array(self.iter, value, length) - - def append_object_path_array(self, list): - cdef char **value - cdef int length - cdef int i - length = len(list) - value = <char**>malloc(length * sizeof(char *)) - for i from 0 <= i < length: - item = list[i] - if not isinstance(item, ObjectPath): - raise TypeError - value[i] = item - - return dbus_message_iter_append_object_path_array(self.iter, value, length) - - def append_string_array(self, python_list): - cdef char **value - cdef int length - cdef dbus_bool_t return_code - cdef int i length = len(python_list) - value = <char**>malloc(length * sizeof(char *)) - for i from 0 <= i < length: - item = python_list[i] - if type(item) != str: - raise TypeError - value[i] = item - return dbus_message_iter_append_string_array(self.iter, value, length) + for item in python_list: + if not array_iter.append(item): + dbus_message_iter_close_container(self.iter, array_iter.iter) + return False + + dbus_message_iter_close_container(self.iter, array_iter.iter) + + return True + + def __str__(self): + cdef DBusMessageIter c_array_iter + cdef MessageIter array_iter + + value_at_iter = True + retval = "" + while (value_at_iter): + type = self.get_arg_type() + if type == TYPE_INVALID: + break + elif type == TYPE_STRING: + str = iter.get_string() + arg = 'string:%s\n' % (str) + elif type == TYPE_OBJECT_PATH: + path = iter.get_object_path() + arg = 'object_path:%s\n' % (path) + elif type == TYPE_INT32: + num = iter.get_int32() + arg = 'int32:%d\n' % (num) + elif type == TYPE_UINT32: + num = iter.get_uint32() + arg = 'uint32:%u\n' % (num) + elif type == TYPE_INT64: + num = iter.get_int64() + arg = 'int64:%d\n' % (num) + elif type == TYPE_UINT64: + num = iter.get_uint64() + arg = 'uint64:%u\n' % (num) + elif type == TYPE_DOUBLE: + num = iter.get_double() + arg = 'double:%f\n' % (num) + elif type == TYPE_BYTE: + num = iter.get_byte() + arg = 'byte:%x(%s)\n' % (num, str(chr(num))) + elif type == TYPE_BOOLEAN: + bool = iter.get_boolean() + if (bool): + str = "true" + else: + str = "false" + arg = 'boolean:%s\n' % (str) + elif type == TYPE_ARRAY: + dbus_message_iter_recurse(self.iter, <DBusMessageIter *>&c_array_iter) + array_iter = MessageIter(self.level + 1) + array_iter.__cinit__(&c_array_iter) + if array_iter.has_next(): + arg = 'array [' + str(array_iter) + ']' + else: + arg = 'array []' + else: + arg = '(unknown arg type %d)\n' % type + + retval = retval + arg + value_at_iter = self.next() + + return retval + (MESSAGE_TYPE_INVALID, MESSAGE_TYPE_METHOD_CALL, MESSAGE_TYPE_METHOD_RETURN, MESSAGE_TYPE_ERROR, MESSAGE_TYPE_SIGNAL) = range(5) -(TYPE_INVALID, TYPE_NIL, TYPE_BYTE, TYPE_BOOLEAN, TYPE_INT32, TYPE_UINT32, TYPE_INT64, TYPE_UINT64, TYPE_DOUBLE, TYPE_STRING, TYPE_CUSTOM, TYPE_ARRAY, TYPE_DICT, TYPE_OBJECT_PATH) = (0, ord('v'), ord('y'), ord('b'), ord('i'), ord('u'), ord('x'), ord('t'), ord('d'), ord('s'), ord('c'), ord('a'), ord('m'), ord('o')) +(TYPE_INVALID, TYPE_BYTE, TYPE_BOOLEAN, TYPE_INT32, TYPE_UINT32, TYPE_INT64, TYPE_UINT64, TYPE_DOUBLE, TYPE_STRING, TYPE_OBJECT_PATH, TYPE_SIGNATURE, TYPE_ARRAY, TYPE_STRUCT, TYPE_STRUCT_START, TYPE_STRUCT_END, TYPE_VARIENT) = (0, ord('y'), ord('b'), ord('i'), ord('u'), ord('x'), ord('t'), ord('d'), ord('s'), ord('o'), ord('g'), ord('a'), ord('r'), ord('('), ord(')'), ord('v')) (HANDLER_RESULT_HANDLED, HANDLER_RESULT_NOT_YET_HANDLED, HANDLER_RESULT_NEED_MEMORY) = range(3) cdef class Message: @@ -865,7 +835,7 @@ cdef class Message: return "error" else: return "(unknown message type)" - + def __str__(self): message_type = self.get_type() sender = self.get_sender() @@ -892,51 +862,8 @@ cdef class Message: # FIXME: should really use self.convert_to_tuple() here iter = self.get_iter() - value_at_iter = True - - while (value_at_iter): - type = iter.get_arg_type() - if type == TYPE_INVALID: - break - elif type == TYPE_NIL: - arg = 'nil:None\n' - elif type == TYPE_STRING: - str = iter.get_string() - arg = 'string:%s\n' % (str) - elif type == TYPE_OBJECT_PATH: - path = iter.get_object_path() - arg = 'object_path:%s\n' % (path) - elif type == TYPE_INT32: - num = iter.get_int32() - arg = 'int32:%d\n' % (num) - elif type == TYPE_UINT32: - num = iter.get_uint32() - arg = 'uint32:%u\n' % (num) - elif type == TYPE_INT64: - num = iter.get_int64() - arg = 'int64:%d\n' % (num) - elif type == TYPE_UINT64: - num = iter.get_uint64() - arg = 'uint64:%u\n' % (num) - elif type == TYPE_DOUBLE: - num = iter.get_double() - arg = 'double:%f\n' % (num) - elif type == TYPE_BYTE: - num = iter.get_byte() - arg = 'byte:%d\n' % (num) - elif type == TYPE_BOOLEAN: - bool = iter.get_boolean() - if (bool): - str = "true" - else: - str = "false" - arg = 'boolean:%s\n' % (str) - else: - arg = '(unknown arg type %d)\n' % type - - retval = retval + arg - value_at_iter = iter.next() + retval = retval + "\n" + str(iter) return retval @@ -946,15 +873,19 @@ cdef class Message: cdef DBusMessage *_get_msg(self): return self.msg - def get_iter(self): + def get_iter(self, append=False): cdef DBusMessageIter iter cdef MessageIter message_iter cdef DBusMessage *msg msg = self._get_msg() - dbus_message_iter_init(msg, &iter) - message_iter = MessageIter() + if append: + dbus_message_iter_init_append(msg, &iter) + else: + dbus_message_iter_init(msg, &iter) + + message_iter = MessageIter(0) message_iter.__cinit__(&iter) return message_iter @@ -1109,7 +1040,7 @@ cdef class Server: BUS_SESSION = DBUS_BUS_SESSION BUS_SYSTEM = DBUS_BUS_SYSTEM -BUS_ACTIVATION = DBUS_BUS_ACTIVATION +BUS_STARTER = DBUS_BUS_STARTER def bus_get (bus_type): cdef DBusError error diff --git a/python/examples/example-service.py b/python/examples/example-service.py index 4f753cd8..1ea7fd86 100644 --- a/python/examples/example-service.py +++ b/python/examples/example-service.py @@ -8,8 +8,8 @@ class SomeObject(dbus.Object): dbus.Object.__init__(self, "/SomeObject", service, [self.HelloWorld]) def HelloWorld(self, message, hello_message): - print (hello_message) - return ["Hello", "from example-service.py"] + print (str(hello_message)) + return ["Hello", " from example-service.py"] session_bus = dbus.SessionBus() service = dbus.Service("org.designfu.SampleService", bus=session_bus) diff --git a/python/examples/example-signal-emitter.py b/python/examples/example-signal-emitter.py index edabfd70..bcd5ad6f 100644 --- a/python/examples/example-signal-emitter.py +++ b/python/examples/example-signal-emitter.py @@ -3,7 +3,7 @@ import gtk class TestObject(dbus.Object): def __init__(self, service): - dbus.Object.__init__(self, "/object", service, [self.HelloWorld]) + dbus.Object.__init__(self, "/org/designfu/TestService/object", service, [self.emitHelloSignal]) def emitHelloSignal(self, message): # Emit the signal @@ -15,4 +15,3 @@ service = dbus.Service("org.designfu.TestService", bus=session_bus) object = TestObject(service) gtk.main() -A diff --git a/python/examples/list-system-services.py b/python/examples/list-system-services.py index 9769fc5a..9b114da9 100644 --- a/python/examples/list-system-services.py +++ b/python/examples/list-system-services.py @@ -17,8 +17,5 @@ dbus_object = dbus_service.get_object('/org/freedesktop/DBus', # One of the member functions in the org.freedesktop.DBus interface # is ListServices(), which provides a list of all the other services # registered on this bus. Call it, and print the list. -system_service_list = dbus_object.ListServices() - -for service in system_service_list: - if service[0] != ':': - print (service) +system_service_list = dbus_object.ListNames() +print str(system_service_list) |