~facundo/enjuewemela/trunk

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')