code: def update_property(self, content_id, property_key, new_property_data, callback=None):
          
          assert isinstance(new_property_data, dict) and {"key", "value", "version"} <= set(new_property_data.keys())
          return self._service_put_request("rest/api/content/{id}/property/{key}".format(id=content_id, key=property_key),
                                           data=json.dumps(new_property_data),
                                           headers={"Content-Type": "application/json"}, callback=callback)
docs: Updates a content property.
  
          The body contains the representation of the content property. Must include the property id, and the new version
          number. Attempts to create a new content property if the given version number is 1, just like
          {@link #create(com.atlassian.confluence.api.model.content.id.ContentId, String,
              com.atlassian.confluence.api.model.content.JsonContentProperty)}.
          :param content_id (string): The ID for the content to attach the property to.
          :param property_key (string): The key for the property to update.
          :param new_property_data (dict): The updated property data. This requires the keys "key", "value", and
                                           "version".
          :param callback: OPTIONAL: The callback to execute on the resulting data, before the method returns.
                           Default: None (no callback, raw data returned).
          :return: The JSON data returned from the content/{id}/property/{key} endpoint,
                   or the results of the callback. Will raise requests.HTTPError on bad input, potentially.
  
          Example updated property data:
          {
              "key": "example-property-key",
              "value": {
                  "anything": "goes"
              },
              "version": {
                  "number": 2,
                  "minorEdit": false
              }
          }