~azzar1/unity/add-show-desktop-key

1092.1.14 by Matt Giuca
Added module ivle.config, which takes care of some work interfacing with
1
# IVLE - Informatics Virtual Learning Environment
2
# Copyright (C) 2007-2009 The University of Melbourne
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
18
# Author: Matt Giuca, Will Grant
19
20
"""
21
Provides programmatic access to the IVLE configuration file.
22
"""
23
24
import os
25
26
from configobj import ConfigObj
1092.1.15 by Matt Giuca
Added config validation spec: ivle/config/ivle-spec.conf.
27
from validate import Validator
1092.1.14 by Matt Giuca
Added module ivle.config, which takes care of some work interfacing with
28
29
__all__ = ["ConfigError", "Config"]
30
31
class ConfigError(Exception):
32
    """
33
    An error reading or writing the configuration file.
34
    """
35
    pass
36
37
def search_conffile():
38
    """
39
    Search for the config file, and return it as a filename.
40
    1. Environment var IVLECONF (full filename).
41
    2. ./etc/ivle.conf
42
    3. /etc/ivle/ivle.conf
43
    Raises a ConfigError on error.
44
    """
45
    if 'IVLECONF' in os.environ:
46
        fname = os.environ['IVLECONF']
47
        if os.path.exists(fname):
48
            return fname
49
    if os.path.exists('./etc/ivle.conf'):
50
        return './etc/ivle.conf'
51
    if os.path.exists('/etc/ivle/ivle.conf'):
52
        return '/etc/ivle/ivle.conf'
53
    raise ConfigError("Could not find IVLE config file")
54
55
class Config(ConfigObj):
56
    """
57
    The configuration object. Can be instantiated with no arguments (will
58
    implicitly find the ivle.conf file and load it).
1092.1.15 by Matt Giuca
Added config validation spec: ivle/config/ivle-spec.conf.
59
60
    Automatically validates the file against the spec (found in
61
    ./ivle-spec.conf relative to this module).
1092.1.14 by Matt Giuca
Added module ivle.config, which takes care of some work interfacing with
62
    """
63
    def __init__(self, *args, **kwargs):
64
        conffile = search_conffile()
1092.1.15 by Matt Giuca
Added config validation spec: ivle/config/ivle-spec.conf.
65
        specfile = os.path.join(os.path.dirname(__file__), 'ivle-spec.conf')
66
        super(Config, self).__init__(infile=conffile, configspec=specfile,
67
                                     *args, **kwargs)
68
        # XXX This doesn't raise errors if it doesn't validate
69
        self.validate(Validator())