diff --git a/TODO.rst b/TODO.rst index a039fc3..deeccc6 100644 --- a/TODO.rst +++ b/TODO.rst @@ -1,11 +1,61 @@ TODO ==== -In roughly priority order: +Paying down debt +---------------- + +* Add documentation for the changes since ba81dc9. +* Add tests for the changes since ba81dc9. + +Template multiplexing with action hooks +--------------------------------------- + +The big idea: make it easier for hooks to customize *what* template(s) are rendered by moving more of the process into hooks—including template rendering itself. + +Required: + +* Add some sort of ordering for hooks + Thinking an enum of named stages: data adders, data mungers, filters, actions. + The return value of ``hooks.load_all()`` must respect this ordering. + +* Make the main loop seed the entry data with information about the importer used. + +* Move template rendering into a hook, where the template to load is determined by a value in the entry data. + +Extra customizations after that's done: + +* Add a hook that simply reads information from a configuration file section ``[template variables]`` and adds it to the entry data. + +* Add a hook that changes what template to use based on other entry data. (This needs more specification.) + +New importers +------------- * Stripe import via API +* YourCause +* Network for Good + +Other feature requests +---------------------- + * Some way of preventing re-imports + +User niceties +------------- + +These haven't been requested yet but it's easy to imagine how they make the program more user-friendly. + +* ``load_hooks`` and ``skip_hooks`` configuration options to limit what hooks are used. + Setting ``load_hooks`` means "skip everything not in this list." + Not setting ``load_hooks`` means "only skip what's listed in ``skip_hooks``." + If neither setting is set, ``skip_hooks`` should default to a list of hooks that have business-specific logic (currently just ``add_entity``). + If a hook is listed in both, it's either skipped or a configuration error (TBD). * Try all importers even after one fails +* Clean up error reporting on bad configuration file syntax. + +Code infrastructure +------------------- + * Open files for import in binary mode; add a text-wrapping importer base -* Add some sort of ordering for hooks -* Take template rendering out of the main loop, and make it just another hook +* Write a utility dict transformer. Given a source dictionary, it returns something like ``{new_key: transform(source[old_key]) for old_key, transform, new_key in configuration}``. + A lot of the CSV importers are doing this ad hoc now, so refactoring out a common way to do it could help speed up development of future importers.