Fix performance problem with Config objects
This fixes a problem where Config
objects (and the underlying DeepChainMap
implementation) could become very deeply nested, hurting performance, especially when iterating over the Config
There were many cases that are roughly equivalent to:
config = Config(some_previous_config)
This means that
config.maps == [some_previous_config]
I.e. there is only one map in the chain map, which itself is a chain map. This could end up becoming very deeply nested, apparently, especially during schema validation. I had one case of an empty config (Config({})) which had a 15-deep tree of nested Configs before getting to the original underlying empty {}
In Config.init we also need to account for this workaround by making sure to grab the correct filename from the original Config, if there is one.