annotate makeitso/cli.py @ 95:e74baa8e6df4

fix CLI interface a bit....write a test for it
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 11 Jan 2011 09:06:25 -0800
parents cb6c54b1adf3
children 37f92ae8f999
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
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
95
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
32 def parse(self, args=None, parser=None, options=None):
85
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
95
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
35 if not parser or not options:
85
cb6c54b1adf3 allow .parse() to be consumed
Jeff Hammel <jhammel@mozilla.com>
parents: 77
diff changeset
36 parser = self.parser()
95
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
37 options, args = parser.parse_args(args=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('_')])
95
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
47
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
48 #
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
49 return variables, args[0]
58
112bf081148c make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents: 57
diff changeset
50
95
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
51 def __call__(self, *args):
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
52 variables, output = self.parse(list(args))
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
53 template = self.template_class(variables=variables)
e74baa8e6df4 fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents: 85
diff changeset
54 template.substitute({}, output=output)