Returns a dictionary of headers for a report download request.

    Note that the given keyword arguments will override any settings configured
    from the googleads.yaml file.

    Args:
      **kwargs: Optional keyword arguments.

    Keyword Arguments:
      client_customer_id: A string containing a client_customer_id intended to
        override the default value set by the AdWordsClient.
      include_zero_impressions: A boolean indicating whether the report should
        show rows with zero impressions.
      skip_report_header: A boolean indicating whether to include a header row
          containing the report name and date range. If false or not specified,
          report output will include the header row.
      skip_column_header: A boolean indicating whether to include column names
          in reports. If false or not specified, report output will include the
          column names.
      skip_report_summary: A boolean indicating whether to include a summary row
          containing the report totals. If false or not specified, report output
          will include the summary row.
      use_raw_enum_values: A boolean indicating whether to return enum field
          values as enums instead of display values.

    Returns:
      A dictionary containing the headers configured for downloading a report.

    Raises:
      GoogleAdsValueError: If one or more of the report header keyword arguments
        is invalid.

def GetReportDownloadHeaders(self, **kwargs):
    """Returns a dictionary of headers for a report download request.

    Note that the given keyword arguments will override any settings configured
    from the googleads.yaml file.

    Args:
      **kwargs: Optional keyword arguments.

    Keyword Arguments:
      client_customer_id: A string containing a client_customer_id intended to
        override the default value set by the AdWordsClient.
      include_zero_impressions: A boolean indicating whether the report should
        show rows with zero impressions.
      skip_report_header: A boolean indicating whether to include a header row
          containing the report name and date range. If false or not specified,
          report output will include the header row.
      skip_column_header: A boolean indicating whether to include column names
          in reports. If false or not specified, report output will include the
          column names.
      skip_report_summary: A boolean indicating whether to include a summary row
          containing the report totals. If false or not specified, report output
          will include the summary row.
      use_raw_enum_values: A boolean indicating whether to return enum field
          values as enums instead of display values.

    Returns:
      A dictionary containing the headers configured for downloading a report.

    Raises:
      GoogleAdsValueError: If one or more of the report header keyword arguments
        is invalid.
    """
    headers = self._adwords_client.oauth2_client.CreateHttpHeader()
    headers.update({
        'Content-type': self._CONTENT_TYPE,
        'developerToken': str(self._adwords_client.developer_token),
        'clientCustomerId': str(kwargs.get(
            'client_customer_id', self._adwords_client.client_customer_id)),
        'User-Agent': ''.join([
            self._adwords_client.user_agent,
            googleads.common.GenerateLibSig(self._PRODUCT_SIG),
            ',gzip'])
    })
    headers.update(self.custom_http_headers)

    updated_kwargs = dict(self._adwords_client.report_download_headers)
    updated_kwargs.update(kwargs)

    for kw in updated_kwargs:
      try:
        headers[_REPORT_HEADER_KWARGS[kw]] = str(updated_kwargs[kw])
      except KeyError:
        raise googleads.errors.GoogleAdsValueError(
            'The provided keyword "%s" is invalid. Accepted keywords are: %s'
            % (kw, _REPORT_HEADER_KWARGS.keys()))

    return headers