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

« back to all changes in this revision

Viewing changes to ivle/config/__init__.py

Move ivle-config into bin/, and trim the unneeded stuff from conf.h.

Also hopefully fix the allowed UIDs list.

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
        return '/etc/ivle/ivle.conf'
53
53
    raise ConfigError("Could not find IVLE config file")
54
54
 
 
55
_NO_VALUE = []
55
56
class Config(ConfigObj):
56
57
    """
57
58
    The configuration object. Can be instantiated with no arguments (will
60
61
    Automatically validates the file against the spec (found in
61
62
    ./ivle-spec.conf relative to this module).
62
63
    """
63
 
    def __init__(self, *args, **kwargs):
64
 
        conffile = search_conffile()
 
64
    def __init__(self, blank=False, *args, **kwargs):
 
65
        """Initialises a new Config object. Searches for the config file,
 
66
        loads it, and validates it.
 
67
        @param blank: If blank=True, will create a blank config instead, and
 
68
        not search for the config file.
 
69
        @raise ConfigError: If the config file cannot be found.
 
70
        """
65
71
        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())
 
72
        if blank:
 
73
            super(Config, self).__init__(configspec=specfile, *args, **kwargs)
 
74
        else:
 
75
            conffile = search_conffile()
 
76
            super(Config, self).__init__(infile=conffile, configspec=specfile,
 
77
                                         *args, **kwargs)
 
78
            # XXX This doesn't raise errors if it doesn't validate
 
79
            self.validate(Validator())
 
80
 
 
81
    def set_by_path(self, path, value=_NO_VALUE, comment=None):
 
82
        """Writes a value to an option, given a '/'-separated path.
 
83
        @param path: '/'-separated path to configuration option.
 
84
        @param value: Optional - value to write to the option.
 
85
        @param comment: Optional - comment string (lines separated by '\n's).
 
86
        Note: If only a comment is being inserted, and the value does not
 
87
        exist, fails silently.
 
88
        """
 
89
        path = path.split('/')
 
90
        # Iterate over each segment of the path, and find the section in conf
 
91
        # file to insert the value into (use all but the last path segment)
 
92
        conf_section = self
 
93
        for seg in path[:-1]:
 
94
            # Create the section if it isn't there
 
95
            if seg not in conf_section:
 
96
                conf_section[seg] = {}
 
97
            conf_section = conf_section[seg]
 
98
        # The final path segment names the key to insert into
 
99
        keyname = path[-1]
 
100
        if value is not _NO_VALUE:
 
101
            conf_section[keyname] = value
 
102
        if comment is not None:
 
103
            try:
 
104
                conf_section[keyname]
 
105
            except KeyError:
 
106
                pass        # Fail silently
 
107
            else:
 
108
                conf_section.comments[keyname] = comment.split('\n')
 
109
 
 
110
    def get_by_path(self, path):
 
111
        """Gets an option's value, given a '/'-separated path.
 
112
        @param path: '/'-separated path to configuration option.
 
113
        @raise KeyError: if no config option is at that path.
 
114
        """
 
115
        # Iterate over each segment of the path, and find the value in conf file
 
116
        value = self
 
117
        for seg in path.split('/'):
 
118
            value = value[seg]      # May raise KeyError
 
119
        return value