|
47 | 47 | from timer import Timer |
48 | 48 | from import_differ.import_differ import ImportDiffer |
49 | 49 | from tools.import_validation.runner import ValidationRunner |
| 50 | +from tools.import_validation.result import ValidationStatus, ValidationResult |
50 | 51 | from tools.import_validation.validation_config import merge_and_save_config |
51 | 52 | from app import configs |
52 | 53 | from app import utils |
@@ -568,6 +569,7 @@ def _invoke_import_validation(self, repo_dir: str, relative_import_dir: str, |
568 | 569 | data_size = 0 |
569 | 570 | import_name = import_spec['import_name'] |
570 | 571 | validation_status = True |
| 572 | + validation_results = [] |
571 | 573 |
|
572 | 574 | import_dir = f'{relative_import_dir}/{import_spec["import_name"]}' |
573 | 575 | latest_version = self._get_latest_version(import_dir) |
@@ -650,7 +652,8 @@ def _invoke_import_validation(self, repo_dir: str, relative_import_dir: str, |
650 | 652 | stats_summary=summary_stats, |
651 | 653 | lint_report=report_json, |
652 | 654 | validation_output=validation_output_file) |
653 | | - overall_status, _ = validation.run_validations() |
| 655 | + overall_status, current_results = validation.run_validations() |
| 656 | + validation_results.extend(current_results) |
654 | 657 | if validation_status: |
655 | 658 | validation_status = overall_status |
656 | 659 | except ValueError as e: |
@@ -683,13 +686,26 @@ def _invoke_import_validation(self, repo_dir: str, relative_import_dir: str, |
683 | 686 | import_summary.import_stats[ |
684 | 687 | 'validation_execution_time'] = start_timer.time() |
685 | 688 | import_summary.import_stats['validation_data_size'] = data_size |
| 689 | + validation_message = self._get_validation_message(validation_results) |
686 | 690 | log_import_status( |
687 | 691 | import_name, import_stage, |
688 | 692 | ImportStatus.SUCCESS if validation_status else ImportStatus.FAILURE, |
689 | 693 | import_summary.import_stats.get('validation_execution_time', 0), |
690 | | - import_summary.import_stats.get('validation_data_size', 0)) |
| 694 | + import_summary.import_stats.get('validation_data_size', |
| 695 | + 0), validation_message) |
691 | 696 | return validation_status |
692 | 697 |
|
| 698 | + def _get_validation_message( |
| 699 | + self, validation_results: List[ValidationResult]) -> str: |
| 700 | + """Generates a summary message of validation results.""" |
| 701 | + failed_validations = [] |
| 702 | + |
| 703 | + for res in validation_results: |
| 704 | + if res.status.name == 'FAILED': |
| 705 | + failed_validations.append(res.name) |
| 706 | + |
| 707 | + return f"FAILED: {', '.join(failed_validations) if failed_validations else 'None'}" |
| 708 | + |
693 | 709 | def _create_mount_point(self, gcs_volume_mount_dir: str, |
694 | 710 | cleanup_gcs_volume_mount: bool, |
695 | 711 | absolute_import_dir: str, import_name: str) -> None: |
@@ -824,10 +840,6 @@ def _import_one_helper( |
824 | 840 | output_dir = f'{relative_import_dir}/{import_name}' |
825 | 841 | version = self.config.import_version_override if self.config.import_version_override else _clean_time( |
826 | 842 | utils.pacific_time()) |
827 | | - # Used for imports using CDA feed tranfers with a date placeholder in the GCS path, |
828 | | - # thus, we can determine the path using the current date (instead of a variable timestamp). |
829 | | - if version == 'DATE_VERSION_PLACEHOLDER': |
830 | | - version = datetime.datetime.now(datetime.UTC).strftime("%Y-%m-%d") |
831 | 843 | import_summary.latest_version = 'gs://' + os.path.join( |
832 | 844 | self.config.storage_prod_bucket_name, output_dir, version) |
833 | 845 | import_summary.graph_path = self.config.graph_data_path |
|
0 commit comments