code: def invoke_parser(self, supparser=None, noexit=False):
          
          if supparser:
              parser = supparser.add_parser(self.NAME, description=self.DESCRIPTION)
          else:
              if noexit:
                  class NoExitArgumentParser(argparse.ArgumentParser):
                      def exit(self, status=0, message=None):
                          raise ParserError()
                      def error(self, message):
                          raise ParserError()
  
                  parser = NoExitArgumentParser(prog=self.NAME, description=self.DESCRIPTION)
              else:
                  parser = argparse.ArgumentParser(prog=self.NAME, description=self.DESCRIPTION)
  
  
          def populate_parser(parser, dataset):
              for elem in dataset:
                  opts = {}
                  opts['help'] = elem.description
                  opts['required'] = not elem.optional
                  if elem.multi: opts['action'] = 'append'
                  parser.add_argument('--'+elem.name, **opts)
  
          # populate parser with INPUTS
          populate_parser(parser, self.INPUTS)
          # populate parser with OUTPUTS
          populate_parser(parser, self.OUTPUTS)
          # populate parser with PARAMETERS
          for param in self.PARAMETERS:
              opts = {}
              opts['help'] = param.description
              opts['required'] = not param.optional
              if isinstance(param.datatype, tuple):
                  opts['type'] = str
                  #opts['type'] = param.datatype[1]
              else:
                  opts['type'] = param.datatype
  
              if param.multi: opts['action'] = 'append'
              if param.choices:
                  if isinstance(param.choices, tuple):
                      # if choices is a tuple, assume it is a tuple of mappings
                      # and expand them
                      opts['choices'] = [ choice[0] for choice in param.choices ]
                  else:
                      opts['choices'] = param.choices
              parser.add_argument('--'+param.name, **opts)
  
          if self.USE_ARGUMENTS:
              parser.add_argument('--_tempdir',required=False, help=argparse.SUPPRESS)
          return parser
docs: Return a commandline parser (argparse) for the processor.