docs: def build_response(self, response, path=None, parser=json_decode_wrapper, async=False):
          """ Builds a List or Dict response object.
  
              Wrapper for a response from the DataSift REST API, can be accessed as a list.
  
              :param response: HTTP response to wrap
              :type response: :class:`~datasift.requests.DictResponse`
              :param parser: optional parser to overload how the data is loaded
              :type parser: func
              :raises: :class:`~datasift.exceptions.DataSiftApiException`, :class:`~datasift.exceptions.DataSiftApiFailure`, :class:`~datasift.exceptions.AuthException`, :class:`requests.exceptions.HTTPError`, :class:`~datasift.exceptions.RateLimitException`
          """
          if async:
              response.process = lambda: self.build_response(response.result(), path=path, parser=parser, async=False)
              return response
          if response.status_code != 204:
              try:
                  data = parser(response.headers, response.text)
              except ValueError as e:
                  raise DataSiftApiFailure(u"Unable to decode returned data: %s" % e)
              if "error" in data:
                  if response.status_code == 401:
                      raise AuthException(data)
                  if response.status_code == 403 or response.status_code == 429:
                      if not response.headers.get("X-RateLimit-Cost"):
                          raise DataSiftApiException(DictResponse(response, data))
                      if int(response.headers.get("X-RateLimit-Cost")) > int(response.headers.get("X-RateLimit-Remaining")):
                          raise RateLimitException(DictResponse(response, data))
                  raise DataSiftApiException(DictResponse(response, data))
              response.raise_for_status()
              if isinstance(data, dict):
                  r = DictResponse(response, data)
              elif isinstance(data, (list, map)):
                  r = ListResponse(response, data)
              self.outputmapper.outputmap(r)
              return r
  
          else:
              # empty dict
              return DictResponse(response, {})