Renames items within an ordered container.

This renamer preserves the original order of the contained items.

To illustrate, we need to setup an IObjectMover, which is used in the renaming:

>>> from import IContained
>>> gsm = zope.component.getGlobalSiteManager()
>>> gsm.registerAdapter(ObjectMover, (IContained, ), IObjectMover)

To rename an item in an ordered container, we instantiate a OrderedContainerItemRenamer with the container:

>>> from import OrderedContainer
>>> container = OrderedContainer()
>>> renamer = OrderedContainerItemRenamer(container)

We'll add three items to the container:

>>> container['1'] = 'Item 1'
>>> container['2'] = 'Item 2'
>>> container['3'] = 'Item 3'
>>> container.items()
[('1', 'Item 1'), ('2', 'Item 2'), ('3', 'Item 3')]

When we rename one of the items:

>>> renamer.renameItem('1', 'I')

the order is preserved:

>>> container.items()
[('I', 'Item 1'), ('2', 'Item 2'), ('3', 'Item 3')]

Renaming the other two items also preserves the origina order:

>>> renamer.renameItem('2', 'II')
>>> renamer.renameItem('3', 'III')
>>> container.items()
[('I', 'Item 1'), ('II', 'Item 2'), ('III', 'Item 3')]

As with the standard renamer, trying to rename a non-existent item raises an error:

>>> renamer.renameItem('IV', '4') # doctest:+ELLIPSIS
Traceback (most recent call last):
ItemNotFoundError: (<...OrderedContainer...>, 'IV')

And if the new item name already exists, a DuplicationError is raised:

>>> renamer.renameItem('III', 'I')
Traceback (most recent call last):
DuplicationError: I is already in use

Base classes

Implemented Interfaces


There are no attributes in this class.


Known Subclasses

There are no known subclasses.