diff options
author | Bob Ippolito <bob@redivi.com> | 2021-08-23 21:04:33 -0700 |
---|---|---|
committer | Bob Ippolito <bob@redivi.com> | 2021-08-23 21:14:29 -0700 |
commit | e70f4b05c8b661c0930eb2ea3a079ea3dcbaae87 (patch) | |
tree | cbb037048135602cc469b30755a04ad603d9f5f5 | |
parent | 8dce5b06d3faf9cc439a56dfa3cbdcde2dd8c8ec (diff) | |
download | simplejson-e70f4b05c8b661c0930eb2ea3a079ea3dcbaae87.tar.gz |
Implement _asdict() check for pure python path as well
-rw-r--r-- | simplejson/encoder.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/simplejson/encoder.py b/simplejson/encoder.py index 7ea172e..2f81cab 100644 --- a/simplejson/encoder.py +++ b/simplejson/encoder.py @@ -520,7 +520,10 @@ def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, else: _asdict = _namedtuple_as_object and getattr(value, '_asdict', None) if _asdict and callable(_asdict): - chunks = _iterencode_dict(_asdict(), + dct = _asdict() + if not isinstance(dct, dict): + raise TypeError("_asdict() must return a dict, not %s" % (type(dct).__name__,)) + chunks = _iterencode_dict(dct, _current_indent_level) elif _tuple_as_array and isinstance(value, tuple): chunks = _iterencode_list(value, _current_indent_level) @@ -641,7 +644,10 @@ def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, else: _asdict = _namedtuple_as_object and getattr(value, '_asdict', None) if _asdict and callable(_asdict): - chunks = _iterencode_dict(_asdict(), + dct = _asdict() + if not isinstance(dct, dict): + raise TypeError("_asdict() must return a dict, not %s" % (type(dct).__name__,)) + chunks = _iterencode_dict(dct, _current_indent_level) elif _tuple_as_array and isinstance(value, tuple): chunks = _iterencode_list(value, _current_indent_level) @@ -686,8 +692,10 @@ def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, else: _asdict = _namedtuple_as_object and getattr(o, '_asdict', None) if _asdict and callable(_asdict): - for chunk in _iterencode_dict(_asdict(), - _current_indent_level): + dct = _asdict() + if not isinstance(dct, dict): + raise TypeError("_asdict() must return a dict, not %s" % (type(dct).__name__,)) + for chunk in _iterencode_dict(dct, _current_indent_level): yield chunk elif (_tuple_as_array and isinstance(o, tuple)): for chunk in _iterencode_list(o, _current_indent_level): |