Commit 66f6fead authored by Jérome Perrin's avatar Jérome Perrin

PersistentBroken py3

parent 3a9dc261
...@@ -22,25 +22,13 @@ from . import persistent_migration ...@@ -22,25 +22,13 @@ from . import persistent_migration
from ZODB.POSException import ConflictError from ZODB.POSException import ConflictError
import six import six
if six.PY2:
class ERP5BaseBroken_(Broken, ERP5Base, PersistentBroken):
pass
else:
class ERP5BaseBroken_(ERP5Base, PersistentBroken):
pass
class ERP5BaseBroken(ERP5BaseBroken_):
# PersistentBroken can't be reused directly
# because its « layout differs from 'GhostPortalType' »
# This prevents serialize (ZODB) from reloading the class during commit
# (which would look for __Broken_newargs__ which is not present)
__getnewargs__ = None
def __metaclass__(name, base, d): class PersistentBrokenMetaClass(type):
def __new__(cls, name, bases, d):
d = dict(PersistentBroken.__dict__, **d) d = dict(PersistentBroken.__dict__, **d)
for x in '__dict__', '__metaclass__', '__weakref__': del d['__dict__']
del d[x] del d['__weakref__']
def get(x): def get(x):
def get(self): def get(self):
d = self.__dict__ d = self.__dict__
...@@ -51,7 +39,17 @@ class ERP5BaseBroken(ERP5BaseBroken_): ...@@ -51,7 +39,17 @@ class ERP5BaseBroken(ERP5BaseBroken_):
return property(get) return property(get)
for x in 'id', 'title': for x in 'id', 'title':
d[x] = get(x) d[x] = get(x)
return type(name, base, d) return type(name, bases, d)
@six.add_metaclass(PersistentBrokenMetaClass)
class ERP5BaseBroken(Broken, ERP5Base, PersistentBroken):
# PersistentBroken can't be reused directly
# because its « layout differs from 'GhostPortalType' »
# This prevents serialize (ZODB) from reloading the class during commit
# (which would look for __Broken_newargs__ which is not present)
__getnewargs__ = None
def __getattr__(self, name): def __getattr__(self, name):
try: try:
......
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