Add defaults flag to capnp-json. Also remove 'which' field
This commit is contained in:
@@ -542,29 +542,27 @@ cdef _setDynamicFieldPtr(_DynamicSetterClasses * thisptr, field, value, parent):
|
|||||||
else:
|
else:
|
||||||
raise ValueError("Non primitive type")
|
raise ValueError("Non primitive type")
|
||||||
|
|
||||||
cdef _to_dict(msg):
|
cdef _to_dict(msg, bint verbose):
|
||||||
msg_type = type(msg)
|
msg_type = type(msg)
|
||||||
if msg_type is _DynamicListBuilder or msg_type is _DynamicListReader or msg_type is _DynamicResizableListBuilder:
|
if msg_type is _DynamicListBuilder or msg_type is _DynamicListReader or msg_type is _DynamicResizableListBuilder:
|
||||||
return [_to_dict(x) for x in msg]
|
return [_to_dict(x, verbose) for x in msg]
|
||||||
|
|
||||||
if msg_type is _DynamicStructBuilder or msg_type is _DynamicStructReader:
|
if msg_type is _DynamicStructBuilder or msg_type is _DynamicStructReader:
|
||||||
ret = {}
|
ret = {}
|
||||||
try:
|
try:
|
||||||
which = msg.which()
|
which = msg.which()
|
||||||
ret['which'] = which
|
ret[which] = _to_dict(getattr(msg, which), verbose)
|
||||||
ret[which] = _to_dict(getattr(msg, which))
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
for field in msg.schema.non_union_fields:
|
for field in msg.schema.non_union_fields:
|
||||||
if msg._has(field):
|
if verbose or msg._has(field):
|
||||||
ret[field] = _to_dict(getattr(msg, field))
|
ret[field] = _to_dict(getattr(msg, field), verbose)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
import collections as _collections
|
|
||||||
cdef _from_dict_helper(msg, field, d):
|
cdef _from_dict_helper(msg, field, d):
|
||||||
d_type = type(d)
|
d_type = type(d)
|
||||||
if d_type is dict:
|
if d_type is dict:
|
||||||
@@ -578,14 +576,12 @@ cdef _from_dict_helper(msg, field, d):
|
|||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
for key, val in d.iteritems():
|
for key, val in d.iteritems():
|
||||||
if key != 'which':
|
|
||||||
_from_dict_helper(sub_msg, key, val)
|
_from_dict_helper(sub_msg, key, val)
|
||||||
elif d_type is list and len(d) > 0:
|
elif d_type is list and len(d) > 0:
|
||||||
l = msg.init(field, len(d))
|
l = msg.init(field, len(d))
|
||||||
for i in range(len(d)):
|
for i in range(len(d)):
|
||||||
if isinstance(d[i], (dict, list)):
|
if isinstance(d[i], (dict, list)):
|
||||||
for key, val in d[i].iteritems():
|
for key, val in d[i].iteritems():
|
||||||
if key != 'which':
|
|
||||||
_from_dict_helper(l[i], key, val)
|
_from_dict_helper(l[i], key, val)
|
||||||
else:
|
else:
|
||||||
l[i] = d[i]
|
l[i] = d[i]
|
||||||
@@ -661,8 +657,8 @@ cdef class _DynamicStructReader:
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<%s reader %s>' % (self.schema.node.displayName, <char*>strStructReader(self.thisptr).cStr())
|
return '<%s reader %s>' % (self.schema.node.displayName, <char*>strStructReader(self.thisptr).cStr())
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self, verbose=False):
|
||||||
return _to_dict(self)
|
return _to_dict(self, verbose)
|
||||||
|
|
||||||
cpdef as_builder(self):
|
cpdef as_builder(self):
|
||||||
"""A method for casting this Builder to a Reader
|
"""A method for casting this Builder to a Reader
|
||||||
@@ -883,8 +879,8 @@ cdef class _DynamicStructBuilder:
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<%s builder %s>' % (self.schema.node.displayName, <char*>strStructBuilder(self.thisptr).cStr())
|
return '<%s builder %s>' % (self.schema.node.displayName, <char*>strStructBuilder(self.thisptr).cStr())
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self, verbose=False):
|
||||||
return _to_dict(self)
|
return _to_dict(self, verbose)
|
||||||
|
|
||||||
cdef class _DynamicStructPipeline:
|
cdef class _DynamicStructPipeline:
|
||||||
"""Reads Cap'n Proto structs
|
"""Reads Cap'n Proto structs
|
||||||
@@ -930,8 +926,8 @@ cdef class _DynamicStructPipeline:
|
|||||||
# def __repr__(self):
|
# def __repr__(self):
|
||||||
# return '<%s reader %s>' % (self.schema.node.displayName, strStructReader(self.thisptr).cStr())
|
# return '<%s reader %s>' % (self.schema.node.displayName, strStructReader(self.thisptr).cStr())
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self, verbose=False):
|
||||||
return _to_dict(self)
|
return _to_dict(self, verbose)
|
||||||
|
|
||||||
cdef class _DynamicOrphan:
|
cdef class _DynamicOrphan:
|
||||||
cdef C_DynamicOrphan thisptr
|
cdef C_DynamicOrphan thisptr
|
||||||
@@ -1148,8 +1144,8 @@ cdef class _RemotePromise:
|
|||||||
# def __repr__(self):
|
# def __repr__(self):
|
||||||
# return '<%s reader %s>' % (self.schema.node.displayName, strStructReader(self.thisptr).cStr())
|
# return '<%s reader %s>' % (self.schema.node.displayName, strStructReader(self.thisptr).cStr())
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self, verbose=False):
|
||||||
return _to_dict(self)
|
return _to_dict(self, verbose)
|
||||||
|
|
||||||
cdef class EventLoop:
|
cdef class EventLoop:
|
||||||
cdef SimpleEventLoop thisptr
|
cdef SimpleEventLoop thisptr
|
||||||
|
|||||||
@@ -10,10 +10,11 @@ def parse_args():
|
|||||||
parser.add_argument("command")
|
parser.add_argument("command")
|
||||||
parser.add_argument("schema_file")
|
parser.add_argument("schema_file")
|
||||||
parser.add_argument("struct_name")
|
parser.add_argument("struct_name")
|
||||||
|
parser.add_argument("-d", "--defaults", help="include default values in json output", action="store_true")
|
||||||
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
def encode(schema_file, struct_name):
|
def encode(schema_file, struct_name, **kwargs):
|
||||||
schema = capnp.load(schema_file)
|
schema = capnp.load(schema_file)
|
||||||
|
|
||||||
struct_schema = getattr(schema, struct_name)
|
struct_schema = getattr(schema, struct_name)
|
||||||
@@ -23,13 +24,13 @@ def encode(schema_file, struct_name):
|
|||||||
|
|
||||||
struct.write(sys.stdout)
|
struct.write(sys.stdout)
|
||||||
|
|
||||||
def decode(schema_file, struct_name):
|
def decode(schema_file, struct_name, defaults):
|
||||||
schema = capnp.load(schema_file)
|
schema = capnp.load(schema_file)
|
||||||
|
|
||||||
struct_schema = getattr(schema, struct_name)
|
struct_schema = getattr(schema, struct_name)
|
||||||
struct = struct_schema.read(sys.stdin)
|
struct = struct_schema.read(sys.stdin)
|
||||||
|
|
||||||
json.dump(struct.to_dict(), sys.stdout)
|
json.dump(struct.to_dict(defaults), sys.stdout)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
|
|||||||
Reference in New Issue
Block a user