Mercurial > hg > config
annotate python/optparse_undefined.py @ 700:2a3323626bcf
wfm
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Wed, 13 Aug 2014 11:24:09 -0700 |
parents | 3efe894f9d79 |
children |
rev | line source |
---|---|
193
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
2 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
3 """ |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
4 illustrates usage of the undefined pattern from e.g. |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
5 http://k0s.org/mozilla/hg/bzconsole/file/tip/bzconsole/command.py |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
6 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 This is useful for scenarios similar to: |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
8 - you have base configuration in a file |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 - you have an OptionParser to read options in the command line |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
10 - the CLI options should overwrite the file configuration iff |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
11 the user specifies an option |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
12 """ |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
13 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
14 from optparse import OptionParser |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
15 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 class Undefined(object): |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 def __init__(self, default): |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
18 self.default=default |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
19 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 class UndefinedOptionParser(OptionParser): |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
22 def add_option(self, *args, **kwargs): |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 kwargs['default'] = Undefined(kwargs.get('default')) |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 OptionParser.add_option(self, *args, **kwargs) |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
26 def parse_args(self, *args, **kwargs): |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
27 options, args = OptionParser.parse_args(self, *args, **kwargs) |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
28 return options, args |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
29 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
30 if __name__ == '__main__': |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
31 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
32 myparser = UndefinedOptionParser() |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
33 myparser.add_option("--foo", dest='foo', default='hello') |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 myparser.add_option("--bar", dest='bar', default='goodbye') |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 myparser.add_option("--baz", dest='baz', default='helloagain') |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
36 myparser.add_option("--fleem", dest='fleem', default='aufwiedersehen') |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
37 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
38 myconfiguration = {'foo': 'hi', |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
39 'bar': 'ciao'} |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
40 options, args = myparser.parse_args(['--foo', 'hello', '--baz', 'hola']) |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
41 for key, value in options.__dict__.items(): |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
42 # XXX ideally you would move this to parse_args |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
43 if isinstance(value, Undefined): |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
44 options.__dict__[key] = myconfiguration.get(key, value.default) |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
45 |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
46 assert options.foo == 'hello' |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
47 assert options.bar == 'ciao' |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
48 assert options.baz == 'hola' |
3efe894f9d79
add a simple example for optparse_undefined
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
49 assert options.fleem == 'aufwiedersehen' |