<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_attachment_metadata(self, content_id, attachment_id, new_metadata, callback=None):
 """ Update the non-binary data of an Attachment. This resource can be used to update an attachment's filename, media-type, comment, and parent container. :param content_id (string):
 A string containing the ID of the attachments content container. :param attachment_id (string):
 The ID of the attachment to update. :param new_metadata (dict):
 The updated metadata for the attachment. :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}/child/attachment/{attachment_id} endpoint, or the results of the callback. Will raise requests.HTTPError on bad input, potentially. Example attachment metadata: { "id": "att5678", "type": "attachment", "title": "new_file_name.txt", "version": { "number": 2, "minorEdit": false } } """

        assert isinstance(new_metadata, dict) and set(new_metadata.keys()) >= self.ATTACHMENT_METADATA_KEYS
        return self._service_put_request("rest/api/content/{id}/child/attachment/{attachment_id}"
                                         "".format(id=content_id, attachment_id=attachment_id),
                                         data=json.dumps(new_metadata), headers={"Content-Type": "application/json"},
                                         callback=callback)