77from collections import defaultdict
88from collections .abc import Generator , Iterable , Iterator
99from concurrent .futures import Executor , Future , ThreadPoolExecutor
10- from functools import lru_cache
1110from itertools import starmap
1211from threading import Lock
1312from typing import Any , Optional , Union
3534from dve .core_engine .backends .readers .utilities import get_all_model_fields
3635from dve .core_engine .backends .types import EntityType
3736from dve .core_engine .backends .utilities import stringify_model
37+ from dve .core_engine .configuration .v1 import V1ErrorReportConfig
3838from dve .core_engine .configuration .v1 .hierarchy import EntityHierarchy
3939from dve .core_engine .exceptions import CriticalProcessingError
4040from dve .core_engine .loggers import get_logger
@@ -886,8 +886,7 @@ def _publish_error_aggregates(self, submission_id: str, aggregates_df: pl.DataFr
886886 aggregates_df .write_parquet (output_uri )
887887 return output_uri
888888
889- @lru_cache () # noqa: B019
890- def _get_error_dataframes (self , submission_id : str ):
889+ def _get_error_dataframes (self , submission_id : str , include_record_rejections : bool = True ):
891890 if not self .processed_files_path :
892891 raise AttributeError ("processed files path not provided" )
893892
@@ -935,12 +934,19 @@ def _get_error_dataframes(self, submission_id: str):
935934 errors_dfs .append (df )
936935
937936 errors_df = pl .concat (errors_dfs , how = "align" ) # type: ignore
937+ if not include_record_rejections :
938+ errors_df = errors_df .filter (
939+ pl .col ("Type" ) != ErrorReportCategories .RECORD_REJECTION .reporting_name
940+ )
938941 aggregates = calculate_aggregates (errors_df )
939942
940943 return errors_df , aggregates
941944
942945 def error_report (
943- self , submission_info : SubmissionInfo , submission_status : Optional [SubmissionStatus ] = None
946+ self ,
947+ submission_info : SubmissionInfo ,
948+ submission_status : Optional [SubmissionStatus ] = None ,
949+ error_report_config : Optional [V1ErrorReportConfig ] = None ,
944950 ) -> tuple [
945951 SubmissionInfo , SubmissionStatus , Optional [SubmissionStatisticsRecord ], Optional [URI ]
946952 ]:
@@ -962,7 +968,13 @@ def error_report(
962968 raise AttributeError ("processed files path not provided" )
963969
964970 self ._logger .info ("Reading error dataframes" )
965- errors_df , aggregates = self ._get_error_dataframes (submission_info .submission_id )
971+ if error_report_config is None :
972+ _ , config , _ = load_config (submission_info .dataset_id , self .rules_path )
973+ error_report_config = config .error_report
974+ errors_df , aggregates = self ._get_error_dataframes (
975+ submission_info .submission_id ,
976+ error_report_config .record_rejection_reporting ,
977+ )
966978
967979 if not submission_status .number_of_records :
968980 sub_stats = None
@@ -993,7 +1005,12 @@ def error_report(
9931005 summary_items = er .SummaryItems (
9941006 submission_status = submission_status ,
9951007 summary_dict = summary_dict ,
996- row_headings = [e .reporting_name for e in ErrorReportCategories ],
1008+ row_headings = [
1009+ e .reporting_name
1010+ for e in ErrorReportCategories
1011+ if error_report_config .record_rejection_reporting
1012+ or e != ErrorReportCategories .RECORD_REJECTION
1013+ ],
9971014 )
9981015
9991016 workbook = er .ExcelFormat (
0 commit comments