<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_insight(self, project_key, insight_id, **kwargs):
 """Update an insight. **Note that only elements included in the request will be updated. All omitted elements will remain untouched. :param project_key: Projrct identifier, in the form of projectOwner/projectid :type project_key: str :param insight_id: Insight unique identifier. :type insight_id: str :param title: Insight title :type title: str :param description: Insight description. :type description: str, optional :param image_url: If image-based, the URL of the image :type image_url: str :param embed_url: If embed-based, the embeddable URL :type embed_url: str :param source_link: Permalink to source code or platform this insight was generated with. Allows others to replicate the steps originally used to produce the insight. :type source_link: str, optional :param data_source_links: One or more permalinks to the data sources used to generate this insight. Allows others to access the data originally used to produce the insight. :type data_source_links: array :returns: message object :rtype: object :raises RestApiException: If a server error occurs Examples -------- """

        request = self.__build_insight_obj(
            lambda: _swagger.InsightPatchRequest(), kwargs)
        project_owner, project_id = parse_dataset_key(project_key)
        try:
            self._insights_api.update_insight(project_owner,
                                              project_id,
                                              insight_id, body=request)
        except _swagger.rest.ApiException as e:
            raise RestApiError(cause=e)