summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Gedminas <marius@gedmin.as>2019-11-10 11:48:19 +0200
committerMarius Gedminas <marius@gedmin.as>2019-11-11 19:18:24 +0200
commitdd3444c85ee597b102b2286a582ccd5ebf67e767 (patch)
treee499fba044ed4843e9433b60faa913ebe0df2504
parent6dde9c0ea6e81cd2353b1df19b296a7903f41b21 (diff)
downloadzope-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.py4
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