annotate makeitso/cli.py @ 61:57f9b0349192

wait, its completely silly to print the variables since OptionParser already does that
author Jeff Hammel <jhammel@mozilla.com>
date Thu, 06 Jan 2011 17:14:22 -0800
parents da0d8c5c5157
children 30100690ad3f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
074a32920f7c stub for a command-line parser
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 from optparse import OptionParser
074a32920f7c stub for a command-line parser
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6
58
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
7 class MakeItSoCLI(object):
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
8 """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
9
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
10 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
11 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
12
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
13 def parser(self):
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
14 """
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
15 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
16 """
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
17 usage = '%prog [options] output [var1=value1] [var2=value2] [...]'
60
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
18 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
19 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
20
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
21 # add the variables as options
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
22 for variable in self.template_class.vars:
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
23 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
24 default=variable.default,
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
25 help=variable.description)
58
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
26 return parser
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
27
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
28 def parse(self):
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
29 parser = self.parser()
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
30 options, args = parser.parse_args()
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
31
60
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
32 # ensure output is given
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
33 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
34 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
35
58
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
36 # template variables
60
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
37 variables = dict([(key, value)
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
38 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
39 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
40
59
93f2b2c7f838 add a comment
Jeff Hammel <jhammel@mozilla.com>
parents: 58
diff changeset
41 # instantiate the template
60
da0d8c5c5157 what i really meant to do with variables
Jeff Hammel <jhammel@mozilla.com>
parents: 59
diff changeset
42 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
43
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
44 return template