@@ -1179,12 +1179,21 @@ def _validate_single_feature(self, exec_obj, OriginalResource, upsert_key, layer
11791179 # cleaning up the feature from memory
11801180 self ._create_error_log (exec_obj , layers , errors )
11811181
1182+ def __get_csv_headers (self ):
1183+ constrained_attributes = []
1184+ for handler in feature_validators_registry .HANDLERS :
1185+ if hasattr (handler , "restrictions" ):
1186+ constrained_attributes .extend (handler .restrictions .keys ())
1187+ return ["fid" ] + constrained_attributes + ["error" ]
1188+
11821189 def _create_error_log (self , exec_obj , layers , errors ):
11831190 logger .error (
11841191 "Error found during the upsert process, no update/create will be perfomed. The error log is going to be created..."
11851192 )
11861193 errors_to_print = errors [: settings .UPSERT_LIMIT_ERROR_LOG ]
1187- fieldnames = errors_to_print [0 ].keys ()
1194+
1195+ fieldnames = self .__get_csv_headers ()
1196+
11881197 log_name = f'error_{ layers [0 ].GetName ()} _{ datetime .now ().strftime ("%Y-%m-%d_%H-%M-%S" )} .csv'
11891198
11901199 with tempfile .TemporaryDirectory () as temp_dir_str :
@@ -1194,7 +1203,7 @@ def _create_error_log(self, exec_obj, layers, errors):
11941203 csv_file_path = subfolder_path / log_name
11951204 with open (csv_file_path , "w" , newline = "" , encoding = "utf-8" ) as csvfile :
11961205 # Create a DictWriter object. It maps dictionaries to output rows.
1197- writer = csv .DictWriter (csvfile , fieldnames = fieldnames )
1206+ writer = csv .DictWriter (csvfile , fieldnames = fieldnames , extrasaction = "ignore" )
11981207 writer .writeheader ()
11991208 writer .writerows (errors_to_print )
12001209
0 commit comments