Add afterquery.exec(), which calculates a grid but doesn't render it.

This is like render() without the render() step.  We also add optional
'startdata' and 'done' parameters to both render() and exec().  If
startdata is provided, you don't need an url= as part of the query;
startdata is assumed to be the grid you want to use.  If done is provided,
we call it (with the latest grid) after the queue finishes running.

Now that we have exec(), it's much easier to unit test more of the
end-to-end transform and parsing code, so make a start at that.
2 files changed