All right. I put together first drafts of the filters I want, injected them in a way that doesn't immediately crash Cement (it wants my functions to be functions? What's up with that? (I joke, but the meaning behind the joke is that it wants at least some of the callables I pass to the API to have __name__ attributes, which I wasn't expecting.)), and wrote templates that might be valid; I don't have tests for them yet.
Right now, I'm looking over the main program flow to figure out what I want to tweak next. Currently, the code errors out "before" it can act on the configuration. So, that error needs to be moved into a conditional that does a type check, and the next check is for whether to list targets, which, I don't actually have the code for that yet, but that's simple to add. And, added. I'm going to try to just muddle my way through all this...
For some of this, I'm just going to transcribe some of my prototype code, which is self-evidently perfect except for all the bits where I didn't run it and it would have blown up if I'd ever tried.
Put that all together and... Now something is failing most of the tests, and the traceback is formidable. Let's see what I can work out.
Okay, I just had to let the tests run somewhat to completion. Turns out I made a bad assumption; I think the default template from Cement led me astray a little. I think maybe these kinds of templates should have the output commented to show like "here's a good practice to usually follow" versus "here's something silly that you're supposed to change". That might stop stuff like e-readers shipping with ROT13 or cyclic XOR for DRM.
Anyway, the code is all in, but there are no new tests, and a few static analysis issues. I'll take care of those after I publish this. Anyway, this code should be ready for an initial release soon. All ~0.5 kloc of it.
Well, I should wrap things up for tonight.