code: def build_subcommands_parser(parser, module):
      
      mdefs = module.__dict__
      keys = list(mdefs.keys())
      keys.sort()
      subparsers = parser.add_subparsers(help='sub-command help')
      for command in keys:
          if command.startswith('pub_'):
              func = module.__dict__[command]
              parser = subparsers.add_parser(command[4:], help=func.__doc__)
              parser.set_defaults(func=func)
              argspec = inspect.getargspec(func)
              flags = len(argspec.args)
              if argspec.defaults:
                  flags = len(argspec.args) - len(argspec.defaults)
              if flags >= 1:
                  for arg in argspec.args[:flags - 1]:
                      parser.add_argument(arg)
                  parser.add_argument(argspec.args[flags - 1], nargs='*')
              short_opts = set([])
              for idx, arg in enumerate(argspec.args[flags:]):
                  arg = arg.replace('_', '-')
                  short_opt = arg[0]
                  if not (arg.startswith('no') or (short_opt in short_opts)):
                      opts = ['-%s' % short_opt, '--%s' % arg]
                  else:
                      opts = ['--%s' % arg]
                  short_opts |= set([short_opt])
                  if isinstance(argspec.defaults[idx], list):
                      parser.add_argument(*opts, action='append')
                  elif isinstance(argspec.defaults[idx], dict):
                      parser.add_argument(*opts, type=json.loads)
                  elif argspec.defaults[idx] is False:
                      parser.add_argument(*opts, action='store_true')
                  elif argspec.defaults[idx] is not None:
                      parser.add_argument(*opts, default=argspec.defaults[idx])
                  else:
                      parser.add_argument(*opts)
docs: Returns a parser for the subcommands defined in the *module*
      (i.e. commands starting with a 'pub_' prefix).