From 4c68d5f4b2f0773f32bf066fa1b781d59d6f738f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Thu, 8 Feb 2024 22:00:11 +0900
Subject: [PATCH] persistent_migration: py3

---
 product/ERP5Type/dynamic/persistent_migration.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/product/ERP5Type/dynamic/persistent_migration.py b/product/ERP5Type/dynamic/persistent_migration.py
index 441069ba425..eeb47e4091c 100644
--- a/product/ERP5Type/dynamic/persistent_migration.py
+++ b/product/ERP5Type/dynamic/persistent_migration.py
@@ -42,6 +42,9 @@ from persistent import Persistent, wref
 from ZODB.serialize import ObjectWriter, ObjectReader
 from Products.ERP5Type import Permissions
 from Products.ERP5Type.Base import Base, TempBase, WorkflowMethod
+from zodbpickle import binary
+import six
+
 
 log = logging.getLogger('ERP5Type')
 log.trace = lambda *args, **kw: log.log(5, *args, **kw)
@@ -96,7 +99,6 @@ class PickleUpdater(ObjectReader, ObjectWriter, object):
         if _setOb:
           if isinstance(_setOb, WorkflowMethod):
             _setOb = _setOb._m
-          import six
           if six.get_unbound_function(_setOb) is six.get_unbound_function(OFS_Folder._setOb):
             self.lazy = Ghost
         elif klass.__module__[:7] == 'BTrees.' and klass.__name__ != 'Length':
@@ -113,8 +115,12 @@ class PickleUpdater(ObjectReader, ObjectWriter, object):
         self.do_migrate = args != (klass.__module__, klass.__name__) and \
                           not isOldBTree('%s.%s' % args)
         unpickler.find_global = self._get_class
+        if six.PY3:
+          unpickler.find_class = self._get_class
         return self._get_class(*args)
       unpickler.find_global = find_global
+      if six.PY3:
+        unpickler.find_class = find_global
       unpickler.load() # class
       state = unpickler.load()
       if isinstance(self.lazy, LazyPersistent):
@@ -152,7 +158,7 @@ class PickleUpdater(ObjectReader, ObjectWriter, object):
   def persistent_id(self, obj):
     assert type(obj) is not Ghost
     oid = self.getOid(obj)
-    if type(oid) is str:
+    if isinstance(oid, (bytes, binary)):
       try:
         return self.oid_dict[oid]
       except KeyError:
-- 
2.30.9