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