On May 9, 2014, at 5:34 AM, Mateusz Paprocki <notifications@github.com> wrote:

> This is similar to what we had with session.add(), which I think was agreed to be extremely annoying and was eventually replaced with session.add_plot() that also doesn't involve any of objects referenced by a plot.

That was certainly annoying, but it's not really similar. The other case was extremely annoying because we were forcing users to traverse the object graph by hand, or to keep track of all the object they ever created (anywhere) by hand. Of course that is terrible and fragile. 

This is not like that situation at all. Both now and before you set your new data on the data source, and then had to call a function. The only difference is now that function call involves the (one, same) object you just used, *right there*, and shows exactly what is going on explicitly. 

> Obviously the old way of setting a private field was very wrong. There could be at least .set_dirty(), but really this change and the change in this PR are just "creative accounting" of hiding the fact that we are unable to detect changes to models (which should be admitted that it isn't that simple problem to solve in general).

Right, I think we are in agreement that adding .set_dirty() would not actually materially improve anything. If we can't reliably detect changes to models, then there will be a burden on users somehow. I want to make that burden as simple and explicit as possible. I think "change your data then store it" is as simple as can be gotten, and in any case, simpler for users than "change your data, then mark it dirty, then store something else".

Bryan