Log message for revision 101275: - fixed ObjectManagerNameChooser: BTreeFolder2 raises KeyError, not AttributeError
Changed: U Zope/trunk/src/Products/Five/browser/adding.py U Zope/trunk/src/Products/Five/browser/tests/adding.txt -=- Modified: Zope/trunk/src/Products/Five/browser/adding.py =================================================================== --- Zope/trunk/src/Products/Five/browser/adding.py 2009-06-25 14:35:19 UTC (rev 101274) +++ Zope/trunk/src/Products/Five/browser/adding.py 2009-06-25 14:35:47 UTC (rev 101275) @@ -206,9 +206,9 @@ class ObjectManagerNameChooser: """A name chooser for a Zope object manager. """ - + implements(INameChooser) - + def __init__(self, context): self.context = context @@ -248,10 +248,10 @@ i += 1 try: self.context._getOb(n) - except AttributeError: + except (AttributeError, KeyError): break n = name + '-' + str(i) + suffix - + # Make sure the name is valid. We may have started with # something bad. self.checkName(n, object) Modified: Zope/trunk/src/Products/Five/browser/tests/adding.txt =================================================================== --- Zope/trunk/src/Products/Five/browser/tests/adding.txt 2009-06-25 14:35:19 UTC (rev 101274) +++ Zope/trunk/src/Products/Five/browser/tests/adding.txt 2009-06-25 14:35:47 UTC (rev 101275) @@ -7,12 +7,18 @@ First we need to import and setup some prerequisites: + >>> from Products.BTreeFolder2.BTreeFolder2 import BTreeFolder2 >>> from Products.Five.tests.testing import manage_addFiveTraversableFolder >>> from Products.Five.browser.adding import ObjectManagerNameChooser >>> manage_addFiveTraversableFolder(self.folder, 'testoid', 'Testoid') >>> chooser = ObjectManagerNameChooser(self.folder) + >>> id = self.folder._setObject('btreefolder', BTreeFolder2('btreefolder')) + >>> btreefolder = self.folder[id] + >>> manage_addFiveTraversableFolder(btreefolder, 'testoid', 'Testoid') + >>> chooser2 = ObjectManagerNameChooser(btreefolder) + Now we can start. ``INameChooser`` defines a ``checkName()`` method that checks whether a given name is valid in the container or not. Under the hood, ``ObjectManagerNameChooser`` calls ``_checkId()`` of @@ -20,16 +26,25 @@ and don't contain invalid characters. >>> chooser.checkName('abc', object()) + >>> chooser2.checkName('abc', object()) >>> chooser.checkName('testoid', object()) Traceback (most recent call last): ... UserError: The id "testoid" is invalid - it is already in use. + >>> chooser2.checkName('testoid', object()) + Traceback (most recent call last): + ... + UserError: The id "testoid" is invalid - it is already in use. >>> chooser.checkName('slash/slash', object()) Traceback (most recent call last): ... UserError: The id "slash/slash" contains characters illegal in URLs. + >>> chooser2.checkName('slash/slash', object()) + Traceback (most recent call last): + ... + UserError: The id "slash/slash" contains characters illegal in URLs. ``INameChooser`` also promises us a ``chooseName()`` method that chooses a name for us in case we don't have one or that chooses a @@ -37,12 +52,18 @@ >>> chooser.chooseName('', self.folder.testoid) 'FiveTraversableFolder' + >>> chooser2.chooseName('', self.folder.testoid) + 'FiveTraversableFolder' >>> chooser.chooseName('abc', self.folder.testoid) 'abc' + >>> chooser2.chooseName('abc', self.folder.testoid) + 'abc' >>> chooser.chooseName('testoid', self.folder.testoid) 'testoid-1' + >>> chooser2.chooseName('testoid', self.folder.testoid) + 'testoid-1' Of course, if we start out with something bad, it isn't going to become good automagically: @@ -51,3 +72,7 @@ Traceback (most recent call last): ... UserError: The id "slash/slash" contains characters illegal in URLs. + >>> chooser2.chooseName('slash/slash', object()) + Traceback (most recent call last): + ... + UserError: The id "slash/slash" contains characters illegal in URLs. _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins