def __iadd__(self, other): # We must wrap each element in a weak ref # Note that the builtin list only accepts other lists, # but the UserList from which we are descended accepts # any iterable. result = super(PersistentExternalizableWeakList, self).__iadd__( [self.__wrap(PWeakRef(o)) for o in other]) return result
def test_to_externalOID(self): class P(Persistent): def toExternalOID(self, **_kwargs): return b'abc' wref = PWeakRef(P()) assert_that(wref.toExternalOID(), is_(b'abc'))
def test_to_externalObject(self): class P(Persistent): def toExternalObject(self, **_kwargs): return {'a': 42} wref = PWeakRef(P()) assert_that(wref.toExternalObject(), is_({'a': 42}))
def index(self, item, *args): return super(PersistentExternalizableWeakList, self).index(self.__wrap(PWeakRef(item)), *args)
def count(self, item): return super(PersistentExternalizableWeakList, self).count(self.__wrap(PWeakRef(item)))
def insert(self, i, item): super(PersistentExternalizableWeakList, self).insert(i, self.__wrap(PWeakRef(item)))
def append(self, item): super(PersistentExternalizableWeakList, self).append(self.__wrap(PWeakRef(item)))
def __setitem__(self, i, item): super(PersistentExternalizableWeakList, self).__setitem__(i, self.__wrap(PWeakRef(item)))
def remove(self, item): super(PersistentExternalizableWeakList, self).remove(self.__wrap(PWeakRef(item)))
def __wrap(self, obj): return obj if isinstance(obj, PWeakRef) else PWeakRef(obj)