-
Notifications
You must be signed in to change notification settings - Fork 0
/
example3.py
60 lines (40 loc) · 2 KB
/
example3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'''
ConfigObj example.
This example illustrates how to use spec configuration files and validators using the library ConfigObj
Read the docs for more info: https://configobj.readthedocs.io/en/latest/validate.html
'''
from configobj import ConfigObj as Config, Section
from configobj.validate import Validator
if __name__ == '__main__':
config = Config('config/example3.cnf',
configspec = 'config/example3.spec.cnf',
stringify = True)
# print(config)
# We need to create a validator to check configuration values using the spec file.
validator = Validator()
# Now we validate the config
success = config.validate(validator)
# success maybe false or true whatever config file matches the spec
if not success:
print('Configuration entries doesnt match the specs')
# You can specify the argument preserve_errors when validating.
result = config.validate(validator, preserve_errors=True)
# if validation succeed, result is True. Otherwise its a dictionary that indicates what configuration entries doesnt
# match the spec
if result is not True:
print('Configuration spec errors: ', result)
# After calling validate() method, config variables will change its types with the indicated in the config spec
# (only for entries that passed the test)
# This behaviour can be changed indicating the parameter stringify to False at ConfigObj instantiation.
for varname in config.scalars:
varvalue = config[varname]
print('{} = {} (is of type {})'.format(varname, varvalue, type(varvalue).__name__))
# Validation will check also configuration entries on subsections
if result is not True and 'FOO' in result:
print()
print('Foo subsection spec errors: ', result['FOO'])
print()
print('[FOO]')
for varname in config['FOO'].scalars:
varvalue = config['FOO'][varname]
print('{} = {} (is of type {})'.format(varname, varvalue, type(varvalue).__name__))