8e3760c5b8
This simplifies attrs a bit, and scripts can always override __getitem__ if they want to provide lazy attr generation. The original intention of accepting functions was to make lazy attr generation easier, but while tinkering around with the idea I realized the actual attr mapping/generation would be complicated enough that you'd probably want a full class anyways. All of our scripts are only using dict attrs anyways. And lazy attr generation is probably a premature optimization for the same reason everyone's ok with Python's slices being O(n).