Mercurial > hg > config
changeset 724:d547c071b847
to -> http://k0s.org/hg/configuration
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Tue, 04 Nov 2014 15:15:53 -0800 |
parents | 6fc2a2001ac2 |
children | 55a9ba575605 |
files | python/optparse_undefined.py |
diffstat | 1 files changed, 0 insertions(+), 49 deletions(-) [+] |
line wrap: on
line diff
--- a/python/optparse_undefined.py Tue Nov 04 15:12:40 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -#!/usr/bin/env python - -""" -illustrates usage of the undefined pattern from e.g. -http://k0s.org/mozilla/hg/bzconsole/file/tip/bzconsole/command.py - -This is useful for scenarios similar to: -- you have base configuration in a file -- you have an OptionParser to read options in the command line -- the CLI options should overwrite the file configuration iff - the user specifies an option -""" - -from optparse import OptionParser - -class Undefined(object): - def __init__(self, default): - self.default=default - -class UndefinedOptionParser(OptionParser): - - def add_option(self, *args, **kwargs): - kwargs['default'] = Undefined(kwargs.get('default')) - OptionParser.add_option(self, *args, **kwargs) - - def parse_args(self, *args, **kwargs): - options, args = OptionParser.parse_args(self, *args, **kwargs) - return options, args - -if __name__ == '__main__': - - myparser = UndefinedOptionParser() - myparser.add_option("--foo", dest='foo', default='hello') - myparser.add_option("--bar", dest='bar', default='goodbye') - myparser.add_option("--baz", dest='baz', default='helloagain') - myparser.add_option("--fleem", dest='fleem', default='aufwiedersehen') - - myconfiguration = {'foo': 'hi', - 'bar': 'ciao'} - options, args = myparser.parse_args(['--foo', 'hello', '--baz', 'hola']) - for key, value in options.__dict__.items(): - # XXX ideally you would move this to parse_args - if isinstance(value, Undefined): - options.__dict__[key] = myconfiguration.get(key, value.default) - - assert options.foo == 'hello' - assert options.bar == 'ciao' - assert options.baz == 'hola' - assert options.fleem == 'aufwiedersehen'