Update a deal

        Updates deal information
        If the specified deal does not exist, the request will return an error
        <figure class="notice">
        In order to modify tags used on a record, you need to supply the entire set
        `tags` are replaced every time they are used in a request
        </figure>

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

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

        Updates deal information
        If the specified deal does not exist, the request will return an error
        <figure class="notice">
        In order to modify tags used on a record, you need to supply the entire set
        `tags` are replaced every time they are used in a request
        </figure>

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

        if not args and not kwargs:
            raise Exception('attributes for Deal 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)
        if "value" in attributes:
            attributes["value"] = Coercion.to_string(attributes["value"])

        _, _, deal = self.http_client.put("/deals/{id}".format(id=id), body=attributes)
        deal["value"] = Coercion.to_decimal(deal["value"])
        return deal