Fix for the removal of DynamicUnion from the C++ API
This commit is contained in:
123
capnp/capnp.pyx
123
capnp/capnp.pyx
@@ -9,9 +9,9 @@
|
|||||||
cimport cython
|
cimport cython
|
||||||
cimport capnp_cpp as capnp
|
cimport capnp_cpp as capnp
|
||||||
cimport schema_cpp
|
cimport schema_cpp
|
||||||
from capnp_cpp cimport SchemaLoader as C_SchemaLoader, Schema as C_Schema, StructSchema as C_StructSchema, DynamicStruct as C_DynamicStruct, DynamicValue as C_DynamicValue, Type as C_Type, DynamicList as C_DynamicList, DynamicUnion as C_DynamicUnion, fixMaybe, fixMaybeUnion, SchemaParser as C_SchemaParser, ParsedSchema as C_ParsedSchema, VOID, ArrayPtr, StringPtr
|
from capnp_cpp cimport SchemaLoader as C_SchemaLoader, 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, SchemaParser as C_SchemaParser, ParsedSchema as C_ParsedSchema, VOID, ArrayPtr, StringPtr
|
||||||
|
|
||||||
from schema_cpp cimport CodeGeneratorRequest as C_CodeGeneratorRequest, 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
|
||||||
|
|
||||||
from libc.stdint cimport *
|
from libc.stdint cimport *
|
||||||
@@ -57,7 +57,6 @@ _Type = _make_enum('DynamicValue.Type',
|
|||||||
LIST = capnp.TYPE_LIST,
|
LIST = capnp.TYPE_LIST,
|
||||||
ENUM = capnp.TYPE_ENUM,
|
ENUM = capnp.TYPE_ENUM,
|
||||||
STRUCT = capnp.TYPE_STRUCT,
|
STRUCT = capnp.TYPE_STRUCT,
|
||||||
UNION = capnp.TYPE_UNION,
|
|
||||||
INTERFACE = capnp.TYPE_INTERFACE,
|
INTERFACE = capnp.TYPE_INTERFACE,
|
||||||
OBJECT = capnp.TYPE_OBJECT)
|
OBJECT = capnp.TYPE_OBJECT)
|
||||||
|
|
||||||
@@ -234,8 +233,6 @@ cdef class _DynamicValueReader:
|
|||||||
return list(_DynamicListReader()._init(self.thisptr.asList(), self._parent))
|
return list(_DynamicListReader()._init(self.thisptr.asList(), self._parent))
|
||||||
elif type == capnp.TYPE_STRUCT:
|
elif type == capnp.TYPE_STRUCT:
|
||||||
return _DynamicStructReader()._init(self.thisptr.asStruct(), self._parent)
|
return _DynamicStructReader()._init(self.thisptr.asStruct(), self._parent)
|
||||||
elif type == capnp.TYPE_UNION:
|
|
||||||
return _DynamicUnionReader()._init(self.thisptr.asUnion(), self._parent)
|
|
||||||
elif type == capnp.TYPE_ENUM:
|
elif type == capnp.TYPE_ENUM:
|
||||||
return fixMaybe(self.thisptr.asEnum().getEnumerant()).getProto().getName().cStr()
|
return fixMaybe(self.thisptr.asEnum().getEnumerant()).getProto().getName().cStr()
|
||||||
elif type == capnp.TYPE_VOID:
|
elif type == capnp.TYPE_VOID:
|
||||||
@@ -268,8 +265,6 @@ cdef toPython(C_DynamicValue.Builder & self, object parent):
|
|||||||
return list(_DynamicListBuilder()._init(self.asList(), parent))
|
return list(_DynamicListBuilder()._init(self.asList(), parent))
|
||||||
elif type == capnp.TYPE_STRUCT:
|
elif type == capnp.TYPE_STRUCT:
|
||||||
return _DynamicStructBuilder()._init(self.asStruct(), parent)
|
return _DynamicStructBuilder()._init(self.asStruct(), parent)
|
||||||
elif type == capnp.TYPE_UNION:
|
|
||||||
return _DynamicUnionBuilder()._init(self.asUnion(), parent)
|
|
||||||
elif type == capnp.TYPE_ENUM:
|
elif type == capnp.TYPE_ENUM:
|
||||||
return fixMaybe(self.asEnum().getEnumerant()).getProto().getName().cStr()
|
return fixMaybe(self.asEnum().getEnumerant()).getProto().getName().cStr()
|
||||||
elif type == capnp.TYPE_VOID:
|
elif type == capnp.TYPE_VOID:
|
||||||
@@ -298,8 +293,6 @@ cdef toPythonByValue(C_DynamicValue.Builder self, object parent):
|
|||||||
return list(_DynamicListBuilder()._init(self.asList(), parent))
|
return list(_DynamicListBuilder()._init(self.asList(), parent))
|
||||||
elif type == capnp.TYPE_STRUCT:
|
elif type == capnp.TYPE_STRUCT:
|
||||||
return _DynamicStructBuilder()._init(self.asStruct(), parent)
|
return _DynamicStructBuilder()._init(self.asStruct(), parent)
|
||||||
elif type == capnp.TYPE_UNION:
|
|
||||||
return _DynamicUnionBuilder()._init(self.asUnion(), parent)
|
|
||||||
elif type == capnp.TYPE_ENUM:
|
elif type == capnp.TYPE_ENUM:
|
||||||
return fixMaybe(self.asEnum().getEnumerant()).getProto().getName().cStr()
|
return fixMaybe(self.asEnum().getEnumerant()).getProto().getName().cStr()
|
||||||
elif type == capnp.TYPE_VOID:
|
elif type == capnp.TYPE_VOID:
|
||||||
@@ -309,12 +302,6 @@ cdef toPythonByValue(C_DynamicValue.Builder self, object parent):
|
|||||||
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 getWhichReader(C_DynamicValue.Reader & val):
|
|
||||||
return fixMaybe(val.asUnion().which()).getProto().getName().cStr()
|
|
||||||
|
|
||||||
cdef getWhichBuilder(C_DynamicValue.Builder & val):
|
|
||||||
return fixMaybe(val.asUnion().which()).getProto().getName().cStr()
|
|
||||||
|
|
||||||
cdef class _DynamicStructReader:
|
cdef class _DynamicStructReader:
|
||||||
cdef C_DynamicStruct.Reader thisptr
|
cdef C_DynamicStruct.Reader thisptr
|
||||||
cdef public object _parent
|
cdef public object _parent
|
||||||
@@ -333,12 +320,7 @@ cdef class _DynamicStructReader:
|
|||||||
return self.thisptr.has(field)
|
return self.thisptr.has(field)
|
||||||
|
|
||||||
cpdef which(self):
|
cpdef which(self):
|
||||||
try:
|
return fixMaybe(self.thisptr.which()).getProto().getName().cStr()
|
||||||
union = fixMaybeUnion(self.thisptr.getSchema().getUnnamedUnion())
|
|
||||||
except:
|
|
||||||
raise TypeError("This struct has no unnamed enums. You cannot call which on it")
|
|
||||||
|
|
||||||
return getWhichReader(self.thisptr.getByUnion(union))
|
|
||||||
|
|
||||||
cdef class _DynamicStructBuilder:
|
cdef class _DynamicStructBuilder:
|
||||||
cdef C_DynamicStruct.Builder thisptr
|
cdef C_DynamicStruct.Builder thisptr
|
||||||
@@ -395,98 +377,13 @@ cdef class _DynamicStructBuilder:
|
|||||||
else:
|
else:
|
||||||
return toPythonByValue(self.thisptr.init(field, size), self._parent)
|
return toPythonByValue(self.thisptr.init(field, size), self._parent)
|
||||||
|
|
||||||
cpdef which(self):
|
# cpdef which(self):
|
||||||
try:
|
# try:
|
||||||
union = fixMaybeUnion(self.thisptr.getSchema().getUnnamedUnion())
|
# union = fixMaybeUnion(self.thisptr.getSchema().getUnnamedUnion())
|
||||||
except:
|
# except:
|
||||||
raise TypeError("This struct has no unnamed enums. You cannot call which on it")
|
# raise TypeError("This struct has no unnamed enums. You cannot call which on it")
|
||||||
|
|
||||||
return getWhichBuilder(self.thisptr.getByUnion(union))
|
# return getWhichBuilder(self.thisptr.getByUnion(union))
|
||||||
|
|
||||||
cdef class _DynamicUnionReader:
|
|
||||||
cdef C_DynamicUnion.Reader thisptr
|
|
||||||
cdef public object _parent
|
|
||||||
cdef _init(self, C_DynamicUnion.Reader other, object parent):
|
|
||||||
self.thisptr = other
|
|
||||||
self._parent = parent
|
|
||||||
return self
|
|
||||||
|
|
||||||
cpdef _get(self):
|
|
||||||
return _DynamicValueReader()._init(self.thisptr.get(), self._parent)
|
|
||||||
|
|
||||||
def __getattr__(self, field):
|
|
||||||
return self._get().toPython() # TODO: check that the field is right?
|
|
||||||
|
|
||||||
cpdef which(self):
|
|
||||||
return fixMaybe(self.thisptr.which()).getProto().getName().cStr()
|
|
||||||
|
|
||||||
cdef class _DynamicUnionBuilder:
|
|
||||||
cdef C_DynamicUnion.Builder thisptr
|
|
||||||
cdef public object _parent
|
|
||||||
cdef _init(self, C_DynamicUnion.Builder other, object parent):
|
|
||||||
self.thisptr = other
|
|
||||||
self._parent = parent
|
|
||||||
return self
|
|
||||||
|
|
||||||
def __getattr__(self, field):
|
|
||||||
return toPython(self.thisptr.get(), self._parent) # TODO: check that the field is right?
|
|
||||||
|
|
||||||
cdef _setattrInt(self, field, value):
|
|
||||||
cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(<long long>value)
|
|
||||||
self.thisptr.set(field, temp)
|
|
||||||
|
|
||||||
cdef _setattrDouble(self, field, value):
|
|
||||||
cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(<double>value)
|
|
||||||
self.thisptr.set(field, temp)
|
|
||||||
|
|
||||||
cdef _setattrBool(self, field, value):
|
|
||||||
cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(<bint>value)
|
|
||||||
self.thisptr.set(field, temp)
|
|
||||||
|
|
||||||
cdef _setattrString(self, field, value):
|
|
||||||
cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(<char*>value)
|
|
||||||
self.thisptr.set(field, temp)
|
|
||||||
|
|
||||||
cdef _setattrVoid(self, field):
|
|
||||||
cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(VOID)
|
|
||||||
self.thisptr.set(field, temp)
|
|
||||||
|
|
||||||
def __setattr__(self, field, value):
|
|
||||||
value_type = type(value)
|
|
||||||
if value_type is int:
|
|
||||||
self._setattrInt(field, value)
|
|
||||||
elif value_type is float:
|
|
||||||
self._setattrDouble(field, value)
|
|
||||||
elif value_type is bool:
|
|
||||||
self._setattrBool(field, value)
|
|
||||||
elif value_type is str:
|
|
||||||
self._setattrString(field, value)
|
|
||||||
elif value is None:
|
|
||||||
self._setattrVoid(field)
|
|
||||||
else:
|
|
||||||
raise ValueError("Non primitive type")
|
|
||||||
|
|
||||||
cpdef which(self):
|
|
||||||
return fixMaybe(self.thisptr.which()).getProto().getName().cStr()
|
|
||||||
|
|
||||||
cpdef init(self, field, size=None) except +ValueError:
|
|
||||||
if size is None:
|
|
||||||
return toPythonByValue(self.thisptr.init(field), self._parent)
|
|
||||||
else:
|
|
||||||
return toPythonByValue(self.thisptr.init(field, size), self._parent)
|
|
||||||
|
|
||||||
cdef class _CodeGeneratorRequestReader:
|
|
||||||
cdef C_CodeGeneratorRequest.Reader thisptr
|
|
||||||
cdef _init(self, C_CodeGeneratorRequest.Reader other):
|
|
||||||
self.thisptr = other
|
|
||||||
return self
|
|
||||||
|
|
||||||
property nodes:
|
|
||||||
def __get__(self):
|
|
||||||
return _List_Node_Reader()._init(self.thisptr.getNodes())
|
|
||||||
property requestedFiles:
|
|
||||||
def __get__(self):
|
|
||||||
return _List_UInt64_Reader()._init(self.thisptr.getRequestedFiles())
|
|
||||||
|
|
||||||
cdef class Schema:
|
cdef class Schema:
|
||||||
cdef C_Schema thisptr
|
cdef C_Schema thisptr
|
||||||
@@ -601,8 +498,6 @@ cdef class MessageReader:
|
|||||||
|
|
||||||
cpdef _getRootNode(self):
|
cpdef _getRootNode(self):
|
||||||
return _NodeReader().init(self.thisptr.getRootNode())
|
return _NodeReader().init(self.thisptr.getRootNode())
|
||||||
cpdef _getRootCodeGeneratorRequest(self):
|
|
||||||
return _CodeGeneratorRequestReader()._init(self.thisptr.getRootCodeGeneratorRequest())
|
|
||||||
cpdef getRoot(self, schema):
|
cpdef getRoot(self, schema):
|
||||||
cdef StructSchema s
|
cdef StructSchema s
|
||||||
if hasattr(schema, 'Schema'):
|
if hasattr(schema, 'Schema'):
|
||||||
|
|||||||
@@ -32,30 +32,23 @@ cdef extern from "capnp/schema.h" namespace " ::capnp":
|
|||||||
Schema getDependency(uint64_t id) except +
|
Schema getDependency(uint64_t id) except +
|
||||||
#InterfaceSchema asInterface() const;
|
#InterfaceSchema asInterface() const;
|
||||||
|
|
||||||
cdef cppclass MemberForward" ::capnp::StructSchema::Member":
|
cdef cppclass MemberForward" ::capnp::StructSchema::Field":
|
||||||
pass
|
pass
|
||||||
|
|
||||||
cdef cppclass StructSchema(Schema):
|
cdef cppclass StructSchema(Schema):
|
||||||
cppclass MemberList:
|
cppclass FieldList:
|
||||||
uint size()
|
uint size()
|
||||||
MemberForward operator[](uint index)
|
MemberForward operator[](uint index)
|
||||||
|
|
||||||
cppclass Union:
|
cppclass Field:
|
||||||
StructNode.Union.Reader getProto()
|
|
||||||
MemberList getMembers()
|
|
||||||
MemberForward getMemberByName(char * name)
|
|
||||||
|
|
||||||
cppclass Member:
|
|
||||||
StructNode.Member.Reader getProto()
|
StructNode.Member.Reader getProto()
|
||||||
StructSchema getContainingStruct()
|
StructSchema getContainingStruct()
|
||||||
uint getIndex()
|
uint getIndex()
|
||||||
MemberList getMembers()
|
FieldList getFields()
|
||||||
Union asUnion() except +
|
|
||||||
|
|
||||||
Node.Reader getProto()
|
Node.Reader getProto()
|
||||||
MemberList getMembers()
|
FieldList getFields()
|
||||||
Member getMemberByName(char * name)
|
Field getFieldByName(char * name)
|
||||||
Maybe[StructSchema.Union] getUnnamedUnion()
|
|
||||||
|
|
||||||
cdef cppclass EnumSchema:
|
cdef cppclass EnumSchema:
|
||||||
cppclass Enumerant:
|
cppclass Enumerant:
|
||||||
@@ -96,28 +89,26 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||||||
TYPE_LIST " ::capnp::DynamicValue::LIST"
|
TYPE_LIST " ::capnp::DynamicValue::LIST"
|
||||||
TYPE_ENUM " ::capnp::DynamicValue::ENUM"
|
TYPE_ENUM " ::capnp::DynamicValue::ENUM"
|
||||||
TYPE_STRUCT " ::capnp::DynamicValue::STRUCT"
|
TYPE_STRUCT " ::capnp::DynamicValue::STRUCT"
|
||||||
TYPE_UNION " ::capnp::DynamicValue::UNION"
|
|
||||||
TYPE_INTERFACE " ::capnp::DynamicValue::INTERFACE"
|
TYPE_INTERFACE " ::capnp::DynamicValue::INTERFACE"
|
||||||
TYPE_OBJECT " ::capnp::DynamicValue::OBJECT"
|
TYPE_OBJECT " ::capnp::DynamicValue::OBJECT"
|
||||||
|
|
||||||
cdef cppclass DynamicStruct:
|
cdef cppclass DynamicStruct:
|
||||||
cppclass Reader:
|
cppclass Reader:
|
||||||
DynamicValueForward.Reader get(char *) except +ValueError
|
DynamicValueForward.Reader get(char *) except +ValueError
|
||||||
DynamicValueForward.Reader getByUnion'get'(StructSchema.Union member) except +ValueError
|
|
||||||
bint has(char *) except +ValueError
|
bint has(char *) except +ValueError
|
||||||
StructSchema getSchema()
|
StructSchema getSchema()
|
||||||
|
Maybe[StructSchema.Field] which()
|
||||||
cppclass Builder:
|
cppclass Builder:
|
||||||
DynamicValueForward.Builder get(char *) except +ValueError
|
DynamicValueForward.Builder get(char *) except +ValueError
|
||||||
DynamicValueForward.Builder getByUnion'get'(StructSchema.Union member) except +ValueError
|
|
||||||
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)
|
||||||
DynamicValueForward.Builder init(char *)
|
DynamicValueForward.Builder init(char *)
|
||||||
StructSchema getSchema()
|
StructSchema getSchema()
|
||||||
|
Maybe[StructSchema.Field] which()
|
||||||
|
|
||||||
cdef extern from "fixMaybe.h":
|
cdef extern from "fixMaybe.h":
|
||||||
StructSchema.Member fixMaybe(Maybe[StructSchema.Member]) except+
|
StructSchema.Field fixMaybe(Maybe[StructSchema.Field]) except+
|
||||||
StructSchema.Union fixMaybeUnion'fixMaybe'(Maybe[StructSchema.Union]) except+
|
|
||||||
EnumSchema.Enumerant fixMaybe(Maybe[EnumSchema.Enumerant]) except+
|
EnumSchema.Enumerant fixMaybe(Maybe[EnumSchema.Enumerant]) except+
|
||||||
|
|
||||||
cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
||||||
@@ -125,17 +116,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 DynamicUnion:
|
|
||||||
cppclass Reader:
|
|
||||||
DynamicValueForward.Reader get() except +ValueError
|
|
||||||
Maybe[StructSchema.Member] which()
|
|
||||||
cppclass Builder:
|
|
||||||
DynamicValueForward.Builder get() except +ValueError
|
|
||||||
Maybe[StructSchema.Member] which()
|
|
||||||
void set(char *, DynamicValueForward.Reader&) except +ValueError
|
|
||||||
DynamicValueForward.Builder init(char *, uint size)
|
|
||||||
DynamicValueForward.Builder init(char *)
|
|
||||||
|
|
||||||
cdef cppclass DynamicList:
|
cdef cppclass DynamicList:
|
||||||
cppclass Reader:
|
cppclass Reader:
|
||||||
DynamicValueForward.Reader operator[](uint) except +ValueError
|
DynamicValueForward.Reader operator[](uint) except +ValueError
|
||||||
@@ -167,7 +147,6 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||||||
Reader(DynamicList.Reader& value)
|
Reader(DynamicList.Reader& value)
|
||||||
Reader(DynamicEnum value)
|
Reader(DynamicEnum value)
|
||||||
Reader(DynamicStruct.Reader& value)
|
Reader(DynamicStruct.Reader& value)
|
||||||
Reader(DynamicUnion.Reader& value)
|
|
||||||
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>"()
|
||||||
@@ -176,7 +155,6 @@ 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>"()
|
||||||
DynamicUnion.Reader asUnion"as< ::capnp::DynamicUnion>"()
|
|
||||||
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:
|
||||||
@@ -188,7 +166,6 @@ 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>"()
|
||||||
DynamicUnion.Builder asUnion"as< ::capnp::DynamicUnion>"()
|
|
||||||
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