docs: def elcm_request(irmc_info, method, path, **kwargs):
      """send an eLCM request to the server
  
      :param irmc_info: dict of iRMC params to access the server node
          {
            'irmc_address': host,
            'irmc_username': user_id,
            'irmc_password': password,
            'irmc_port': 80 or 443, default is 443,
            'irmc_auth_method': 'basic' or 'digest', default is 'basic',
            'irmc_client_timeout': timeout, default is 60,
            ...
          }
      :param method: request method such as 'GET', 'POST'
      :param path: url path for eLCM request
      :returns: requests.Response from SCCI server
      :raises SCCIInvalidInputError: if port and/or auth_method params
               are invalid
      :raises SCCIClientError: if SCCI failed
      """
      host = irmc_info['irmc_address']
      port = irmc_info.get('irmc_port', 443)
      auth_method = irmc_info.get('irmc_auth_method', 'basic')
      userid = irmc_info['irmc_username']
      password = irmc_info['irmc_password']
      client_timeout = irmc_info.get('irmc_client_timeout', 60)
  
      # Request headers, params, and data
      headers = kwargs.get('headers', {'Accept': 'application/json'})
      params = kwargs.get('params')
      data = kwargs.get('data')
  
      auth_obj = None
      try:
          protocol = {80: 'http', 443: 'https'}[port]
          auth_obj = {
              'basic': requests.auth.HTTPBasicAuth(userid, password),
              'digest': requests.auth.HTTPDigestAuth(userid, password)
          }[auth_method.lower()]
  
      except KeyError:
          raise scci.SCCIInvalidInputError(
              ("Invalid port %(port)d or " +
               "auth_method for method %(auth_method)s") %
              {'port': port, 'auth_method': auth_method})
  
      try:
          r = requests.request(method,
                               protocol + '://' + host + path,
                               headers=headers,
                               params=params,
                               data=data,
                               verify=False,
                               timeout=client_timeout,
                               allow_redirects=False,
                               auth=auth_obj)
      except requests.exceptions.RequestException as requests_exception:
          raise scci.SCCIClientError(requests_exception)
  
      # Process status_code 401
      if r.status_code == 401:
          raise scci.SCCIClientError('UNAUTHORIZED')
  
      return r