Update utility code to handle C implementations of frozendict (#10902)

* update _handle_frozendict to work with c implementations of frozen dict

* add changelog

* add clarifying comment to _handle_frozendict
pull/10938/head
Hillery Shay 2021-09-28 09:13:23 -07:00 committed by GitHub
parent 8aaa4b7b5d
commit 0f007fe009
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 1 deletions

1
changelog.d/10902.misc Normal file
View File

@ -0,0 +1 @@
Update utility code to handle C implementations of frozendict.

View File

@ -50,7 +50,13 @@ def _handle_frozendict(obj: Any) -> Dict[Any, Any]:
if type(obj) is frozendict:
# fishing the protected dict out of the object is a bit nasty,
# but we don't really want the overhead of copying the dict.
return obj._dict
try:
return obj._dict
except AttributeError:
# When the C implementation of frozendict is used,
# there isn't a `_dict` attribute with a dict
# so we resort to making a copy of the frozendict
return dict(obj)
raise TypeError(
"Object of type %s is not JSON serializable" % obj.__class__.__name__
)