Mercurial > hg > MakeItSo
comparison makeitso/cli.py @ 58:112bf081148c
make a full CLI class for a single API template
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 06 Jan 2011 15:54:55 -0800 |
parents | 074a32920f7c |
children | 93f2b2c7f838 |
comparison
equal
deleted
inserted
replaced
57:074a32920f7c | 58:112bf081148c |
---|---|
2 command line parser for MakeItSo | 2 command line parser for MakeItSo |
3 """ | 3 """ |
4 | 4 |
5 from optparse import OptionParser | 5 from optparse import OptionParser |
6 | 6 |
7 def parser(template): | 7 class MakeItSoCLI(object): |
8 """ | 8 """command line interface to a makeitso template""" |
9 return a command line parser for the template | 9 |
10 """ | 10 def __init__(self, template_class): |
11 usage = '%prog [options]' | 11 self.template_class = template_class |
12 description = getattr(template, 'description', None) | |
13 parser = OptionParser(usage=usage, description=description) | |
14 return parser | |
15 | 12 |
13 def parser(self): | |
14 """ | |
15 return a command line parser for the template | |
16 """ | |
17 usage = '%prog [options] output [var1=value1] [var2=value2] [...]' | |
18 description = getattr(template, 'description', None) | |
19 parser = OptionParser(usage=usage, description=description) | |
20 parser.add_options('--variables', dest='variables', | |
21 action='store_true', default=False, | |
22 help="display variables in the template") | |
23 return parser | |
24 | |
25 def parse(self): | |
26 parser = self.parser() | |
27 options, args = parser.parse_args() | |
28 | |
29 # print the variables for the templates | |
30 if options.variables: | |
31 | |
32 # makes no sense without a template | |
33 if not args: | |
34 parser.print_usage() | |
35 parser.exit() | |
36 | |
37 # find all variables | |
38 template = self.template() | |
39 variables = template.variables() | |
40 | |
41 # print them | |
42 for variable in sorted(variables): | |
43 print variable | |
44 return | |
45 | |
46 # template variables | |
47 variables = {} | |
48 output = [] | |
49 for arg in args: | |
50 if '=' in arg: | |
51 key, value = arg.split('=') | |
52 variables[key] = value | |
53 else: | |
54 output.append(arg) | |
55 if len(output) != 1: | |
56 parser.error("Please specify one output") | |
57 | |
58 template = self.template_class(output=output[0], variables=variables) | |
59 | |
60 return template |