Merge pull request #33 from jfgo20/feature/v0.5
Support ordered dictionnary
This commit is contained in:
@@ -117,7 +117,7 @@ cdef class _DynamicListBuilder:
|
|||||||
|
|
||||||
cdef to_python_reader(C_DynamicValue.Reader self, object parent)
|
cdef to_python_reader(C_DynamicValue.Reader self, object parent)
|
||||||
cdef to_python_builder(C_DynamicValue.Builder self, object parent)
|
cdef to_python_builder(C_DynamicValue.Builder self, object parent)
|
||||||
cdef _to_dict(msg, bint verbose)
|
cdef _to_dict(msg, bint verbose, bint ordered)
|
||||||
cdef _from_list(_DynamicListBuilder msg, list d)
|
cdef _from_list(_DynamicListBuilder msg, list d)
|
||||||
cdef _setDynamicFieldWithField(DynamicStruct_Builder thisptr, _StructSchemaField field, value, parent)
|
cdef _setDynamicFieldWithField(DynamicStruct_Builder thisptr, _StructSchemaField field, value, parent)
|
||||||
cdef _setDynamicFieldStatic(DynamicStruct_Builder thisptr, field, value, parent)
|
cdef _setDynamicFieldStatic(DynamicStruct_Builder thisptr, field, value, parent)
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ from operator import attrgetter as _attrgetter
|
|||||||
import threading as _threading
|
import threading as _threading
|
||||||
import socket as _socket
|
import socket as _socket
|
||||||
import random as _random
|
import random as _random
|
||||||
|
import collections as _collections
|
||||||
|
|
||||||
_CAPNP_VERSION_MAJOR = capnp.CAPNP_VERSION_MAJOR
|
_CAPNP_VERSION_MAJOR = capnp.CAPNP_VERSION_MAJOR
|
||||||
_CAPNP_VERSION_MINOR = capnp.CAPNP_VERSION_MINOR
|
_CAPNP_VERSION_MINOR = capnp.CAPNP_VERSION_MINOR
|
||||||
@@ -830,49 +831,55 @@ cdef _DynamicListReader temp_list_r
|
|||||||
cdef _DynamicResizableListBuilder temp_list_rb
|
cdef _DynamicResizableListBuilder temp_list_rb
|
||||||
cdef _DynamicStructBuilder temp_msg_b
|
cdef _DynamicStructBuilder temp_msg_b
|
||||||
cdef _DynamicStructReader temp_msg_r
|
cdef _DynamicStructReader temp_msg_r
|
||||||
cdef _to_dict(msg, bint verbose):
|
cdef _to_dict(msg, bint verbose, bint ordered):
|
||||||
msg_type = type(msg)
|
msg_type = type(msg)
|
||||||
if msg_type is _DynamicListBuilder:
|
if msg_type is _DynamicListBuilder:
|
||||||
temp_list_b = msg
|
temp_list_b = msg
|
||||||
return [_to_dict(temp_list_b._get(i), verbose) for i in range(len(msg))]
|
return [_to_dict(temp_list_b._get(i), verbose, ordered) for i in range(len(msg))]
|
||||||
elif msg_type is _DynamicListReader:
|
elif msg_type is _DynamicListReader:
|
||||||
temp_list_r = msg
|
temp_list_r = msg
|
||||||
return [_to_dict(temp_list_r._get(i), verbose) for i in range(len(msg))]
|
return [_to_dict(temp_list_r._get(i), verbose, ordered) for i in range(len(msg))]
|
||||||
elif msg_type is _DynamicResizableListBuilder:
|
elif msg_type is _DynamicResizableListBuilder:
|
||||||
temp_list_rb = msg
|
temp_list_rb = msg
|
||||||
return [_to_dict(temp_list_rb._get(i), verbose) for i in range(len(msg))]
|
return [_to_dict(temp_list_rb._get(i), verbose, ordered) for i in range(len(msg))]
|
||||||
|
|
||||||
if msg_type is _DynamicStructBuilder:
|
if msg_type is _DynamicStructBuilder:
|
||||||
temp_msg_b = msg
|
temp_msg_b = msg
|
||||||
ret = {}
|
if ordered:
|
||||||
|
ret = _collections.OrderedDict()
|
||||||
|
else:
|
||||||
|
ret = {}
|
||||||
try:
|
try:
|
||||||
which = temp_msg_b.which()
|
which = temp_msg_b.which()
|
||||||
ret[which] = _to_dict(temp_msg_b._get(which), verbose)
|
ret[which] = _to_dict(temp_msg_b._get(which), verbose, ordered)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
for field in temp_msg_b.schema.non_union_fields:
|
for field in temp_msg_b.schema.non_union_fields:
|
||||||
if verbose or temp_msg_b._has(field):
|
if verbose or temp_msg_b._has(field):
|
||||||
ret[field] = _to_dict(temp_msg_b._get(field), verbose)
|
ret[field] = _to_dict(temp_msg_b._get(field), verbose, ordered)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
elif msg_type is _DynamicStructReader:
|
elif msg_type is _DynamicStructReader:
|
||||||
temp_msg_r = msg
|
temp_msg_r = msg
|
||||||
ret = {}
|
if ordered:
|
||||||
|
ret = _collections.OrderedDict()
|
||||||
|
else:
|
||||||
|
ret = {}
|
||||||
try:
|
try:
|
||||||
which = temp_msg_r.which()
|
which = temp_msg_r.which()
|
||||||
ret[which] = _to_dict(temp_msg_r._get(which), verbose)
|
ret[which] = _to_dict(temp_msg_r._get(which), verbose, ordered)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
for field in temp_msg_r.schema.non_union_fields:
|
for field in temp_msg_r.schema.non_union_fields:
|
||||||
if verbose or temp_msg_r._has(field):
|
if verbose or temp_msg_r._has(field):
|
||||||
ret[field] = _to_dict(temp_msg_r._get(field), verbose)
|
ret[field] = _to_dict(temp_msg_r._get(field), verbose, ordered)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
if isinstance(msg, (_DynamicStructBuilder, _DynamicStructReader)):
|
if isinstance(msg, (_DynamicStructBuilder, _DynamicStructReader)):
|
||||||
return msg.to_dict()
|
return msg.to_dict(verbose, ordered)
|
||||||
|
|
||||||
if msg_type is _DynamicEnum:
|
if msg_type is _DynamicEnum:
|
||||||
return str(msg)
|
return str(msg)
|
||||||
@@ -1063,8 +1070,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, verbose=False):
|
def to_dict(self, verbose=False, ordered=False):
|
||||||
return _to_dict(self, verbose)
|
return _to_dict(self, verbose, ordered)
|
||||||
|
|
||||||
cpdef as_builder(self, num_first_segment_words=None):
|
cpdef as_builder(self, num_first_segment_words=None):
|
||||||
"""A method for casting this Builder to a Reader
|
"""A method for casting this Builder to a Reader
|
||||||
@@ -1375,8 +1382,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, verbose=False):
|
def to_dict(self, verbose=False, ordered=False):
|
||||||
return _to_dict(self, verbose)
|
return _to_dict(self, verbose, ordered)
|
||||||
|
|
||||||
def from_dict(self, dict d):
|
def from_dict(self, dict d):
|
||||||
for key, val in d.iteritems():
|
for key, val in d.iteritems():
|
||||||
@@ -1442,8 +1449,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, verbose=False):
|
def to_dict(self, verbose=False, ordered=False):
|
||||||
return _to_dict(self, verbose)
|
return _to_dict(self, verbose, ordered)
|
||||||
|
|
||||||
cdef class _DynamicOrphan:
|
cdef class _DynamicOrphan:
|
||||||
cdef _init(self, C_DynamicOrphan other, object parent):
|
cdef _init(self, C_DynamicOrphan other, object parent):
|
||||||
@@ -1860,8 +1867,8 @@ cdef class _RemotePromise:
|
|||||||
def __dir__(self):
|
def __dir__(self):
|
||||||
return list(self.schema.fieldnames)
|
return list(self.schema.fieldnames)
|
||||||
|
|
||||||
def to_dict(self, verbose=False):
|
def to_dict(self, verbose=False, ordered=False):
|
||||||
return _to_dict(self, verbose)
|
return _to_dict(self, verbose, ordered)
|
||||||
|
|
||||||
cpdef cancel(self, numParents=1) except +reraise_kj_exception:
|
cpdef cancel(self, numParents=1) except +reraise_kj_exception:
|
||||||
if numParents > 0 and hasattr(self._parent, 'cancel'):
|
if numParents > 0 and hasattr(self._parent, 'cancel'):
|
||||||
|
|||||||
@@ -214,11 +214,11 @@ cdef class {{node.module_name}}_Reader(_DynamicStructReader):
|
|||||||
return self._get_{{field.name}}()
|
return self._get_{{field.name}}()
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
|
|
||||||
def to_dict(self, verbose=False):
|
def to_dict(self, verbose=False, ordered=False):
|
||||||
ret = {
|
ret = {
|
||||||
{% for field in node.struct.fields %}
|
{% for field in node.struct.fields %}
|
||||||
{% if field.discriminantValue == 65535 %}
|
{% if field.discriminantValue == 65535 %}
|
||||||
'{{field.name}}': _to_dict(self.{{field.name}}, verbose),
|
'{{field.name}}': _to_dict(self.{{field.name}}, verbose, ordered),
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
}
|
}
|
||||||
@@ -246,11 +246,11 @@ cdef class {{node.module_name}}_Builder(_DynamicStructBuilder):
|
|||||||
self._set_{{field.name}}(value)
|
self._set_{{field.name}}(value)
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
|
|
||||||
def to_dict(self, verbose=False):
|
def to_dict(self, verbose=False, ordered=False):
|
||||||
ret = {
|
ret = {
|
||||||
{% for field in node.struct.fields %}
|
{% for field in node.struct.fields %}
|
||||||
{% if field.discriminantValue == 65535 %}
|
{% if field.discriminantValue == 65535 %}
|
||||||
'{{field.name}}': _to_dict(self.{{field.name}}, verbose),
|
'{{field.name}}': _to_dict(self.{{field.name}}, verbose, ordered),
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user