Fix changed API for DynamicObject/ObjectPointer
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
cimport cython
|
cimport cython
|
||||||
cimport capnp_cpp as capnp
|
cimport capnp_cpp as capnp
|
||||||
cimport schema_cpp
|
cimport schema_cpp
|
||||||
from capnp_cpp cimport Schema as C_Schema, StructSchema as C_StructSchema, DynamicStruct as C_DynamicStruct, DynamicValue as C_DynamicValue, Type as C_Type, DynamicList as C_DynamicList, fixMaybe, getEnumString, SchemaParser as C_SchemaParser, ParsedSchema as C_ParsedSchema, VOID, ArrayPtr, StringPtr, String, StringTree, DynamicOrphan as C_DynamicOrphan, DynamicObject as C_DynamicObject, WordArrayPtr
|
from capnp_cpp cimport Schema as C_Schema, StructSchema as C_StructSchema, DynamicStruct as C_DynamicStruct, DynamicValue as C_DynamicValue, Type as C_Type, DynamicList as C_DynamicList, fixMaybe, getEnumString, SchemaParser as C_SchemaParser, ParsedSchema as C_ParsedSchema, VOID, ArrayPtr, StringPtr, String, StringTree, DynamicOrphan as C_DynamicOrphan, ObjectPointer as C_DynamicObject, WordArrayPtr
|
||||||
|
|
||||||
from schema_cpp cimport Node as C_Node, EnumNode as C_EnumNode
|
from schema_cpp cimport Node as C_Node, EnumNode as C_EnumNode
|
||||||
from cython.operator cimport dereference as deref
|
from cython.operator cimport dereference as deref
|
||||||
@@ -382,7 +382,7 @@ cdef to_python_builder(C_DynamicValue.Builder self, object parent):
|
|||||||
elif type == capnp.TYPE_VOID:
|
elif type == capnp.TYPE_VOID:
|
||||||
return None
|
return None
|
||||||
elif type == capnp.TYPE_OBJECT:
|
elif type == capnp.TYPE_OBJECT:
|
||||||
raise ValueError("Cannot convert type to Python. Type is 'Object', but is being used improperly. You can only get 'Object' types from a struct")
|
return _DynamicObjectBuilder()._init(self.asObject(), parent)
|
||||||
elif type == capnp.TYPE_UNKNOWN:
|
elif type == capnp.TYPE_UNKNOWN:
|
||||||
raise ValueError("Cannot convert type to Python. Type is unknown by capnproto library")
|
raise ValueError("Cannot convert type to Python. Type is unknown by capnproto library")
|
||||||
else:
|
else:
|
||||||
@@ -620,20 +620,8 @@ cdef class _DynamicStructBuilder:
|
|||||||
cdef _get(self, field):
|
cdef _get(self, field):
|
||||||
cdef C_DynamicValue.Builder value = self.thisptr.get(field)
|
cdef C_DynamicValue.Builder value = self.thisptr.get(field)
|
||||||
|
|
||||||
if value.getType() == capnp.TYPE_OBJECT:
|
return to_python_builder(value, self._parent)
|
||||||
return _DynamicObjectBuilder(field, self)
|
|
||||||
else:
|
|
||||||
return to_python_builder(value, self._parent)
|
|
||||||
|
|
||||||
cpdef _get_object(self, field, schema):
|
|
||||||
cdef _StructSchema s
|
|
||||||
if hasattr(schema, 'schema'):
|
|
||||||
s = schema.schema
|
|
||||||
else:
|
|
||||||
s = schema
|
|
||||||
|
|
||||||
return _DynamicStructBuilder()._init(self.thisptr.getObject(field, s.thisptr), self._parent)
|
|
||||||
|
|
||||||
def __getattr__(self, field):
|
def __getattr__(self, field):
|
||||||
return self._get(field)
|
return self._get(field)
|
||||||
|
|
||||||
@@ -800,16 +788,24 @@ cdef class _DynamicObjectReader:
|
|||||||
else:
|
else:
|
||||||
s = schema
|
s = schema
|
||||||
|
|
||||||
return _DynamicStructReader()._init(self.thisptr.as(s.thisptr), self._parent)
|
return _DynamicStructReader()._init(self.thisptr.getAs(s.thisptr), self._parent)
|
||||||
|
|
||||||
cdef class _DynamicObjectBuilder:
|
cdef class _DynamicObjectBuilder:
|
||||||
cdef public object _field, _parent_struct
|
cdef C_DynamicObject.Builder * thisptr
|
||||||
def __init__(self, field, parent_struct):
|
cdef public object _parent
|
||||||
self._field = field
|
cdef _init(self, C_DynamicObject.Builder other, object parent):
|
||||||
self._parent_struct = parent_struct
|
self.thisptr = new C_DynamicObject.Builder(other)
|
||||||
|
self._parent = parent
|
||||||
|
return self
|
||||||
|
|
||||||
cpdef as_struct(self, schema):
|
cpdef as_struct(self, schema):
|
||||||
return self._parent_struct._get_object(self._field, schema)
|
cdef _StructSchema s
|
||||||
|
if hasattr(schema, 'schema'):
|
||||||
|
s = schema.schema
|
||||||
|
else:
|
||||||
|
s = schema
|
||||||
|
|
||||||
|
return _DynamicStructBuilder()._init(self.thisptr.getAs(s.thisptr), self._parent)
|
||||||
|
|
||||||
cdef class _Schema:
|
cdef class _Schema:
|
||||||
cdef C_Schema thisptr
|
cdef C_Schema thisptr
|
||||||
|
|||||||
@@ -138,7 +138,14 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||||||
void adopt(char *, DynamicOrphan) except +ValueError
|
void adopt(char *, DynamicOrphan) except +ValueError
|
||||||
DynamicOrphan disown(char *)
|
DynamicOrphan disown(char *)
|
||||||
DynamicStruct.Reader asReader()
|
DynamicStruct.Reader asReader()
|
||||||
DynamicStruct.Builder getObject(char *, StructSchema)
|
|
||||||
|
cdef extern from "capnp/object.h" namespace " ::capnp":
|
||||||
|
cdef cppclass ObjectPointer:
|
||||||
|
cppclass Reader:
|
||||||
|
DynamicStruct.Reader getAs"getAs< ::capnp::DynamicStruct>"(StructSchema)
|
||||||
|
cppclass Builder:
|
||||||
|
Builder(Builder)
|
||||||
|
DynamicStruct.Builder getAs"getAs< ::capnp::DynamicStruct>"(StructSchema)
|
||||||
|
|
||||||
cdef extern from "fixMaybe.h":
|
cdef extern from "fixMaybe.h":
|
||||||
EnumSchema.Enumerant fixMaybe(Maybe[EnumSchema.Enumerant]) except +ValueError
|
EnumSchema.Enumerant fixMaybe(Maybe[EnumSchema.Enumerant]) except +ValueError
|
||||||
@@ -150,13 +157,6 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||||||
uint16_t getRaw()
|
uint16_t getRaw()
|
||||||
Maybe[EnumSchema.Enumerant] getEnumerant()
|
Maybe[EnumSchema.Enumerant] getEnumerant()
|
||||||
|
|
||||||
cdef cppclass DynamicObject:
|
|
||||||
cppclass Reader:
|
|
||||||
DynamicStruct.Reader as(StructSchema schema)
|
|
||||||
cppclass Builder:
|
|
||||||
DynamicObject.Reader asReader()
|
|
||||||
# DynamicList::Reader as(ListSchema schema) const;
|
|
||||||
|
|
||||||
cdef cppclass DynamicList:
|
cdef cppclass DynamicList:
|
||||||
cppclass Reader:
|
cppclass Reader:
|
||||||
DynamicValueForward.Reader operator[](uint) except +ValueError
|
DynamicValueForward.Reader operator[](uint) except +ValueError
|
||||||
@@ -201,12 +201,11 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||||||
char * asText"as< ::capnp::Text>().cStr"()
|
char * asText"as< ::capnp::Text>().cStr"()
|
||||||
DynamicList.Reader asList"as< ::capnp::DynamicList>"()
|
DynamicList.Reader asList"as< ::capnp::DynamicList>"()
|
||||||
DynamicStruct.Reader asStruct"as< ::capnp::DynamicStruct>"()
|
DynamicStruct.Reader asStruct"as< ::capnp::DynamicStruct>"()
|
||||||
DynamicObject.Reader asObject"as< ::capnp::DynamicObject>"()
|
ObjectPointer.Reader asObject"as< ::capnp::ObjectPointer>"()
|
||||||
DynamicEnum asEnum"as< ::capnp::DynamicEnum>"()
|
DynamicEnum asEnum"as< ::capnp::DynamicEnum>"()
|
||||||
Data.Reader asData"as< ::capnp::Data>"()
|
Data.Reader asData"as< ::capnp::Data>"()
|
||||||
|
|
||||||
cppclass Builder:
|
cppclass Builder:
|
||||||
Builder()
|
|
||||||
Type getType()
|
Type getType()
|
||||||
int64_t asInt"as<int64_t>"()
|
int64_t asInt"as<int64_t>"()
|
||||||
uint64_t asUint"as<uint64_t>"()
|
uint64_t asUint"as<uint64_t>"()
|
||||||
@@ -215,6 +214,7 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||||||
char * asText"as< ::capnp::Text>().cStr"()
|
char * asText"as< ::capnp::Text>().cStr"()
|
||||||
DynamicList.Builder asList"as< ::capnp::DynamicList>"()
|
DynamicList.Builder asList"as< ::capnp::DynamicList>"()
|
||||||
DynamicStruct.Builder asStruct"as< ::capnp::DynamicStruct>"()
|
DynamicStruct.Builder asStruct"as< ::capnp::DynamicStruct>"()
|
||||||
|
ObjectPointer.Builder asObject"as< ::capnp::ObjectPointer>"()
|
||||||
DynamicEnum asEnum"as< ::capnp::DynamicEnum>"()
|
DynamicEnum asEnum"as< ::capnp::DynamicEnum>"()
|
||||||
Data.Builder asData"as< ::capnp::Data>"()
|
Data.Builder asData"as< ::capnp::Data>"()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user