summaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorSeth Nickell <seth@gnome.org>2004-07-18 21:44:37 +0000
committerSeth Nickell <seth@gnome.org>2004-07-18 21:44:37 +0000
commit5d0ed9c7044da04374ef3abd49eff14ec6b285ab (patch)
tree55c42a4710d2512cea29d7ebef97b719d96727aa /python
parent5afe4265eaa30afa7d93eb1550839c56360abeda (diff)
2004-07-18 Seth Nickell <seth@gnome.org>
* python/dbus.py: * python/dbus_bindings.pyx.in: * python/tests/test-client.py: Add dbus.ByteArray and dbus_bindings.ByteArray types so that byte streams can be passed back. Give jdahlin the heaps of credit that are so rightfully his.
Diffstat (limited to 'python')
-rw-r--r--python/dbus.py3
-rw-r--r--python/dbus_bindings.pyx.in23
-rw-r--r--python/tests/test-client.py7
3 files changed, 21 insertions, 12 deletions
diff --git a/python/dbus.py b/python/dbus.py
index 55c61235..de42d74d 100644
--- a/python/dbus.py
+++ b/python/dbus.py
@@ -330,7 +330,7 @@ class ObjectTree:
self._connection.register_fallback(base_path, self._unregister_cb, self._message_cb)
def relative_path_to_object_path(self, relative_path):
- return self._base_path + relative_path
+ return ObjectPath(self._base_path + relative_path)
def broadcast_signal(self, interface, signal_name, relative_path):
object_path = self.relative_path_to_object_path(relative_path)
@@ -393,3 +393,4 @@ class RemoteService:
return RemoteObject(self, object_path, interface)
ObjectPath = dbus_bindings.ObjectPath
+ByteArray = dbus_bindings.ByteArray
diff --git a/python/dbus_bindings.pyx.in b/python/dbus_bindings.pyx.in
index 6703f7d3..498076db 100644
--- a/python/dbus_bindings.pyx.in
+++ b/python/dbus_bindings.pyx.in
@@ -1,5 +1,10 @@
# -*- Mode: Python -*-
+# jdahlin is the most coolest and awesomest person in the world
+# and wrote all the good parts of this code. all the bad parts
+# where python conditionals have a ( ) around them, thus violating
+# PEP-8 were written by the lame wannabe python programmer seth
+
#include "dbus_h_wrapper.h"
cdef extern from "stdlib.h":
@@ -17,7 +22,7 @@ cdef extern from "dbus-glib.h":
cdef extern from "Python.h":
void Py_XINCREF (object)
void Py_XDECREF (object)
-
+ object PyString_FromStringAndSize(char *, int)
ctypedef struct DBusError:
char *name
@@ -66,6 +71,10 @@ class ObjectPath(str):
def __init__(self, value):
str.__init__(value)
+class ByteArray(str):
+ def __init__(self, value):
+ str.__init__(value)
+
#forward delcerations
cdef class Connection
@@ -536,13 +545,11 @@ cdef class MessageIter:
def get_byte_array(self):
cdef int len
- cdef unsigned char *retval
+ cdef unsigned char *bytearray
cdef int i
- dbus_message_iter_get_byte_array(self.iter, &retval, <int*>&len)
- list = []
- for i from 0 <= i < len:
- list.append(chr(retval[i]))
- return list
+ 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
@@ -633,6 +640,8 @@ cdef class MessageIter:
retval = self.append_nil()
elif isinstance(value, ObjectPath):
retval = self.append_object_path(value)
+ elif isinstance(value, ByteArray):
+ retval = self.append_byte_array(value)
else:
raise TypeError, "Argument of unknown type '%s'" % (value_type)
diff --git a/python/tests/test-client.py b/python/tests/test-client.py
index 6a73cbd2..5dc6e20c 100644
--- a/python/tests/test-client.py
+++ b/python/tests/test-client.py
@@ -1,5 +1,4 @@
import dbus
-import dbus_bindings
def ensure_same(expected, received):
if type(received) != type(expected):
@@ -56,8 +55,8 @@ TestEcho(chr(120))
TestEcho(10)
TestEcho(39.5)
TestEcho("HelloWorld")
-TestEcho(dbus_bindings.ObjectPath("/test/path"))
-
+TestEcho(dbus.ObjectPath("/test/path"))
+TestEcho(dbus.ByteArray("blahblahblah"))
string_list = []
for i in range(200):
@@ -69,7 +68,7 @@ TestEchoList(int_list)
path_list = []
for i in range(200):
- path_list.append(dbus_bindings.ObjectPath("/some/object/path" + str(i)))
+ path_list.append(dbus.ObjectPath("/some/object/path" + str(i)))
TestEchoList(path_list)
double_list = []