As I've mentioned I added friendlier mutation API to Amara. Deletion didn't come up in the original discussion, but I just got around to addressing that as well. Now checked in are enhancements that support the following use cases:
Use case 10:
Source doc: spameggs
Code: del doc.a.b
Result: doc mutated to eggs
Use case 11:
Source doc: spameggs
Code: del doc.a.b[0]
Result: doc mutated to eggs
Use case 12:
Source doc: spameggs
Code: del doc.a.b[1]
Result: doc mutated to spam
Use case 13:
Source doc: spameggs
Code: del doc.a.b[2]
Result: IndexError
Use case 14:
Source doc: spam
Code: del doc.a.b
Result: doc mutated to spam
Of course there are oddities to go with the new convenience. Check out the following:
>>> from amara import binderytools >>> doc = binderytools.bind_string("spamspam") >>> unicode(doc.a.b) u'spam' >>> doc.a.b <amara.bindery.b object at 0x685b2c> >>> del doc.a.b >>> unicode(doc.a.b) u'spam' >>> #Eh? Still there, are ye? ... >>> doc.a.b <amara.bindery.b object at 0x685b8c>
Perfectly consistent with what the users seem to be saying, I think, but I'll be amazed if this doesn't trip up the odd fellow.