Skip to content

Commit 6b3ba79

Browse files
committed
[#90] Improve warning message for merge conflict
1 parent 7a69d89 commit 6b3ba79

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

flattentool/input.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,21 +70,24 @@ def convert_type(type_string, value, timezone = pytz.timezone('UTC')):
7070
raise ValueError('Unrecognised type: "{}"'.format(type_string))
7171

7272

73-
def merge(base, mergee):
73+
def merge(base, mergee, debug_info=None):
74+
if not debug_info:
75+
debug_info = {}
7476
for key, value in mergee.items():
7577
if key in base:
7678
if isinstance(value, TemporaryDict):
7779
for temporarydict_key, temporarydict_value in value.items():
7880
if temporarydict_key in base[key]:
79-
merge(base[key][temporarydict_key], temporarydict_value)
81+
merge(base[key][temporarydict_key], temporarydict_value, debug_info)
8082
else:
8183
base[key][temporarydict_key] = temporarydict_value
8284
for temporarydict_value in value.items_no_keyfield:
8385
base[key].items_no_keyfield.append(temporarydict_value)
8486
elif isinstance(value, dict) and isinstance(base[key], dict):
85-
merge(base[key], value)
86-
elif base[key] != mergee[key]:
87-
warn('Conflict between main sheet and sub sheet') # FIXME make this more useful (we used to say which subsheet broke...)
87+
merge(base[key], value, debug_info)
88+
elif base[key] != value:
89+
warn('Conflict when merging {} in sheet {}: {} != {}'.format(
90+
key, debug_info.get('sheet_name'), base[key], value))
8891
else:
8992
base[key] = value
9093

@@ -162,7 +165,7 @@ def unflatten(self):
162165
if root_id_or_none not in main_sheet_by_ocid:
163166
main_sheet_by_ocid[root_id_or_none] = TemporaryDict('id')
164167
if 'id' in unflattened and unflattened['id'] in main_sheet_by_ocid[root_id_or_none]:
165-
merge(main_sheet_by_ocid[root_id_or_none][unflattened.get('id')], unflattened)
168+
merge(main_sheet_by_ocid[root_id_or_none][unflattened.get('id')], unflattened, {'sheet_name':sheet_name})
166169
else:
167170
main_sheet_by_ocid[root_id_or_none].append(unflattened)
168171

flattentool/tests/test_input_SpreadsheetInput_unflatten_mulitplesheets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ def test_conflicting_rollup(self, recwarn):
323323
]
324324
# We should have a warning about the conflict
325325
w = recwarn.pop(UserWarning)
326-
assert 'Conflict between main sheet and sub sheet' in text_type(w.message)
326+
assert 'Conflict when merging testB in sheet testA: 4 != 5' in text_type(w.message)
327327

328328

329329
class TestUnflattenEmpty(object):

0 commit comments

Comments
 (0)