Mercurial > hg > MakeItSo
annotate makeitso/cli.py @ 87:3571417ef92e
interpolate file permissions
| author | Jeff Hammel <jhammel@mozilla.com> | 
|---|---|
| date | Mon, 10 Jan 2011 14:39:21 -0800 | 
| parents | cb6c54b1adf3 | 
| children | e74baa8e6df4 | 
| rev | line source | 
|---|---|
| 
57
 
074a32920f7c
stub for a command-line parser
 
Jeff Hammel <jhammel@mozilla.com> 
parents:  
diff
changeset
 | 
1 """ | 
| 
 
074a32920f7c
stub for a command-line parser
 
Jeff Hammel <jhammel@mozilla.com> 
parents:  
diff
changeset
 | 
2 command line parser for MakeItSo | 
| 
 
074a32920f7c
stub for a command-line parser
 
Jeff Hammel <jhammel@mozilla.com> 
parents:  
diff
changeset
 | 
3 """ | 
| 
 
074a32920f7c
stub for a command-line parser
 
Jeff Hammel <jhammel@mozilla.com> 
parents:  
diff
changeset
 | 
4 | 
| 
62
 
30100690ad3f
display defaults with command line --help option
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
61 
diff
changeset
 | 
5 from template import Undefined | 
| 
57
 
074a32920f7c
stub for a command-line parser
 
Jeff Hammel <jhammel@mozilla.com> 
parents:  
diff
changeset
 | 
6 from optparse import OptionParser | 
| 
 
074a32920f7c
stub for a command-line parser
 
Jeff Hammel <jhammel@mozilla.com> 
parents:  
diff
changeset
 | 
7 | 
| 
58
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
8 class MakeItSoCLI(object): | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
9 """command line interface to a makeitso template""" | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
10 | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
11 def __init__(self, template_class): | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
12 self.template_class = template_class | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
13 | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
14 def parser(self): | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
15 """ | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
16 return a command line parser for the template | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
17 """ | 
| 
68
 
cce0da329f59
remove deprecated variable setting from command line front end
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
62 
diff
changeset
 | 
18 usage = '%prog [options] output' | 
| 
60
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
19 description = getattr(self.template_class, 'description', None) | 
| 
58
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
20 parser = OptionParser(usage=usage, description=description) | 
| 
60
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
21 | 
| 
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
22 # add the variables as options | 
| 
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
23 for variable in self.template_class.vars: | 
| 
62
 
30100690ad3f
display defaults with command line --help option
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
61 
diff
changeset
 | 
24 description = variable.description | 
| 
77
 
059b02808efa
ensure the description exists
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
68 
diff
changeset
 | 
25 if (variable.default is not None) and (variable.default is not Undefined) and description is not None: | 
| 
62
 
30100690ad3f
display defaults with command line --help option
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
61 
diff
changeset
 | 
26 description += ' [DEFAULT: %s]' % variable.default | 
| 
60
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
27 parser.add_option('--%s' % variable.name, dest=variable.name, | 
| 
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
28 default=variable.default, | 
| 
62
 
30100690ad3f
display defaults with command line --help option
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
61 
diff
changeset
 | 
29 help=description) | 
| 
58
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
30 return parser | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
31 | 
| 
85
 
cb6c54b1adf3
allow .parse() to be consumed
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
77 
diff
changeset
 | 
32 def parse(self, parser=None, options=None, args=None): | 
| 
 
cb6c54b1adf3
allow .parse() to be consumed
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
77 
diff
changeset
 | 
33 | 
| 
 
cb6c54b1adf3
allow .parse() to be consumed
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
77 
diff
changeset
 | 
34 # parse the command line | 
| 
 
cb6c54b1adf3
allow .parse() to be consumed
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
77 
diff
changeset
 | 
35 if not parser or not options or not args: | 
| 
 
cb6c54b1adf3
allow .parse() to be consumed
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
77 
diff
changeset
 | 
36 parser = self.parser() | 
| 
 
cb6c54b1adf3
allow .parse() to be consumed
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
77 
diff
changeset
 | 
37 options, args = parser.parse_args() | 
| 
58
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
38 | 
| 
60
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
39 # ensure output is given | 
| 
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
40 if len(args) != 1: | 
| 
61
 
57f9b0349192
wait, its completely silly to print the variables since OptionParser already does that
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
60 
diff
changeset
 | 
41 parser.error("Please specify a single output destination") | 
| 
60
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
42 | 
| 
58
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
43 # template variables | 
| 
60
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
44 variables = dict([(key, value) | 
| 
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
45 for key, value in options.__dict__.items() | 
| 
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
46 if not key.startswith('_')]) | 
| 
58
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
47 | 
| 59 | 48 # instantiate the template | 
| 
60
 
da0d8c5c5157
what i really meant to do with variables
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
59 
diff
changeset
 | 
49 template = self.template_class(output=args[0], variables=variables) | 
| 
58
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
50 | 
| 
 
112bf081148c
make a full CLI class for a single API template
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
57 
diff
changeset
 | 
51 return template | 
