From f82cdc5c998d5392ab862333a827c81ccb6bf1c0 Mon Sep 17 00:00:00 2001 From: Jason Paryani Date: Thu, 22 Aug 2013 08:31:07 -0700 Subject: [PATCH 1/3] Fix random formatting issues --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5dac2a9..3ce31e9 100644 --- a/README.md +++ b/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 ``` From 8507eb69016ecdf5e8de63be908748703d79d2c6 Mon Sep 17 00:00:00 2001 From: Jason Paryani Date: Thu, 22 Aug 2013 09:18:29 -0700 Subject: [PATCH 2/3] Fix for the removal of DynamicUnion from the C++ API --- capnp/capnp.pyx | 123 ++++---------------------------------------- capnp/capnp_cpp.pxd | 41 ++++----------- 2 files changed, 18 insertions(+), 146 deletions(-) diff --git a/capnp/capnp.pyx b/capnp/capnp.pyx index 9c8c34d..46b259b 100644 --- a/capnp/capnp.pyx +++ b/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(value) - self.thisptr.set(field, temp) - - cdef _setattrDouble(self, field, value): - cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(value) - self.thisptr.set(field, temp) - - cdef _setattrBool(self, field, value): - cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(value) - self.thisptr.set(field, temp) - - cdef _setattrString(self, field, value): - cdef C_DynamicValue.Reader temp = C_DynamicValue.Reader(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'): diff --git a/capnp/capnp_cpp.pxd b/capnp/capnp_cpp.pxd index c96fa4f..8200265 100644 --- a/capnp/capnp_cpp.pxd +++ b/capnp/capnp_cpp.pxd @@ -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"() uint64_t asUint"as"() @@ -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>"() From 97d96ac08a1f4035ae48f9951f900a43a6bc4b0c Mon Sep 17 00:00:00 2001 From: Jason Paryani Date: Thu, 22 Aug 2013 09:19:33 -0700 Subject: [PATCH 3/3] Bump version for v0.3.3 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 5fa67f2..936d804 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ import os MAJOR = 0 MINOR = 3 -MICRO = 2 +MICRO = 3 VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO)