class BookmarkContainer(object):
    _page_url = None
    _category = None
    def __init__(self, bookmarks=[]):
        self.bookmarks = bookmarks
        self.id_dict = {}
        self.TRACE = False
    
    def __len__(self):
        return len(self.bookmarks)

    def __getitem__(self, key):
        return self.bookmarks[key]

    def __setitem__(self, key, value):
        self.bookmarks[key] = value
        self._reindex()
    
    def __delitem__(self, key):
        self.bookmarks.remove(key)

    def __contains__(self, item):
        return item in self.bookmarks
    
    def __iter__(self):
        return iter(self.bookmarks)

    def append(self, val):
        self.bookmarks.append(val)

    def extend(self, aseq):
        [self.bookmarks.append(a) for a in aseq]

    def _reindex(self):
        for bm in self.bookmarks:
            if bm.id not in self.id_dict:
                self.id_dict[bm.id] = bm




syntax highlighted by Code2HTML, v. 0.9.1