Mercurial > hg > MakeItSo
comparison makeitso/cli.py @ 60:da0d8c5c5157
what i really meant to do with variables
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Thu, 06 Jan 2011 17:12:36 -0800 |
| parents | 93f2b2c7f838 |
| children | 57f9b0349192 |
comparison
equal
deleted
inserted
replaced
| 59:93f2b2c7f838 | 60:da0d8c5c5157 |
|---|---|
| 13 def parser(self): | 13 def parser(self): |
| 14 """ | 14 """ |
| 15 return a command line parser for the template | 15 return a command line parser for the template |
| 16 """ | 16 """ |
| 17 usage = '%prog [options] output [var1=value1] [var2=value2] [...]' | 17 usage = '%prog [options] output [var1=value1] [var2=value2] [...]' |
| 18 description = getattr(template, 'description', None) | 18 description = getattr(self.template_class, 'description', None) |
| 19 parser = OptionParser(usage=usage, description=description) | 19 parser = OptionParser(usage=usage, description=description) |
| 20 parser.add_options('--variables', dest='variables', | 20 |
| 21 action='store_true', default=False, | 21 # add the variables as options |
| 22 help="display variables in the template") | 22 for variable in self.template_class.vars: |
| 23 parser.add_option('--%s' % variable.name, dest=variable.name, | |
| 24 default=variable.default, | |
| 25 help=variable.description) | |
| 26 | |
| 27 # add CLI-specific options | |
| 28 # should start with '_' to indicate reserved | |
| 29 parser.add_option('--variables', dest='_print_variables', | |
| 30 action='store_true', default=False, | |
| 31 help="display variables in the template") | |
| 23 return parser | 32 return parser |
| 24 | 33 |
| 25 def parse(self): | 34 def parse(self): |
| 26 parser = self.parser() | 35 parser = self.parser() |
| 27 options, args = parser.parse_args() | 36 options, args = parser.parse_args() |
| 28 | 37 |
| 29 # print the variables for the templates | 38 # print the variables for the templates |
| 30 if options.variables: | 39 if options._print_variables: |
| 31 | |
| 32 # makes no sense without a template | |
| 33 if not args: | |
| 34 parser.print_usage() | |
| 35 parser.exit() | |
| 36 | 40 |
| 37 # find all variables | 41 # find all variables |
| 38 template = self.template() | 42 template = self.template() |
| 39 variables = template.variables() | 43 variables = template.variables() |
| 40 | 44 |
| 41 # print them | 45 # print them |
| 42 for variable in sorted(variables): | 46 for variable in sorted(variables): |
| 43 print variable | 47 print variable |
| 44 return | 48 return |
| 45 | 49 |
| 50 # ensure output is given | |
| 51 if len(args) != 1: | |
| 52 parser.error("Please specify one output") | |
| 53 | |
| 46 # template variables | 54 # template variables |
| 47 variables = {} | 55 variables = dict([(key, value) |
| 48 output = [] | 56 for key, value in options.__dict__.items() |
| 49 for arg in args: | 57 if not key.startswith('_')]) |
| 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 |
| 58 # instantiate the template | 59 # instantiate the template |
| 59 template = self.template_class(output=output[0], variables=variables) | 60 template = self.template_class(output=args[0], variables=variables) |
| 60 | 61 |
| 61 return template | 62 return template |
