Source code for persistent.list

##############################################################################
#
# Copyright (c) 2001, 2002 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################

"""Python implementation of persistent list.

$Id$"""

import persistent
from persistent._compat import UserList
from persistent._compat import PYTHON2

[docs]class PersistentList(UserList, persistent.Persistent): """A persistent wrapper for list objects. Mutating instances of this class will cause them to be marked as changed and automatically persisted. """ __super_setitem = UserList.__setitem__ __super_delitem = UserList.__delitem__ __super_iadd = UserList.__iadd__ __super_imul = UserList.__imul__ __super_append = UserList.append __super_insert = UserList.insert __super_pop = UserList.pop __super_remove = UserList.remove __super_reverse = UserList.reverse __super_sort = UserList.sort __super_extend = UserList.extend def __setitem__(self, i, item): self.__super_setitem(i, item) self._p_changed = 1 def __delitem__(self, i): self.__super_delitem(i) self._p_changed = 1 if PYTHON2: # pragma: no cover __super_setslice = UserList.__setslice__ __super_delslice = UserList.__delslice__ def __setslice__(self, i, j, other): self.__super_setslice(i, j, other) self._p_changed = 1 def __delslice__(self, i, j): self.__super_delslice(i, j) self._p_changed = 1 def __iadd__(self, other): L = self.__super_iadd(other) self._p_changed = 1 return L def __imul__(self, n): L = self.__super_imul(n) self._p_changed = 1 return L
[docs] def append(self, item): self.__super_append(item) self._p_changed = 1
[docs] def insert(self, i, item): self.__super_insert(i, item) self._p_changed = 1
[docs] def pop(self, i=-1): rtn = self.__super_pop(i) self._p_changed = 1 return rtn
[docs] def remove(self, item): self.__super_remove(item) self._p_changed = 1
[docs] def reverse(self): self.__super_reverse() self._p_changed = 1
def sort(self, *args, **kwargs): self.__super_sort(*args, **kwargs) self._p_changed = 1
[docs] def extend(self, other): self.__super_extend(other) self._p_changed = 1