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)