Implement __str__ and __repr__ for struct and list builders. __str__ uses prettyPrint while __repr__ shows the type name and the low-whitespace stringification. Also implement __repr__ for StructSchema, just because why not?
This commit is contained in:
@@ -9,7 +9,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 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 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
|
||||||
@@ -73,6 +73,18 @@ cdef extern from "capnp/list.h" namespace " ::capnp":
|
|||||||
cdef extern from "<utility>" namespace "std":
|
cdef extern from "<utility>" namespace "std":
|
||||||
C_DynamicOrphan moveOrphan"std::move"(C_DynamicOrphan)
|
C_DynamicOrphan moveOrphan"std::move"(C_DynamicOrphan)
|
||||||
|
|
||||||
|
cdef extern from "<capnp/pretty-print.h>" 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 "<kj/string.h>" 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 class _NodeReader:
|
||||||
cdef C_Node.Reader thisptr
|
cdef C_Node.Reader thisptr
|
||||||
cdef init(self, C_Node.Reader other):
|
cdef init(self, C_Node.Reader other):
|
||||||
@@ -144,6 +156,13 @@ cdef class _DynamicListReader:
|
|||||||
def __len__(self):
|
def __len__(self):
|
||||||
return self.thisptr.size()
|
return self.thisptr.size()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return printListReader(self.thisptr).flatten().cStr()
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
# TODO: Print the list type.
|
||||||
|
return '<capnp list reader %s>' % strListReader(self.thisptr).cStr()
|
||||||
|
|
||||||
cdef class _DynamicResizableListBuilder:
|
cdef class _DynamicResizableListBuilder:
|
||||||
"""Class for building growable Cap'n Proto Lists
|
"""Class for building growable Cap'n Proto Lists
|
||||||
|
|
||||||
@@ -315,6 +334,13 @@ cdef class _DynamicListBuilder:
|
|||||||
"""
|
"""
|
||||||
return _DynamicOrphan()._init(self.thisptr.disown(index), self._parent)
|
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 '<capnp list builder %s>' % strListBuilder(deref(self.thisptr)).cStr()
|
||||||
|
|
||||||
cdef class _List_NestedNode_Reader:
|
cdef class _List_NestedNode_Reader:
|
||||||
cdef List[C_Node.NestedNode].Reader thisptr
|
cdef List[C_Node.NestedNode].Reader thisptr
|
||||||
cdef _init(self, List[C_Node.NestedNode].Reader other):
|
cdef _init(self, List[C_Node.NestedNode].Reader other):
|
||||||
@@ -439,6 +465,12 @@ cdef class _DynamicStructReader:
|
|||||||
def __dir__(self):
|
def __dir__(self):
|
||||||
return list(self.schema.fieldnames)
|
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:
|
cdef class _DynamicStructBuilder:
|
||||||
"""Builds Cap'n Proto structs
|
"""Builds Cap'n Proto structs
|
||||||
|
|
||||||
@@ -638,6 +670,12 @@ cdef class _DynamicStructBuilder:
|
|||||||
def __dir__(self):
|
def __dir__(self):
|
||||||
return list(self.schema.fieldnames)
|
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 class _DynamicOrphan:
|
||||||
cdef C_DynamicOrphan thisptr
|
cdef C_DynamicOrphan thisptr
|
||||||
cdef public object _parent
|
cdef public object _parent
|
||||||
@@ -656,6 +694,12 @@ cdef class _DynamicOrphan:
|
|||||||
"""
|
"""
|
||||||
return toPython(self.thisptr.get(), self._parent)
|
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 class _Schema:
|
||||||
cdef C_Schema thisptr
|
cdef C_Schema thisptr
|
||||||
cdef _init(self, C_Schema other):
|
cdef _init(self, C_Schema other):
|
||||||
@@ -698,6 +742,9 @@ cdef class _StructSchema:
|
|||||||
def __get__(self):
|
def __get__(self):
|
||||||
return _DynamicStructReader()._init(self.thisptr.getProto(), None)
|
return _DynamicStructReader()._init(self.thisptr.getProto(), None)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<schema for %s>' % self.node.displayName
|
||||||
|
|
||||||
cdef class _ParsedSchema:
|
cdef class _ParsedSchema:
|
||||||
cdef C_ParsedSchema thisptr
|
cdef C_ParsedSchema thisptr
|
||||||
cdef _init(self, C_ParsedSchema other):
|
cdef _init(self, C_ParsedSchema other):
|
||||||
|
|||||||
@@ -14,6 +14,12 @@ cdef extern from "capnp/common.h" namespace " ::capnp":
|
|||||||
cdef extern from "kj/string.h" namespace " ::kj":
|
cdef extern from "kj/string.h" namespace " ::kj":
|
||||||
cdef cppclass StringPtr:
|
cdef cppclass StringPtr:
|
||||||
StringPtr(char *)
|
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 extern from "kj/common.h" namespace " ::kj":
|
||||||
cdef cppclass Maybe[T]:
|
cdef cppclass Maybe[T]:
|
||||||
|
|||||||
Reference in New Issue
Block a user