Earlier implementations did that; we moved to the module in 31abaa3. It's definitely not clearer to take a dict when the desired goal is mutating the settings object, and since you have to mutate settings eventually it turns out not to be easier. For integration tests passing a settings object is easier than turning that object into and then passing a dict that you then patch back onto the settings object; for unittests where you want isolation passing a fake is trivial (see third_party_auth/tests/testutil.py).

Like I said, I think this implementation is good enough that continued refactoring is not worth it, so I'm moving on to the auth feature set.