forked from GeoNode/geonode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
60 lines (42 loc) · 1.38 KB
/
utils.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
import pkg_resources
from UserDict import DictMixin
from ConfigParser import ConfigParser, NoOptionError
from pprint import pformat
class ConfigMap(DictMixin):
def __init__(self, parser):
self.parser = parser
self.sects = parser.sections()
def __iter__(self):
for sname in self.sects:
yield sname
def __getitem__(self, idx):
return OptionMap(self.parser, idx)
def __setitem__(self, idx, val):
for item in val.items():
self.parser.set(*(idx,) + item)
def __delitem__(self, idx):
self.parser.remove_section(idx)
def keys(self):
return self.parser.sections()
def write(self, fn):
self.parser.write(fn)
@classmethod
def load(cls, fname):
parser = ConfigParser()
parser.read(fname)
return cls(parser)
class OptionMap(DictMixin):
def __init__(self, parser, section):
self.parser = parser
self.section = section
def __getitem__(self, idx):
try:
return self.parser.get(self.section, idx)
except NoOptionError, e:
raise KeyError(e)
def __setitem__(self, name, val):
self.parser.set(self.section, name, val)
def __delitem__(self, name):
self.parser.remove_option(self.section, name)
def keys(self):
return self.parser.options(self.section)