forked from spladug/harold
-
Notifications
You must be signed in to change notification settings - Fork 0
/
conf.py
44 lines (33 loc) · 1.24 KB
/
conf.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
from ConfigParser import RawConfigParser, NoOptionError
plugin_prefix = "harold:plugin:"
NoDefault = object()
class HaroldConfiguration(object):
def __init__(self, filenames):
self.parser = RawConfigParser()
self.parser.read(filenames)
def plugin_names(self):
for section in self.parser.sections():
if not section.startswith(plugin_prefix):
continue
yield section[len(plugin_prefix):]
class Option(object):
def __init__(self, convert, default=NoDefault):
self.convert = convert
self.default = default
def tup(option):
return [x.strip() for x in option.split(',') if x]
class PluginConfig(object):
def __init__(self, config, section=None):
if not section:
section = plugin_prefix + self.__module__
for name, contents in vars(type(self)).iteritems():
if not isinstance(contents, Option):
continue
try:
value = config.parser.get(section, name)
value = contents.convert(value)
except NoOptionError:
if contents.default is NoDefault:
raise
value = contents.default
setattr(self, name, value)