view 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
line wrap: on
line source

"""
command line parser for MakeItSo
"""

from optparse import OptionParser

class MakeItSoCLI(object):
  """command line interface to a makeitso template"""
  
  def __init__(self, template_class):
    self.template_class = template_class

  def parser(self):
    """
    return a command line parser for the template
    """
    usage = '%prog [options] output [var1=value1] [var2=value2] [...]'
    description = getattr(template, 'description', None)
    parser = OptionParser(usage=usage, description=description)
    parser.add_options('--variables', dest='variables', 
                       action='store_true', default=False,
                       help="display variables in the template")
    return parser

  def parse(self):
    parser = self.parser()
    options, args = parser.parse_args()

    # print the variables for the templates
    if options.variables:

        # makes no sense without a template
        if not args:
            parser.print_usage()
            parser.exit()

        # find all variables
        template = self.template()
        variables = template.variables()

        # print them
        for variable in sorted(variables):
            print variable
        return

    # template variables
    variables = {}
    output = []
    for arg in args:
        if '=' in arg:
            key, value = arg.split('=')
            variables[key] = value
        else:
            output.append(arg)
    if len(output) != 1:
      parser.error("Please specify one output")
    
    template = self.template_class(output=output[0], variables=variables)

    return template