Как создать ручной diff между двумя объектами Json, который можно отправить в Reviewboard с помощью python?

Как мне создать diff из двух объектов json, чтобы они были в ручном формате diff, который можно отправить на обзорную доску? Мне нужно сгенерировать diff из скрипта Python. Я думаю, что ручные diff генерируются с помощью утилиты командной строки "diff file1 file2". Могу ли я сгенерировать похожий diff, совместимый с reviewboard, используя difflib? Или мне нужна другая библиотека? Спасибо!

2 ответа

Решение

Используйте difflib:

def show_diff(seqm):
    output= []
    for opcode, a0, a1, b0, b1 in seqm.get_opcodes():
        if opcode == 'equal':
            output.append(seqm.a[a0:a1])
        elif opcode == 'insert':
            output.append("<ins>" + seqm.b[b0:b1] + "</ins>")
        elif opcode == 'delete':
            output.append("<del>" + seqm.a[a0:a1] + "</del>")
        elif opcode == 'replace':
            output.append("<del>" + seqm.a[a0:a1] + "</del>" + "<ins>" + seqm.b[b0:b1] + "</ins>" )
        else:
            raise RuntimeError, "Unexpected opcode"
    return ''.join(output)

В вашей ситуации вы сравниваете ваши файлы JSON (я просто использовал фиктивный текст):

In [4]: sm = difflib.SequenceMatcher(None, 'hello', 'hello world')

In [6]: diff = show_diff(sm)

In [7]: diff
Out[7]: 'hello<ins> world</ins>'

Посмотрите документацию, если вам нужен другой вывод из difflib

Я просто думаю, что прежде чем перейти к diff, вам следует переформатировать объект JSON, скажем, в алфавитном и числовом порядке.

Другие вопросы по тегам