One of my Plone instances has around 100 content rules added, and then hit by an error:
... ... Module plone.app.contentrules.namechooser, line 30, in chooseName Module zope.container.contained, line 761, in checkName KeyError: u'The given name is already being used'
From #plone channel, @MacYET tells me to use PDB. Here is the info log:
> /opt/myplone/buildout-cache/eggs/zope.container-3.8.2-py2.6-linux-i686.egg /zope/container/contained.py(761)checkName() -> raise KeyError( (Pdb) dir() ['name', 'object', 'pdb', 'reserved', 'self'] (Pdb) pp name u'rule-101' (Pdb) pp self <plone.app.contentrules.namechooser.RuleNameChooser object at 0x10a33c6c> (Pdb) pp self.context <plone.contentrules.engine.storage.RuleStorage object at 0x10c2f0ac> (Pdb) pp self.context.__dict__ {'_data': <BTrees.OOBTree.OOBTree object at 0xd97238c>, '_order': ['rule-1', ... ... 'rule-99', 'rule-100', 'rule-101']}
In plone/app/contentrules/namechooser.py:
ATTEMPTS = 100 class RuleNameChooser(NameChooser): """A name chooser for content rules. """ implements(INameChooser) def __init__(self, context): self.context = context def chooseName(self, name, object): container = self.context if not name: name = object.__class__.__name__.lower() i = 1 new_name = "%s-%d" % (name, i) while new_name in container and i <= ATTEMPTS: i += 1 new_name = "%s-%d" % (name, i) self.checkName(new_name, object) return new_name
I can accept this is not a bug, but a documentation should be helpful.
No comments:
Post a Comment