Skip to content

Commit f0ddad3

Browse files
Add error_report config to toggle record rejection reporting
1 parent d42897f commit f0ddad3

4 files changed

Lines changed: 36 additions & 8 deletions

File tree

‎src/dve/core_engine/configuration/v1/__init__.py‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,21 @@ class V1TransformationConfig(BaseModel):
166166
"""Complex rules."""
167167

168168

169+
class V1ErrorReportConfig(BaseModel):
170+
"""Configuration for the error report component of the dataset."""
171+
172+
record_rejection_reporting: bool = True
173+
174+
169175
class V1EngineConfig(BaseEngineConfig):
170176
"""A loader for the first version of the configuration language."""
171177

172178
contract: V1DataContractConfig
173179
"""The data contract configuration."""
174180
transformations: V1TransformationConfig = Field(default_factory=V1TransformationConfig)
175181
"""The transformation/rules configuration."""
182+
error_report: V1ErrorReportConfig = Field(default_factory=V1ErrorReportConfig)
183+
"""The error report configuration."""
176184
_rule_store_rules: dict[RuleName, BusinessComponentSpecConfigUnion] = PrivateAttr(
177185
default_factory=dict
178186
)

‎src/dve/pipeline/pipeline.py‎

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from collections import defaultdict
88
from collections.abc import Generator, Iterable, Iterator
99
from concurrent.futures import Executor, Future, ThreadPoolExecutor
10-
from functools import lru_cache
1110
from itertools import starmap
1211
from threading import Lock
1312
from typing import Any, Optional, Union
@@ -34,6 +33,7 @@
3433
from dve.core_engine.backends.readers.utilities import get_all_model_fields
3534
from dve.core_engine.backends.types import EntityType
3635
from dve.core_engine.backends.utilities import stringify_model
36+
from dve.core_engine.configuration.v1 import V1ErrorReportConfig
3737
from dve.core_engine.exceptions import CriticalProcessingError
3838
from dve.core_engine.loggers import get_logger
3939
from dve.core_engine.message import FeedbackMessage
@@ -745,8 +745,7 @@ def _publish_error_aggregates(self, submission_id: str, aggregates_df: pl.DataFr
745745
aggregates_df.write_parquet(output_uri)
746746
return output_uri
747747

748-
@lru_cache() # noqa: B019
749-
def _get_error_dataframes(self, submission_id: str):
748+
def _get_error_dataframes(self, submission_id: str, include_record_rejections: bool = True):
750749
if not self.processed_files_path:
751750
raise AttributeError("processed files path not provided")
752751

@@ -794,12 +793,19 @@ def _get_error_dataframes(self, submission_id: str):
794793
errors_dfs.append(df)
795794

796795
errors_df = pl.concat(errors_dfs, how="align") # type: ignore
796+
if not include_record_rejections:
797+
errors_df = errors_df.filter(
798+
pl.col("Type") != ErrorReportCategories.RECORD_REJECTION.reporting_name
799+
)
797800
aggregates = calculate_aggregates(errors_df)
798801

799802
return errors_df, aggregates
800803

801804
def error_report(
802-
self, submission_info: SubmissionInfo, submission_status: Optional[SubmissionStatus] = None
805+
self,
806+
submission_info: SubmissionInfo,
807+
submission_status: Optional[SubmissionStatus] = None,
808+
error_report_config: Optional[V1ErrorReportConfig] = None,
803809
) -> tuple[
804810
SubmissionInfo, SubmissionStatus, Optional[SubmissionStatisticsRecord], Optional[URI]
805811
]:
@@ -821,7 +827,13 @@ def error_report(
821827
raise AttributeError("processed files path not provided")
822828

823829
self._logger.info("Reading error dataframes")
824-
errors_df, aggregates = self._get_error_dataframes(submission_info.submission_id)
830+
if error_report_config is None:
831+
_, config, _ = load_config(submission_info.dataset_id, self.rules_path)
832+
error_report_config = config.error_report
833+
errors_df, aggregates = self._get_error_dataframes(
834+
submission_info.submission_id,
835+
error_report_config.record_rejection_reporting,
836+
)
825837

826838
if not submission_status.number_of_records:
827839
sub_stats = None
@@ -852,7 +864,12 @@ def error_report(
852864
summary_items = er.SummaryItems(
853865
submission_status=submission_status,
854866
summary_dict=summary_dict,
855-
row_headings=[e.reporting_name for e in ErrorReportCategories],
867+
row_headings=[
868+
e.reporting_name
869+
for e in ErrorReportCategories
870+
if error_report_config.record_rejection_reporting
871+
or e != ErrorReportCategories.RECORD_REJECTION
872+
],
856873
)
857874

858875
workbook = er.ExcelFormat(

‎tests/features/animals.feature‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Feature: Pipeline tests using the animal dataset
2424
And The statistics entry for the submission shows the following information
2525
| parameter | value |
2626
| record_count | 5 |
27-
| number_record_rejections | 2 |
27+
| number_record_rejections | 0 |
2828
| number_warnings | 0 |
2929

3030
Scenario: Validate XML data with a mixture of error types in (duckdb)
@@ -55,5 +55,5 @@ Feature: Pipeline tests using the animal dataset
5555
| parameter | value |
5656
| record_count | 7 |
5757
| number_submission_rejections | 1 |
58-
| number_record_rejections | 2 |
58+
| number_record_rejections | 0 |
5959
| number_warnings | 1 |

‎tests/testdata/animals/animals.dischema.json‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,8 @@
5050
"is_informational": true
5151
}
5252
]
53+
},
54+
"error_report": {
55+
"record_rejection_reporting": false
5356
}
5457
}

0 commit comments

Comments
 (0)