Compare two rows field by field, return list of (field, before_val, after_val).
(before_row, after_row, headers=None)
| 50 | |
| 51 | |
| 52 | def diff_rows(before_row, after_row, headers=None): |
| 53 | """Compare two rows field by field, return list of (field, before_val, after_val).""" |
| 54 | diffs = [] |
| 55 | if isinstance(before_row, dict) and isinstance(after_row, dict): |
| 56 | all_keys = sorted(set(list(before_row.keys()) + list(after_row.keys()))) |
| 57 | for k in all_keys: |
| 58 | bv = before_row.get(k) |
| 59 | av = after_row.get(k) |
| 60 | if _normalize(bv) != _normalize(av): |
| 61 | diffs.append((k, bv, av)) |
| 62 | elif isinstance(before_row, (list, tuple)) and isinstance(after_row, (list, tuple)): |
| 63 | max_len = max(len(before_row), len(after_row)) |
| 64 | for i in range(max_len): |
| 65 | bv = before_row[i] if i < len(before_row) else None |
| 66 | av = after_row[i] if i < len(after_row) else None |
| 67 | if bv != av: |
| 68 | field = headers[i] if headers and i < len(headers) else f'[{i}]' |
| 69 | diffs.append((field, bv, av)) |
| 70 | return diffs |
| 71 | |
| 72 | |
| 73 | def compare_file(before_path, after_path): |
no test coverage detected