Ready for initial review of the general structure. There is virtually unlimited scope for improvement and cleanup/robustification, but the basic structure is there and all required methods to support a prototype Butler are implemented.
Please be brutal in this review, but keep in mind that this is a prototype implementation meant to verify the design and not (yet) production code.
Things that should still be done, but probably on separate small tickets are:
- Improve configuration
- Investigate adding a buffering layer to Formatter (write to buffer -> write buffer to file)
- Add more default storage classes
- Add basic building blocks for chaining (caching, multiple output formats for a single put, etc.) (mostly trivial separate implementations of the Datastore interface that just forward calls based on some further configuration)
- Add support for composites