I have a config file that I read using the RawConfigParser in the standard ConfigParser library. My config file has a [DEFAULT] section followed by a [specific] section. When I loop through the options in the [specific] section, it includes the ones under [DEFAULT], which is what is meant to happen.
However, for reporting I wanted to know whether the option had been set in the [specific] section or in [DEFAULT]. Is there any way of doing that with the interface of RawConfigParser, or do I have no option but to parse the file manually? (I have looked for a bit and I'm starting to fear the worst ...)
For example
[DEFAULT]
name = a
surname = b
[SECTION]
name = b
age = 23
How do you know, using RawConfigParser interface, whether options name & surname are loaded from section [DEFAULT] or section [SECTION]?
(I know that [DEFAULT] is meant to apply to all, but you may want to report things like this internally in order to work your way through complex config files)
thanks!
Given this configuration file:
[DEFAULT]
name = a
surname = b
[Section 1]
name = section 1 name
age = 23
#we should get a surname value from defaults
[Section 2]
name = section 2 name
surname = section 2 surname
age = 24
Here's a program that can understand that Section 1 is using the default surname property.
import ConfigParser
parser = ConfigParser.RawConfigParser()
parser.read("config.ini")
#Do your normal config processing here
#When it comes time to audit default vs. explicit,
#clear the defaults
parser._defaults = {}
#Now you will see which options were explicitly defined
print parser.options("Section 1")
print parser.options("Section 2")
And here's the output:
['age', 'name']
['age', 'surname', 'name']