docs: def update_configuration(self,
                               environment_id,
                               configuration_id,
                               name,
                               description=None,
                               conversions=None,
                               enrichments=None,
                               normalizations=None,
                               source=None,
                               **kwargs):
          """
          Update a configuration.
  
          Replaces an existing configuration.
            * Completely replaces the original configuration.
            * The **configuration_id**, **updated**, and **created** fields are accepted in
          the request, but they are ignored, and an error is not generated. It is also
          acceptable for users to submit an updated configuration with none of the three
          properties.
            * Documents are processed with a snapshot of the configuration as it was at the
          time the document was submitted to be ingested. This means that already submitted
          documents will not see any updates made to the configuration.
  
          :param str environment_id: The ID of the environment.
          :param str configuration_id: The ID of the configuration.
          :param str name: The name of the configuration.
          :param str description: The description of the configuration, if available.
          :param Conversions conversions: Document conversion settings.
          :param list[Enrichment] enrichments: An array of document enrichment settings for
          the configuration.
          :param list[NormalizationOperation] normalizations: Defines operations that can be
          used to transform the final output JSON into a normalized form. Operations are
          executed in the order that they appear in the array.
          :param Source source: Object containing source parameters for the configuration.
          :param dict headers: A `dict` containing the request headers
          :return: A `DetailedResponse` containing the result, headers and HTTP status code.
          :rtype: DetailedResponse
          """
  
          if environment_id is None:
              raise ValueError('environment_id must be provided')
          if configuration_id is None:
              raise ValueError('configuration_id must be provided')
          if name is None:
              raise ValueError('name must be provided')
          if conversions is not None:
              conversions = self._convert_model(conversions, Conversions)
          if enrichments is not None:
              enrichments = [
                  self._convert_model(x, Enrichment) for x in enrichments
              ]
          if normalizations is not None:
              normalizations = [
                  self._convert_model(x, NormalizationOperation)
                  for x in normalizations
              ]
          if source is not None:
              source = self._convert_model(source, Source)
  
          headers = {}
          if 'headers' in kwargs:
              headers.update(kwargs.get('headers'))
          sdk_headers = get_sdk_headers('discovery', 'V1', 'update_configuration')
          headers.update(sdk_headers)
  
          params = {'version': self.version}
  
          data = {
              'name': name,
              'description': description,
              'conversions': conversions,
              'enrichments': enrichments,
              'normalizations': normalizations,
              'source': source
          }
  
          url = '/v1/environments/{0}/configurations/{1}'.format(
              *self._encode_path_vars(environment_id, configuration_id))
          response = self.request(
              method='PUT',
              url=url,
              headers=headers,
              params=params,
              json=data,
              accept_json=True)
          return response