'Update this issue on the server.
Each keyword argument (other than the predefined ones) is treated as a field name and the argument\'s value
is treated as the intended value for that field -- if the fields argument is used, all other keyword arguments
will be ignored.
JIRA projects may contain many different issue types. Some issue screens have different requirements for
fields in an issue. This information is available through the :py:meth:`.JIRA.editmeta` method. Further examples
are available here: https://developer.atlassian.com/display/JIRADEV/JIRA+REST+API+Example+-+Edit+issues
:param fields: a dict containing field names and the values to use
:param update: a dict containing update operations to apply
keyword arguments will generally be merged into fields, except lists, which will be merged into updates'

def update(self, fields=None, update=None, async=None, jira=None, notify=True, **fieldargs):

    data = {}
    if (fields is not None):
        fields_dict = fields
    else:
        fields_dict = {}
    data[u'fields'] = fields_dict
    if (update is not None):
        update_dict = update
    else:
        update_dict = {}
    data[u'update'] = update_dict
    for field in sorted(fieldargs.keys()):
        value = fieldargs[field]
        if isinstance(value, string_types):
            if ((field == u'assignee') or (field == u'reporter')):
                fields_dict[u'assignee'] = {u'name': value}
            elif (field == u'comment'):
                if (u'comment' not in update_dict):
                    update_dict[u'comment'] = []
                update_dict[u'comment'].append({u'add': {u'body': value}})
            else:
                fields_dict[field] = value
        elif isinstance(value, list):
            if (field not in update_dict):
                update_dict[field] = []
            update_dict[field].extend(value)
        else:
            fields_dict[field] = value
    super(Issue, self).update(async=async, jira=jira, notify=notify, fields=data)
