summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Ippolito <bob@redivi.com>2021-08-23 21:04:33 -0700
committerBob Ippolito <bob@redivi.com>2021-08-23 21:14:29 -0700
commite70f4b05c8b661c0930eb2ea3a079ea3dcbaae87 (patch)
treecbb037048135602cc469b30755a04ad603d9f5f5
parent8dce5b06d3faf9cc439a56dfa3cbdcde2dd8c8ec (diff)
downloadsimplejson-e70f4b05c8b661c0930eb2ea3a079ea3dcbaae87.tar.gz
Implement _asdict() check for pure python path as well
-rw-r--r--simplejson/encoder.py16
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):