diff options
author | Marius Gedminas <marius@gedmin.as> | 2019-11-10 11:48:19 +0200 |
---|---|---|
committer | Marius Gedminas <marius@gedmin.as> | 2019-11-11 19:18:24 +0200 |
commit | dd3444c85ee597b102b2286a582ccd5ebf67e767 (patch) | |
tree | e499fba044ed4843e9433b60faa913ebe0df2504 | |
parent | 6dde9c0ea6e81cd2353b1df19b296a7903f41b21 (diff) | |
download | zope-security-dd3444c85ee597b102b2286a582ccd5ebf67e767.tar.gz |
Allow iter({}.items()) on PyPy3
Dict item iterators use a special type (builtins.dict_itemiterator) on
recent versions of PyPy3.
Fixes zope.security.interfaces.ForbiddenAttribute: ('__next__',
<dict_itemiterator object at 0x00007f7c9c107320>)
-rw-r--r-- | src/zope/security/checker.py | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/zope/security/checker.py b/src/zope/security/checker.py index 818ee72..f5541a7 100644 --- a/src/zope/security/checker.py +++ b/src/zope/security/checker.py @@ -886,6 +886,10 @@ def _fixup_dictlike(dict_type): o_type = type(obj) if o_type not in _default_checkers: _default_checkers[o_type] = _iteratorChecker + # PyPy3 has special types for iter({}.items()) etc. + iter_type = type(iter(obj)) + if iter_type not in _default_checkers: + _default_checkers[iter_type] = _iteratorChecker def _fixup_odict(): # OrderedDicts have three different implementations: Python 2 (pure |