Commit cc813ae9 authored by Jérome Perrin's avatar Jérome Perrin Committed by Arnaud Fontaine

patches/Restricted: backport Restricted support for next(i, default)

parent 25f5ecda
...@@ -87,31 +87,16 @@ add_builtins(bin=bin, classmethod=classmethod, format=format, object=object, ...@@ -87,31 +87,16 @@ add_builtins(bin=bin, classmethod=classmethod, format=format, object=object,
property=property, staticmethod=staticmethod, property=property, staticmethod=staticmethod,
super=super, type=type) super=super, type=type)
# XXX: backport of https://github.com/zopefoundation/AccessControl/pull/131
def guarded_next(iterator, default=_marker): def guarded_next(iterator, default=_marker):
"""next(iterator[, default]) if default is _marker:
ob = next(iterator)
Return the next item from the iterator. If default is given else:
and the iterator is exhausted, it is returned instead of ob = next(iterator, default)
raising StopIteration. if not isinstance(iterator, SafeIter):
""" guard(ob, ob)
try: return ob
iternext = guarded_getattr(iterator, 'next').__call__
# this way an AttributeError while executing next() isn't hidden
# (2.6 does this too)
except AttributeError:
raise TypeError("%s object is not an iterator"
% type(iterator).__name__)
try:
return iternext()
except StopIteration:
if default is _marker:
raise
return default
#if "next" not in safe_builtins: # BBB
# override the default next if exists
safe_builtins.update(next=guarded_next) safe_builtins.update(next=guarded_next)
# add_builtins()
_safe_class_attribute_dict = {} _safe_class_attribute_dict = {}
import inspect import inspect
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment