docs: 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