docs: def create_new_attachment_by_content_id(self, content_id, attachments, callback=None):
          """
          Add one or more attachments to a Confluence Content entity, with optional comments.
  
          Comments are optional, but if included there must be as many comments as there are files, and the comments must
          be in the same order as the files.
          :param content_id (string): A string containing the id of the attachments content container.
          :param attachments (list of dicts or dict): This is a list of dictionaries or a dictionary.
                                                      Each dictionary must have the key
                                                      "file" with a value that is I/O like (file, StringIO, etc.), and
                                                      may also have a key "comment" with a string for file comments.
          :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 endpoint,
                   or the results of the callback. Will raise requests.HTTPError on bad input, potentially.
          """
          if isinstance(attachments, list):
              assert all(isinstance(at, dict) and "file" in list(at.keys()) for at in attachments)
          elif isinstance(attachments, dict):
              assert "file" in list(attachments.keys())
          else:
              assert False
          return self._service_post_request("rest/api/content/{id}/child/attachment".format(id=content_id),
                                            headers={"X-Atlassian-Token": "nocheck"}, files=attachments,
                                            callback=callback)