An IContainerItemRenamer adapter for containers.
This adapter uses IObjectMover to move an item within the same container to a different name. We need to first setup an adapter for IObjectMover:
>>> from zope.app.container.interfaces import IContained >>> gsm = zope.component.getGlobalSiteManager() >>> gsm.registerAdapter(ObjectMover, (IContained, ), IObjectMover)
To rename an item in a container, instantiate a ContainerItemRenamer with the container:
>>> container = SampleContainer() >>> renamer = ContainerItemRenamer(container)
For this example, we'll rename an item 'foo':
>>> from zope.app.container.contained import Contained >>> foo = Contained() >>> container['foo'] = foo >>> container['foo'] is foo True
to 'bar':
>>> renamer.renameItem('foo', 'bar') >>> container['foo'] is foo Traceback (most recent call last): KeyError: 'foo' >>> container['bar'] is foo True
If the item being renamed isn't in the container, a NotFoundError is raised:
>>> renamer.renameItem('foo', 'bar') # doctest:+ELLIPSIS Traceback (most recent call last): ItemNotFoundError: (<...SampleContainer...>, 'foo')
If the new item name already exists, a DuplicationError is raised:
>>> renamer.renameItem('bar', 'bar') Traceback (most recent call last): DuplicationError: bar is already in use
There are no attributes in this class.
renameItem(oldName, newName)