mirror of
https://github.com/capnproto/pycapnp.git
synced 2025-03-05 17:01:01 +01:00
Merge branch 'release/0.3.3'
This commit is contained in:
commit
91fef0eaf3
4 changed files with 29 additions and 157 deletions
20
README.md
20
README.md
|
@ -5,20 +5,20 @@
|
|||
First you need a system-wide installation of the Capnproto C++ library >= 0.3. Unfortunately, as of now, that means you have to build from the HEAD of Cap'n Proto. Follow these instructions to do so:
|
||||
|
||||
```bash
|
||||
wget https://github.com/kentonv/capnproto/archive/master.zip
|
||||
unzip master.zip
|
||||
cd capnproto-master/c++
|
||||
./setup-autotools.sh
|
||||
autoreconf -i
|
||||
./configure
|
||||
make -j6 check
|
||||
sudo make install
|
||||
sudo ldconfig
|
||||
wget https://github.com/kentonv/capnproto/archive/master.zip
|
||||
unzip master.zip
|
||||
cd capnproto-master/c++
|
||||
./setup-autotools.sh
|
||||
autoreconf -i
|
||||
./configure
|
||||
make -j6 check
|
||||
sudo make install
|
||||
sudo ldconfig
|
||||
```
|
||||
|
||||
A recent version of setuptools is also required. You can install a newer version with:
|
||||
|
||||
```python
|
||||
```bash
|
||||
pip install -U setuptools
|
||||
```
|
||||
|
||||
|
|
123
capnp/capnp.pyx
123
capnp/capnp.pyx
|
@ -9,9 +9,9 @@
|
|||
cimport cython
|
||||
cimport capnp_cpp as capnp
|
||||
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 libc.stdint cimport *
|
||||
|
@ -57,7 +57,6 @@ _Type = _make_enum('DynamicValue.Type',
|
|||
LIST = capnp.TYPE_LIST,
|
||||
ENUM = capnp.TYPE_ENUM,
|
||||
STRUCT = capnp.TYPE_STRUCT,
|
||||
UNION = capnp.TYPE_UNION,
|
||||
INTERFACE = capnp.TYPE_INTERFACE,
|
||||
OBJECT = capnp.TYPE_OBJECT)
|
||||
|
||||
|
@ -234,8 +233,6 @@ cdef class _DynamicValueReader:
|
|||
return list(_DynamicListReader()._init(self.thisptr.asList(), self._parent))
|
||||
elif type == capnp.TYPE_STRUCT:
|
||||
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:
|
||||
return fixMaybe(self.thisptr.asEnum().getEnumerant()).getProto().getName().cStr()
|
||||
elif type == capnp.TYPE_VOID:
|
||||
|
@ -268,8 +265,6 @@ cdef toPython(C_DynamicValue.Builder & self, object parent):
|
|||
return list(_DynamicListBuilder()._init(self.asList(), parent))
|
||||
elif type == capnp.TYPE_STRUCT:
|
||||
return _DynamicStructBuilder()._init(self.asStruct(), parent)
|
||||
elif type == capnp.TYPE_UNION:
|
||||
return _DynamicUnionBuilder()._init(self.asUnion(), parent)
|
||||
elif type == capnp.TYPE_ENUM:
|
||||
return fixMaybe(self.asEnum().getEnumerant()).getProto().getName().cStr()
|
||||
elif type == capnp.TYPE_VOID:
|
||||
|
@ -298,8 +293,6 @@ cdef toPythonByValue(C_DynamicValue.Builder self, object parent):
|
|||
return list(_DynamicListBuilder()._init(self.asList(), parent))
|
||||
elif type == capnp.TYPE_STRUCT:
|
||||
return _DynamicStructBuilder()._init(self.asStruct(), parent)
|
||||
elif type == capnp.TYPE_UNION:
|
||||
return _DynamicUnionBuilder()._init(self.asUnion(), parent)
|
||||
elif type == capnp.TYPE_ENUM:
|
||||
return fixMaybe(self.asEnum().getEnumerant()).getProto().getName().cStr()
|
||||
elif type == capnp.TYPE_VOID:
|
||||
|
@ -309,12 +302,6 @@ cdef toPythonByValue(C_DynamicValue.Builder self, object parent):
|
|||
else:
|
||||
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 C_DynamicStruct.Reader thisptr
|
||||
cdef public object _parent
|
||||
|
@ -333,12 +320,7 @@ cdef class _DynamicStructReader:
|
|||
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))
|
||||
return fixMaybe(self.thisptr.which()).getProto().getName().cStr()
|
||||
|
||||
cdef class _DynamicStructBuilder:
|
||||
cdef C_DynamicStruct.Builder thisptr
|
||||
|
@ -395,98 +377,13 @@ cdef class _DynamicStructBuilder:
|
|||
else:
|
||||
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")
|
||||
# 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 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())
|
||||
# return getWhichBuilder(self.thisptr.getByUnion(union))
|
||||
|
||||
cdef class Schema:
|
||||
cdef C_Schema thisptr
|
||||
|
@ -601,8 +498,6 @@ cdef class MessageReader:
|
|||
|
||||
cpdef _getRootNode(self):
|
||||
return _NodeReader().init(self.thisptr.getRootNode())
|
||||
cpdef _getRootCodeGeneratorRequest(self):
|
||||
return _CodeGeneratorRequestReader()._init(self.thisptr.getRootCodeGeneratorRequest())
|
||||
cpdef getRoot(self, schema):
|
||||
cdef StructSchema s
|
||||
if hasattr(schema, 'Schema'):
|
||||
|
|
|
@ -32,30 +32,23 @@ cdef extern from "capnp/schema.h" namespace " ::capnp":
|
|||
Schema getDependency(uint64_t id) except +
|
||||
#InterfaceSchema asInterface() const;
|
||||
|
||||
cdef cppclass MemberForward" ::capnp::StructSchema::Member":
|
||||
cdef cppclass MemberForward" ::capnp::StructSchema::Field":
|
||||
pass
|
||||
|
||||
cdef cppclass StructSchema(Schema):
|
||||
cppclass MemberList:
|
||||
cppclass FieldList:
|
||||
uint size()
|
||||
MemberForward operator[](uint index)
|
||||
|
||||
cppclass Union:
|
||||
StructNode.Union.Reader getProto()
|
||||
MemberList getMembers()
|
||||
MemberForward getMemberByName(char * name)
|
||||
|
||||
cppclass Member:
|
||||
cppclass Field:
|
||||
StructNode.Member.Reader getProto()
|
||||
StructSchema getContainingStruct()
|
||||
uint getIndex()
|
||||
MemberList getMembers()
|
||||
Union asUnion() except +
|
||||
FieldList getFields()
|
||||
|
||||
Node.Reader getProto()
|
||||
MemberList getMembers()
|
||||
Member getMemberByName(char * name)
|
||||
Maybe[StructSchema.Union] getUnnamedUnion()
|
||||
FieldList getFields()
|
||||
Field getFieldByName(char * name)
|
||||
|
||||
cdef cppclass EnumSchema:
|
||||
cppclass Enumerant:
|
||||
|
@ -96,28 +89,26 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||
TYPE_LIST " ::capnp::DynamicValue::LIST"
|
||||
TYPE_ENUM " ::capnp::DynamicValue::ENUM"
|
||||
TYPE_STRUCT " ::capnp::DynamicValue::STRUCT"
|
||||
TYPE_UNION " ::capnp::DynamicValue::UNION"
|
||||
TYPE_INTERFACE " ::capnp::DynamicValue::INTERFACE"
|
||||
TYPE_OBJECT " ::capnp::DynamicValue::OBJECT"
|
||||
|
||||
cdef cppclass DynamicStruct:
|
||||
cppclass Reader:
|
||||
DynamicValueForward.Reader get(char *) except +ValueError
|
||||
DynamicValueForward.Reader getByUnion'get'(StructSchema.Union member) except +ValueError
|
||||
bint has(char *) except +ValueError
|
||||
StructSchema getSchema()
|
||||
Maybe[StructSchema.Field] which()
|
||||
cppclass Builder:
|
||||
DynamicValueForward.Builder get(char *) except +ValueError
|
||||
DynamicValueForward.Builder getByUnion'get'(StructSchema.Union member) except +ValueError
|
||||
bint has(char *) except +ValueError
|
||||
void set(char *, DynamicValueForward.Reader&) except +ValueError
|
||||
DynamicValueForward.Builder init(char *, uint size)
|
||||
DynamicValueForward.Builder init(char *)
|
||||
StructSchema getSchema()
|
||||
Maybe[StructSchema.Field] which()
|
||||
|
||||
cdef extern from "fixMaybe.h":
|
||||
StructSchema.Member fixMaybe(Maybe[StructSchema.Member]) except+
|
||||
StructSchema.Union fixMaybeUnion'fixMaybe'(Maybe[StructSchema.Union]) except+
|
||||
StructSchema.Field fixMaybe(Maybe[StructSchema.Field]) except+
|
||||
EnumSchema.Enumerant fixMaybe(Maybe[EnumSchema.Enumerant]) except+
|
||||
|
||||
cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
||||
|
@ -125,17 +116,6 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||
uint16_t getRaw()
|
||||
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:
|
||||
cppclass Reader:
|
||||
DynamicValueForward.Reader operator[](uint) except +ValueError
|
||||
|
@ -167,7 +147,6 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||
Reader(DynamicList.Reader& value)
|
||||
Reader(DynamicEnum value)
|
||||
Reader(DynamicStruct.Reader& value)
|
||||
Reader(DynamicUnion.Reader& value)
|
||||
Type getType()
|
||||
int64_t asInt"as<int64_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"()
|
||||
DynamicList.Reader asList"as< ::capnp::DynamicList>"()
|
||||
DynamicStruct.Reader asStruct"as< ::capnp::DynamicStruct>"()
|
||||
DynamicUnion.Reader asUnion"as< ::capnp::DynamicUnion>"()
|
||||
DynamicEnum asEnum"as< ::capnp::DynamicEnum>"()
|
||||
Data.Reader asData"as< ::capnp::Data>"()
|
||||
cppclass Builder:
|
||||
|
@ -188,7 +166,6 @@ cdef extern from "capnp/dynamic.h" namespace " ::capnp":
|
|||
char * asText"as< ::capnp::Text>().cStr"()
|
||||
DynamicList.Builder asList"as< ::capnp::DynamicList>"()
|
||||
DynamicStruct.Builder asStruct"as< ::capnp::DynamicStruct>"()
|
||||
DynamicUnion.Builder asUnion"as< ::capnp::DynamicUnion>"()
|
||||
DynamicEnum asEnum"as< ::capnp::DynamicEnum>"()
|
||||
Data.Builder asData"as< ::capnp::Data>"()
|
||||
|
||||
|
|
2
setup.py
2
setup.py
|
@ -13,7 +13,7 @@ import os
|
|||
|
||||
MAJOR = 0
|
||||
MINOR = 3
|
||||
MICRO = 2
|
||||
MICRO = 3
|
||||
VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue