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.

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)