Mercurial > hg > MakeItSo
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 |
| 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 | 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 |
