Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
140
Merge Requests
140
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
nexedi
erp5
Commits
d6827c79
Commit
d6827c79
authored
Aug 24, 2022
by
Jérome Perrin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
patches/Restricted: backport Restricted support for next(i, default)
parent
db5dbd7c
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
8 additions
and
23 deletions
+8
-23
product/ERP5Type/patches/Restricted.py
product/ERP5Type/patches/Restricted.py
+8
-23
No files found.
product/ERP5Type/patches/Restricted.py
View file @
d6827c79
...
@@ -85,31 +85,16 @@ add_builtins(bin=bin, classmethod=classmethod, format=format, object=object,
...
@@ -85,31 +85,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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment