~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Aaron Bentley
  • Date: 2005-10-18 18:48:27 UTC
  • mto: (1185.25.1)
  • mto: This revision was merged to the branch mainline in revision 1474.
  • Revision ID: abentley@panoramicfeedback.com-20051018184827-2cc69376beb1cdf3
Switched to ConfigObj

Show diffs side-by-side

added added

removed removed

Lines of Context:
50
50
                    NB: This option is planned, but not implemented yet.
51
51
"""
52
52
 
53
 
from ConfigParser import ConfigParser
 
53
from util.configobj.configobj import ConfigObj, ConfigObjError
54
54
import os
55
55
from fnmatch import fnmatch
56
56
import errno
137
137
    """A configuration policy that draws from ini files."""
138
138
 
139
139
    def _get_parser(self, file=None):
140
 
        if self._parser is not None:
141
 
            return self._parser
142
 
        parser = ConfigParser()
143
 
        if file is not None:
144
 
            parser.readfp(file)
 
140
        if file is None:
 
141
            input = self._get_filename()
145
142
        else:
146
 
            parser.read([self._get_filename()])
147
 
        self._parser = parser
148
 
        return parser
 
143
            input = file
 
144
        if self._parser is None:
 
145
            try:
 
146
                self._parser = ConfigObj(input)
 
147
            except ConfigObjError, e:
 
148
                raise errors.ParseConfigError(e.errors, e.config.filename)
 
149
        return self._parser
149
150
 
150
151
    def _get_section(self):
151
152
        """Override this to define the section used by the config."""
152
153
        return "DEFAULT"
153
154
 
 
155
    def _config_val(self, name, section=None):
 
156
        if section is None:
 
157
            section = self._get_section()
 
158
        if section is None:
 
159
            raise KeyError(name)
 
160
        # Throw KeyError if name or section not present
 
161
        if section == "DEFAULT":
 
162
            try:
 
163
                return self._get_parser()[name]
 
164
            except KeyError:
 
165
                pass
 
166
        return self._get_parser()[section][name]
 
167
 
 
168
    def _config_bool(self, name, section=None):
 
169
        val = self._config_val(name, section).lower()
 
170
        if val in ('1', 'yes', 'true', 'on'):
 
171
            return True
 
172
        elif val in ('0', 'no', 'false', 'off'):
 
173
            return False
 
174
        else:
 
175
            raise ValueError("Value %r is not boolean" % val)
 
176
 
 
177
        
 
178
 
154
179
    def _get_signature_checking(self):
155
180
        """See Config._get_signature_checking."""
156
 
        section = self._get_section()
157
 
        if section is None:
 
181
        try:
 
182
            policy = self._config_val('check_signatures')
 
183
        except KeyError:
158
184
            return None
159
 
        if self._get_parser().has_option(section, 'check_signatures'):
160
 
            return self._string_to_signature_policy(
161
 
                self._get_parser().get(section, 'check_signatures'))
 
185
        return self._string_to_signature_policy(policy)
162
186
 
163
187
    def _get_user_id(self):
164
188
        """Get the user id from the 'email' key in the current section."""
165
 
        section = self._get_section()
166
 
        if section is not None:
167
 
            if self._get_parser().has_option(section, 'email'):
168
 
                return self._get_parser().get(section, 'email')
 
189
        try:
 
190
            return self._config_val('email')
 
191
        except KeyError:
 
192
            pass
169
193
 
170
194
    def __init__(self, get_filename):
171
195
        super(IniBasedConfig, self).__init__()
188
212
    """The configuration that should be used for a specific location."""
189
213
 
190
214
    def get_editor(self):
191
 
        if self._get_parser().has_option(self._get_section(), 'editor'):
192
 
            return self._get_parser().get(self._get_section(), 'editor')
 
215
        try:
 
216
            return self._config_val('editor')
 
217
        except KeyError:
 
218
            pass
193
219
 
194
220
    def __init__(self):
195
221
        super(GlobalConfig, self).__init__(config_filename)
215
241
        TODO: perhaps return a NullSection that thunks through to the 
216
242
              global config.
217
243
        """
218
 
        sections = self._get_parser().sections()
 
244
        sections = self._get_parser()
219
245
        location_names = self.location.split('/')
220
246
        if self.location.endswith('/'):
221
247
            del location_names[-1]
238
264
                continue
239
265
            # if path is longer, and recurse is not true, no match
240
266
            if len(section_names) < len(location_names):
241
 
                if (self._get_parser().has_option(section, 'recurse')
242
 
                    and not self._get_parser().getboolean(section, 'recurse')):
243
 
                    continue
 
267
                try:
 
268
                    if not self._config_bool('recurse', section=section):
 
269
                        continue
 
270
                except KeyError:
 
271
                    pass
244
272
            matches.append((len(section_names), section))
245
273
        if not len(matches):
246
274
            return None