docs: def arg_parse(arguments, description=None):
    """
    arg_parse()
  
    Parses the arguments using argparse. Returns a Namespace object. The
    arguments dictionary should match the argparse expected data structure:
  
    .. code-block::python
  
      arguments = {
        '--port': {
          'type'    : int,
          'default' : 3075,
          'help'    : 'Port on which to send data'
        },
        '--verbose': {
          'action'  : 'store_true',
          'default' : False,
          'help'    : 'Hexdump of the raw command being sent.'
        }
      }
  
    For positional arguments, be sure to pass in an OrderedDict:
  
    .. code-block::python
  
      arguments = {
        '--port': {
          'type'    : int,
          'default' : 3075,
          'help'    : 'Port on which to send data'
        },
        '--verbose': {
          'action'  : 'store_true',
          'default' : False,
          'help'    : 'Hexdump of the raw command being sent.'
        }
      }
  
      arguments['command'] = {
        'type' : str,
        'help' : 'Name of the command to send.'
      }
  
      arguments['arguments'] = {
        'type'      : util.toNumberOrStr,
        'metavar'   : 'argument',
        'nargs'     : '*',
        'help'      : 'Command arguments.'
      }
  
    """
    if not description:
      description = ""
  
    ap  = argparse.ArgumentParser(
      description = description,
      formatter_class = argparse.ArgumentDefaultsHelpFormatter
    )
  
    for name, params in arguments.items():
      ap.add_argument(name, **params)
  
    args = ap.parse_args()
    return args