Fix new error with DynamicValue.Builder no longer being copyable

This commit is contained in:
Jason Paryani
2013-08-25 16:41:37 -07:00
parent 39e93ae4f8
commit ea1f22e5c6
2 changed files with 15 additions and 42 deletions

View File

@@ -134,13 +134,15 @@ cdef class _DynamicListBuilder:
# self.thisptr._init(size) # self.thisptr._init(size)
# return self # return self
cpdef _get(self, index) except +ValueError:
return toPython(self.thisptr[index], self._parent)
def __getitem__(self, index): def __getitem__(self, index):
size = self.thisptr.size() size = self.thisptr.size()
if index >= size: if index >= size:
raise IndexError('Out of bounds') raise IndexError('Out of bounds')
index = index % size index = index % size
temp = self.thisptr[index] return self._get(index)
return toPython(temp, self._parent)
def _setitem(self, index, valid_values value): def _setitem(self, index, valid_values value):
cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(value) cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(value)
@@ -242,39 +244,7 @@ cdef class _DynamicValueReader:
else: else:
raise ValueError("Cannot convert type to Python. Type is unhandled by capnproto library") raise ValueError("Cannot convert type to Python. Type is unhandled by capnproto library")
cdef toPython(C_DynamicValue.Builder self, object parent):
cdef int getType(C_DynamicValue.Builder & self):
return self.getType()
cdef toPython(C_DynamicValue.Builder & self, object parent):
cdef int type = getType(self)
if type == capnp.TYPE_BOOL:
return self.asBool()
elif type == capnp.TYPE_INT:
return self.asInt()
elif type == capnp.TYPE_UINT:
return self.asUint()
elif type == capnp.TYPE_FLOAT:
return self.asDouble()
elif type == capnp.TYPE_TEXT:
return self.asText()[:]
elif type == capnp.TYPE_DATA:
temp = self.asData()
return (<char*>temp.begin())[:temp.size()]
elif type == capnp.TYPE_LIST:
return list(_DynamicListBuilder()._init(self.asList(), parent))
elif type == capnp.TYPE_STRUCT:
return _DynamicStructBuilder()._init(self.asStruct(), parent)
elif type == capnp.TYPE_ENUM:
return fixMaybe(self.asEnum().getEnumerant()).getProto().getName().cStr()
elif type == capnp.TYPE_VOID:
return None
elif type == capnp.TYPE_UNKOWN:
raise ValueError("Cannot convert type to Python. Type is unknown by capnproto library")
else:
raise ValueError("Cannot convert type to Python. Type is unhandled by capnproto library")
cdef toPythonByValue(C_DynamicValue.Builder self, object parent):
cdef int type = self.getType() cdef int type = self.getType()
if type == capnp.TYPE_BOOL: if type == capnp.TYPE_BOOL:
return self.asBool() return self.asBool()
@@ -330,9 +300,12 @@ cdef class _DynamicStructBuilder:
self._parent = parent self._parent = parent
return self return self
def __getattr__(self, field): cpdef _get(self, field) except +ValueError:
return toPython(self.thisptr.get(field), self._parent) return toPython(self.thisptr.get(field), self._parent)
def __getattr__(self, field):
return self._get(field)
cdef _setattrInt(self, field, value): cdef _setattrInt(self, field, value):
cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(<long long>value) cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(<long long>value)
self.thisptr.set(field, temp) self.thisptr.set(field, temp)
@@ -373,9 +346,9 @@ cdef class _DynamicStructBuilder:
cpdef init(self, field, size=None) except +ValueError: cpdef init(self, field, size=None) except +ValueError:
if size is None: if size is None:
return toPythonByValue(self.thisptr.init(field), self._parent) return toPython(self.thisptr.init(field), self._parent)
else: else:
return toPythonByValue(self.thisptr.init(field, size), self._parent) return toPython(self.thisptr.init(field, size), self._parent)
# cpdef which(self): # cpdef which(self):
# try: # try:

View File

@@ -99,7 +99,7 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
StructSchema getSchema() StructSchema getSchema()
Maybe[StructSchema.Field] which() Maybe[StructSchema.Field] which()
cppclass Builder: cppclass Builder:
DynamicValueForward.Builder get(char *) except +ValueError DynamicValueForward.Builder get(char *)
bint has(char *) except +ValueError bint has(char *) except +ValueError
void set(char *, DynamicValueForward.Reader&) except +ValueError void set(char *, DynamicValueForward.Reader&) except +ValueError
DynamicValueForward.Builder init(char *, uint size) DynamicValueForward.Builder init(char *, uint size)
@@ -121,10 +121,10 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
DynamicValueForward.Reader operator[](uint) except +ValueError DynamicValueForward.Reader operator[](uint) except +ValueError
uint size() uint size()
cppclass Builder: cppclass Builder:
DynamicValueForward.Builder operator[](uint) except +ValueError DynamicValueForward.Builder operator[](uint)
uint size() uint size()
void set(uint index, DynamicValueForward.Reader& value) void set(uint index, DynamicValueForward.Reader& value) except +ValueError
DynamicValueForward.Builder init(uint index, uint size) DynamicValueForward.Builder init(uint index, uint size) except +ValueError
cdef cppclass DynamicValue: cdef cppclass DynamicValue:
cppclass Reader: cppclass Reader: