diff --git a/capnp/capnp.pyx b/capnp/capnp.pyx index 719ea26..84c730f 100644 --- a/capnp/capnp.pyx +++ b/capnp/capnp.pyx @@ -9,7 +9,7 @@ cimport cython cimport capnp_cpp as capnp 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, SchemaParser as C_SchemaParser, ParsedSchema as C_ParsedSchema, VOID, ArrayPtr, StringPtr, DynamicOrphan as C_DynamicOrphan +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, SchemaParser as C_SchemaParser, ParsedSchema as C_ParsedSchema, VOID, ArrayPtr, StringPtr, String, StringTree, DynamicOrphan as C_DynamicOrphan from schema_cpp cimport Node as C_Node, EnumNode as C_EnumNode from cython.operator cimport dereference as deref @@ -73,6 +73,18 @@ cdef extern from "capnp/list.h" namespace " ::capnp": cdef extern from "" namespace "std": C_DynamicOrphan moveOrphan"std::move"(C_DynamicOrphan) +cdef extern from "" namespace " ::capnp": + StringTree printStructReader" ::capnp::prettyPrint"(C_DynamicStruct.Reader) + StringTree printStructBuilder" ::capnp::prettyPrint"(C_DynamicStruct.Builder) + StringTree printListReader" ::capnp::prettyPrint"(C_DynamicList.Reader) + StringTree printListBuilder" ::capnp::prettyPrint"(C_DynamicList.Builder) + +cdef extern from "" namespace " ::kj": + String strStructReader" ::kj::str"(C_DynamicStruct.Reader) + String strStructBuilder" ::kj::str"(C_DynamicStruct.Builder) + String strListReader" ::kj::str"(C_DynamicList.Reader) + String strListBuilder" ::kj::str"(C_DynamicList.Builder) + cdef class _NodeReader: cdef C_Node.Reader thisptr cdef init(self, C_Node.Reader other): @@ -144,6 +156,13 @@ cdef class _DynamicListReader: def __len__(self): return self.thisptr.size() + def __str__(self): + return printListReader(self.thisptr).flatten().cStr() + + def __repr__(self): + # TODO: Print the list type. + return '' % strListReader(self.thisptr).cStr() + cdef class _DynamicResizableListBuilder: """Class for building growable Cap'n Proto Lists @@ -315,6 +334,13 @@ cdef class _DynamicListBuilder: """ return _DynamicOrphan()._init(self.thisptr.disown(index), self._parent) + def __str__(self): + return printListBuilder(deref(self.thisptr)).flatten().cStr() + + def __repr__(self): + # TODO: Print the list type. + return '' % strListBuilder(deref(self.thisptr)).cStr() + cdef class _List_NestedNode_Reader: cdef List[C_Node.NestedNode].Reader thisptr cdef _init(self, List[C_Node.NestedNode].Reader other): @@ -439,6 +465,12 @@ cdef class _DynamicStructReader: def __dir__(self): return list(self.schema.fieldnames) + def __str__(self): + return printStructReader(self.thisptr).flatten().cStr() + + def __repr__(self): + return '<%s reader %s>' % (self.schema.node.displayName, strStructReader(self.thisptr).cStr()) + cdef class _DynamicStructBuilder: """Builds Cap'n Proto structs @@ -638,6 +670,12 @@ cdef class _DynamicStructBuilder: def __dir__(self): return list(self.schema.fieldnames) + def __str__(self): + return printStructBuilder(deref(self.thisptr)).flatten().cStr() + + def __repr__(self): + return '<%s builder %s>' % (self.schema.node.displayName, strStructBuilder(deref(self.thisptr)).cStr()) + cdef class _DynamicOrphan: cdef C_DynamicOrphan thisptr cdef public object _parent @@ -656,6 +694,12 @@ cdef class _DynamicOrphan: """ return toPython(self.thisptr.get(), self._parent) + def __str__(self): + return str(self.get()) + + def __repr__(self): + return repr(self.get()) + cdef class _Schema: cdef C_Schema thisptr cdef _init(self, C_Schema other): @@ -698,6 +742,9 @@ cdef class _StructSchema: def __get__(self): return _DynamicStructReader()._init(self.thisptr.getProto(), None) + def __repr__(self): + return '' % self.node.displayName + cdef class _ParsedSchema: cdef C_ParsedSchema thisptr cdef _init(self, C_ParsedSchema other): diff --git a/capnp/capnp_cpp.pxd b/capnp/capnp_cpp.pxd index 5397f03..832a14e 100644 --- a/capnp/capnp_cpp.pxd +++ b/capnp/capnp_cpp.pxd @@ -14,6 +14,12 @@ cdef extern from "capnp/common.h" namespace " ::capnp": cdef extern from "kj/string.h" namespace " ::kj": cdef cppclass StringPtr: StringPtr(char *) + cdef cppclass String: + char* cStr() + +cdef extern from "kj/string-tree.h" namespace " ::kj": + cdef cppclass StringTree: + String flatten() cdef extern from "kj/common.h" namespace " ::kj": cdef cppclass Maybe[T]: