~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

(vila) Allow callables to be used to specify config option default values
 (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
2331
2331
 
2332
2332
        :param default: the default value to use when none exist in the config
2333
2333
            stores. This is either a string that ``from_unicode`` will convert
2334
 
            into the proper type or a python object that can be stringified (so
2335
 
            only the empty list is supported for example).
 
2334
            into the proper type, a callable returning a unicode string so that
 
2335
            ``from_unicode`` can be used on the return value, or a python
 
2336
            object that can be stringified (so only the empty list is supported
 
2337
            for example).
2336
2338
 
2337
2339
        :param default_from_env: A list of environment variables which can
2338
2340
           provide a default value. 'default' will be used only if none of the
2367
2369
        elif isinstance(default, (str, unicode, bool, int, float)):
2368
2370
            # Rely on python to convert strings, booleans and integers
2369
2371
            self.default = u'%s' % (default,)
 
2372
        elif callable(default):
 
2373
            self.default = default
2370
2374
        else:
2371
2375
            # other python objects are not expected
2372
2376
            raise AssertionError('%r is not supported as a default value'
2407
2411
                continue
2408
2412
        if value is None:
2409
2413
            # Otherwise, fallback to the value defined at registration
2410
 
            value = self.default
 
2414
            if callable(self.default):
 
2415
                value = self.default()
 
2416
                if not isinstance(value, unicode):
 
2417
                    raise AssertionError(
 
2418
                    'Callable default values should be unicode')
 
2419
            else:
 
2420
                value = self.default
2411
2421
        return value
2412
2422
 
2413
2423
    def get_help_text(self, additional_see_also=None, plain=True):