def update(self, id, *args, **kwargs):
        """
        Update a source

        Updates source information
        If the specified source does not exist, the request will return an error
        <figure class="notice">
        If you want to update a source, you **must** make sure source's name is unique
        </figure>

        :calls: ``put /deal_sources/{id}``
        :param int id: Unique identifier of a DealSource.
        :param tuple *args: (optional) Single object representing DealSource resource which attributes should be updated.
        :param dict **kwargs: (optional) DealSource attributes to update.
        :return: Dictionary that support attriubte-style access and represents updated DealSource resource.
        :rtype: dict
        """

        if not args and not kwargs:
            raise Exception('attributes for DealSource are missing')

        attributes = args[0] if args else kwargs
        attributes = dict((k, v) for k, v in attributes.iteritems() if k in self.OPTS_KEYS_TO_PERSIST)

        _, _, deal_source = self.http_client.put("/deal_sources/{id}".format(id=id), body=attributes)
        return deal_source