Mercurial > hg > MakeItSo
annotate makeitso/cli.py @ 87:3571417ef92e
interpolate file permissions
| author | Jeff Hammel <jhammel@mozilla.com> | 
|---|---|
| date | Mon, 10 Jan 2011 14:39:21 -0800 | 
| parents | cb6c54b1adf3 | 
| children | e74baa8e6df4 | 
| 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: 
61diff
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: 
57diff
changeset | 8 class MakeItSoCLI(object): | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
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: 
57diff
changeset | 10 | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 11 def __init__(self, template_class): | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 12 self.template_class = template_class | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 13 | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 14 def parser(self): | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 15 """ | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
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: 
57diff
changeset | 17 """ | 
| 68 
cce0da329f59
remove deprecated variable setting from command line front end
 Jeff Hammel <jhammel@mozilla.com> parents: 
62diff
changeset | 18 usage = '%prog [options] output' | 
| 60 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
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: 
57diff
changeset | 20 parser = OptionParser(usage=usage, description=description) | 
| 60 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
changeset | 21 | 
| 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
changeset | 22 # add the variables as options | 
| 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
changeset | 23 for variable in self.template_class.vars: | 
| 62 
30100690ad3f
display defaults with command line --help option
 Jeff Hammel <jhammel@mozilla.com> parents: 
61diff
changeset | 24 description = variable.description | 
| 77 
059b02808efa
ensure the description exists
 Jeff Hammel <jhammel@mozilla.com> parents: 
68diff
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: 
61diff
changeset | 26 description += ' [DEFAULT: %s]' % variable.default | 
| 60 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
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: 
59diff
changeset | 28 default=variable.default, | 
| 62 
30100690ad3f
display defaults with command line --help option
 Jeff Hammel <jhammel@mozilla.com> parents: 
61diff
changeset | 29 help=description) | 
| 58 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 30 return parser | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 31 | 
| 85 
cb6c54b1adf3
allow .parse() to be consumed
 Jeff Hammel <jhammel@mozilla.com> parents: 
77diff
changeset | 32 def parse(self, parser=None, options=None, args=None): | 
| 
cb6c54b1adf3
allow .parse() to be consumed
 Jeff Hammel <jhammel@mozilla.com> parents: 
77diff
changeset | 33 | 
| 
cb6c54b1adf3
allow .parse() to be consumed
 Jeff Hammel <jhammel@mozilla.com> parents: 
77diff
changeset | 34 # parse the command line | 
| 
cb6c54b1adf3
allow .parse() to be consumed
 Jeff Hammel <jhammel@mozilla.com> parents: 
77diff
changeset | 35 if not parser or not options or not args: | 
| 
cb6c54b1adf3
allow .parse() to be consumed
 Jeff Hammel <jhammel@mozilla.com> parents: 
77diff
changeset | 36 parser = self.parser() | 
| 
cb6c54b1adf3
allow .parse() to be consumed
 Jeff Hammel <jhammel@mozilla.com> parents: 
77diff
changeset | 37 options, args = parser.parse_args() | 
| 58 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 38 | 
| 60 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
changeset | 39 # ensure output is given | 
| 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
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: 
60diff
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: 
59diff
changeset | 42 | 
| 58 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 43 # template variables | 
| 60 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
changeset | 44 variables = dict([(key, value) | 
| 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
changeset | 45 for key, value in options.__dict__.items() | 
| 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
changeset | 46 if not key.startswith('_')]) | 
| 58 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 47 | 
| 59 | 48 # instantiate the template | 
| 60 
da0d8c5c5157
what i really meant to do with variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
59diff
changeset | 49 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: 
57diff
changeset | 50 | 
| 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
57diff
changeset | 51 return template | 
