Add querying unnamed enums to structs
This commit is contained in:
@@ -8,7 +8,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 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, 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, DynamicUnion as C_DynamicUnion, fixMaybe, fixMaybeUnion, 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 CodeGeneratorRequest as C_CodeGeneratorRequest, Node as C_Node, EnumNode as C_EnumNode
|
||||||
from cython.operator cimport dereference as deref
|
from cython.operator cimport dereference as deref
|
||||||
@@ -278,7 +278,6 @@ cdef toPython(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 toPythonByValue(C_DynamicValue.Builder self, object parent):
|
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:
|
||||||
@@ -309,6 +308,12 @@ 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
|
||||||
@@ -326,6 +331,14 @@ cdef class _DynamicStructReader:
|
|||||||
def _has(self, field):
|
def _has(self, field):
|
||||||
return self.thisptr.has(field)
|
return self.thisptr.has(field)
|
||||||
|
|
||||||
|
cpdef which(self):
|
||||||
|
try:
|
||||||
|
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
|
||||||
cdef public object _parent
|
cdef public object _parent
|
||||||
@@ -381,6 +394,14 @@ 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):
|
||||||
|
try:
|
||||||
|
union = fixMaybeUnion(self.thisptr.getSchema().getUnnamedUnion())
|
||||||
|
except:
|
||||||
|
raise TypeError("This struct has no unnamed enums. You cannot call which on it")
|
||||||
|
|
||||||
|
return getWhichBuilder(self.thisptr.getByUnion(union))
|
||||||
|
|
||||||
cdef class _DynamicUnionReader:
|
cdef class _DynamicUnionReader:
|
||||||
cdef C_DynamicUnion.Reader thisptr
|
cdef C_DynamicUnion.Reader thisptr
|
||||||
cdef public object _parent
|
cdef public object _parent
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ cdef extern from "capnp/schema.h" namespace " ::capnp":
|
|||||||
Node.Reader getProto()
|
Node.Reader getProto()
|
||||||
MemberList getMembers()
|
MemberList getMembers()
|
||||||
Member getMemberByName(char * name)
|
Member getMemberByName(char * name)
|
||||||
|
Maybe[StructSchema.Union] getUnnamedUnion()
|
||||||
|
|
||||||
cdef cppclass EnumSchema:
|
cdef cppclass EnumSchema:
|
||||||
cppclass Enumerant:
|
cppclass Enumerant:
|
||||||
@@ -102,16 +103,21 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||||||
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()
|
||||||
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()
|
||||||
|
|
||||||
cdef extern from "fixMaybe.h":
|
cdef extern from "fixMaybe.h":
|
||||||
StructSchema.Member fixMaybe(Maybe[StructSchema.Member]) except+
|
StructSchema.Member fixMaybe(Maybe[StructSchema.Member]) 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":
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -70,6 +70,6 @@ setup(
|
|||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.2',
|
'Programming Language :: Python :: 3.2',
|
||||||
'Programming Language :: Python :: 3.3',
|
'Programming Language :: Python :: 3.3',
|
||||||
'Programming Language :: Python :: Implementation :: PyPy'
|
'Programming Language :: Python :: Implementation :: PyPy',
|
||||||
'Topic :: Communications'],
|
'Topic :: Communications'],
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user