From 929d42571395dadd55ede47e92f848e721550e10 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Mon, 19 Feb 2024 15:23:19 +0900
Subject: [PATCH] restricted py3

---
 product/ERP5Type/Collections.py        | 22 ++++++++++++++++++----
 product/ERP5Type/Six.py                |  5 +++--
 product/ERP5Type/patches/Restricted.py |  2 ++
 3 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/product/ERP5Type/Collections.py b/product/ERP5Type/Collections.py
index c3c0ed7d4dd..48ae96689dc 100644
--- a/product/ERP5Type/Collections.py
+++ b/product/ERP5Type/Collections.py
@@ -29,11 +29,25 @@ Restricted collections module.
 
 From restricted python, use "import collections" (see patches/Restricted.py).
 """
+import six
+
 from collections import (
     Counter, defaultdict, deque, OrderedDict, namedtuple as _namedtuple)
 
+if six.PY2:
+  def namedtuple(typename, field_names, verbose=False, rename=False):
+    ret = _namedtuple(typename, field_names, verbose, rename)
+    ret.__allow_access_to_unprotected_subobjects__ = 1
+    return ret
+else:
+  def namedtuple(typename, field_names, rename=False, defaults=None, module=None):
+    ret = _namedtuple(
+      typename,
+      field_names,
+      rename=rename,
+      defaults=defaults,
+      module=module
+    )
+    ret.__allow_access_to_unprotected_subobjects__ = 1
+    return ret
 
-def namedtuple(typename, field_names, verbose=False, rename=False):
-  ret = _namedtuple(typename, field_names, verbose, rename)
-  ret.__allow_access_to_unprotected_subobjects__ = 1
-  return ret
diff --git a/product/ERP5Type/Six.py b/product/ERP5Type/Six.py
index 3f7ac951b69..ed58bfb2f96 100644
--- a/product/ERP5Type/Six.py
+++ b/product/ERP5Type/Six.py
@@ -48,5 +48,6 @@ from AccessControl.ZopeGuards import SafeIter
 iterkeys = lambda d: SafeIter(_six.iterkeys(d), d)
 itervalues = lambda d: SafeIter(_six.itervalues(d), d)
 
-from AccessControl.ZopeGuards import safe_builtins as _safe_builtins
-_safe_builtins['xrange'] = _six.moves.xrange
+if PY2:
+  from AccessControl.ZopeGuards import safe_builtins as _safe_builtins
+  _safe_builtins['xrange'] = _six.moves.xrange
diff --git a/product/ERP5Type/patches/Restricted.py b/product/ERP5Type/patches/Restricted.py
index 5dc8b086663..1a78fb9f69d 100644
--- a/product/ERP5Type/patches/Restricted.py
+++ b/product/ERP5Type/patches/Restricted.py
@@ -385,6 +385,8 @@ import six.moves.urllib.parse
 allow_module('six.moves.urllib.parse')
 allow_type(six.moves.urllib.parse.ParseResult)
 allow_type(six.moves.urllib.parse.SplitResult)
+# BBB this is different type on python3
+allow_type(type(six.moves.urllib.parse.urldefrag('')))
 ModuleSecurityInfo('six.moves.urllib.parse').declarePublic(
   'urlencode',
   'quote', 'unquote',
-- 
2.30.9