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

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

parent 7eaf4e90
...@@ -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])
Return the next item from the iterator. If default is given
and the iterator is exhausted, it is returned instead of
raising StopIteration.
"""
try:
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: if default is _marker:
raise ob = next(iterator)
return default else:
#if "next" not in safe_builtins: # BBB ob = next(iterator, default)
# override the default next if exists if not isinstance(iterator, SafeIter):
guard(ob, ob)
return ob
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