@@ -70,21 +70,24 @@ def convert_type(type_string, value, timezone = pytz.timezone('UTC')):
70
70
raise ValueError ('Unrecognised type: "{}"' .format (type_string ))
71
71
72
72
73
- def merge (base , mergee ):
73
+ def merge (base , mergee , debug_info = None ):
74
+ if not debug_info :
75
+ debug_info = {}
74
76
for key , value in mergee .items ():
75
77
if key in base :
76
78
if isinstance (value , TemporaryDict ):
77
79
for temporarydict_key , temporarydict_value in value .items ():
78
80
if temporarydict_key in base [key ]:
79
- merge (base [key ][temporarydict_key ], temporarydict_value )
81
+ merge (base [key ][temporarydict_key ], temporarydict_value , debug_info )
80
82
else :
81
83
base [key ][temporarydict_key ] = temporarydict_value
82
84
for temporarydict_value in value .items_no_keyfield :
83
85
base [key ].items_no_keyfield .append (temporarydict_value )
84
86
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 ))
88
91
else :
89
92
base [key ] = value
90
93
@@ -162,7 +165,7 @@ def unflatten(self):
162
165
if root_id_or_none not in main_sheet_by_ocid :
163
166
main_sheet_by_ocid [root_id_or_none ] = TemporaryDict ('id' )
164
167
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 } )
166
169
else :
167
170
main_sheet_by_ocid [root_id_or_none ].append (unflattened )
168
171
0 commit comments