I've got the design I want for updating the configuration worked out, but I spent a lot of today zoning out, so we'll, like, see how far I get.
Step one: create data classes to represent changes, and create a Union combining them.
Step two: create a function that takes the union and will dispatch to individual implementations.
Step three: create the individual implementations, and forward the existing functions to them, for ease of testing.
Step four: set up the dispatches
Step five: test this intermediate stage
(Secret step five and a half: fix stuff that I broke, and also contemplate filing a bug against Python for some of the stuff I encountered.)
Anyway, I'm not getting anything else done tonight, so I'll put off future steps, such as "write helper functions that produce the new classes", "expose my desired interface through the api module", and "rewrite the tests to use the new interface", along with "actually test the main application logic".
But yeah, currently exhausted.