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
|
try:
from configglue.schema import BoolOption, StringOption, Schema
except ImportError:
# old way to do it
from configglue.pyschema.options import (
BoolConfigOption as BoolOption,
StringConfigOption as StringOption,
)
from configglue.pyschema.schema import Schema
SOUND_VALS = 'Mute 10 20 30 40 50 60 70 80 90 100'.split()
class EnumConfigOption(StringOption):
"""Config that allow different options."""
def __init__(self, values, default=None):
if default is None:
default = values[0]
self.values = dict((v.lower(), v) for v in values)
super(EnumConfigOption, self).__init__(default=default)
def parse(self, value):
"""Take the value as string, and return the real value."""
v_lower = value.lower()
if v_lower not in self.values:
m = "Invalid value for option %s (got: %r)" % (self.name, value)
raise ValueError(m)
return self.values[v_lower]
class ConfigSchema(Schema):
"""Schema for the configuration."""
username = StringOption(default='anonymous')
fullscreen = BoolOption()
sound_volume = EnumConfigOption(values=SOUND_VALS, default='70')
music_volume = EnumConfigOption(values=SOUND_VALS, default='70')
|