Commit 953a7497 authored by Jérome Perrin's avatar Jérome Perrin

patches/Restricted: no need to patch sorted on py3

In current versions, sorted is allowed in RestrictedPython.

Also, our implementation of sorted was not correct with generators,
it consumed the generator by iterating on it a first time to check the
values.
parent 3a252b98
......@@ -177,8 +177,9 @@ import past.builtins # six.PY2
allow_module('past.builtins')
ModuleSecurityInfo('past.builtins').declarePublic('cmp')
def guarded_sorted(seq, cmp=None, key=None, reverse=False):
if cmp is not None: # six.PY2
if six.PY2:
def guarded_sorted(seq, cmp=None, key=None, reverse=False):
if cmp is not None:
from functools import cmp_to_key
key = cmp_to_key(cmp)
......@@ -186,7 +187,11 @@ def guarded_sorted(seq, cmp=None, key=None, reverse=False):
for i, x in enumerate(seq):
guard(seq, x, i)
return sorted(seq, key=key, reverse=reverse)
safe_builtins['sorted'] = guarded_sorted
safe_builtins['sorted'] = guarded_sorted
def guarded_enumerate(seq, start=0):
return NullIter(enumerate(guarded_iter(seq), start=start))
safe_builtins['enumerate'] = guarded_enumerate
def guarded_reversed(seq):
return SafeIter(reversed(seq))
......@@ -195,9 +200,6 @@ ContainerAssertions[reversed] = 1
# listreverseiterator is a special type, returned by list.__reversed__
ContainerAssertions[type(reversed([]))] = 1
def guarded_enumerate(seq, start=0):
return NullIter(enumerate(guarded_iter(seq), start=start))
safe_builtins['enumerate'] = guarded_enumerate
def get_set_pop(s, name):
def guarded_pop():
......
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