From 00d3433c758f3100f142930eb8a9171bcf67620c Mon Sep 17 00:00:00 2001 From: Aleksander Date: Mon, 25 Nov 2019 11:30:34 +0100 Subject: [PATCH 1/2] convert OrderedDicts to dicts to make diff more understandable --- pytest_icdiff.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/pytest_icdiff.py b/pytest_icdiff.py index d7e68a4..9ff0d11 100644 --- a/pytest_icdiff.py +++ b/pytest_icdiff.py @@ -1,3 +1,5 @@ +from collections import OrderedDict + from pprintpp import pformat import icdiff @@ -12,6 +14,11 @@ def pytest_assertrepr_compare(config, op, left, right): except TypeError: pass + if isinstance(left, OrderedDict): + left = _convert_to_dict(left) + if isinstance(right, OrderedDict): + right = _convert_to_dict(right) + terminal_writer = config.get_terminal_writer() cols = terminal_writer.fullwidth - 12 @@ -27,7 +34,6 @@ def pytest_assertrepr_compare(config, op, left, right): pretty_left = pformat(left, indent=2, width=cols / 2).splitlines() pretty_right = pformat(right, indent=2, width=cols / 2).splitlines() - differ = icdiff.ConsoleDiff(cols=cols + 12, tabsize=2) if not terminal_writer.hasmarkup: @@ -43,3 +49,20 @@ def pytest_assertrepr_compare(config, op, left, right): icdiff_lines = list(differ.make_table(pretty_left, pretty_right)) return ['equals failed'] + [color_off + l for l in icdiff_lines] + + +def _convert_to_dict(layer): + """Converts nested ordered dicts to normal dicts""" + result = layer + if isinstance(layer, OrderedDict): + result = dict(layer) + if isinstance(layer, list): + return [_convert_to_dict(item) for item in layer] + + try: + for key, value in result.items(): + result[key] = _convert_to_dict(value) + except AttributeError: + pass + + return result From 2fc8e2201ff102615477bd14e44885c3e4a35c70 Mon Sep 17 00:00:00 2001 From: Aleksander Date: Tue, 26 Nov 2019 08:40:31 +0100 Subject: [PATCH 2/2] convert only if types mismatch --- pytest_icdiff.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pytest_icdiff.py b/pytest_icdiff.py index 9ff0d11..522a1c4 100644 --- a/pytest_icdiff.py +++ b/pytest_icdiff.py @@ -14,9 +14,9 @@ def pytest_assertrepr_compare(config, op, left, right): except TypeError: pass - if isinstance(left, OrderedDict): + if isinstance(left, OrderedDict) and type(right) is dict: left = _convert_to_dict(left) - if isinstance(right, OrderedDict): + if isinstance(right, OrderedDict) and type(left) is dict: right = _convert_to_dict(right) terminal_writer = config.get_terminal_writer()