| | from typing import Dict, Any |
| |
|
| | import jinja2 |
| |
|
| | from flows.data_transformations.abstract import DataTransformation |
| | from flows.utils.general_helpers import unflatten_dict |
| |
|
| |
|
| | class TestingResultsSummaryGeneration(DataTransformation): |
| | def __init__(self, output_key, **kwargs): |
| | super().__init__(output_key) |
| | self.params = kwargs |
| |
|
| | def __call__(self, data_dict: Dict[str, Any], **kwargs) -> Dict[str, Any]: |
| | if data_dict["all_tests_passed"]: |
| | |
| | data_dict[self.output_key] = self.params["no_error_template"] |
| | return data_dict |
| |
|
| | test_data = unflatten_dict(data_dict)["raw_response"] |
| |
|
| | if not test_data["compilation_status"]: |
| | |
| | kwargs = { |
| | "error_message": test_data["compilation_error_message"].strip(), |
| | } |
| |
|
| | message_content = ( |
| | jinja2.Environment(loader=jinja2.BaseLoader()) |
| | .from_string(self.params["compilation_error_template"]) |
| | .render(**kwargs) |
| | ) |
| | elif test_data["timeout_error"]: |
| | |
| |
|
| | message_content = self.params["timeout_error_template"] |
| | else: |
| | |
| |
|
| | |
| | failed_tests = [ |
| | test_result |
| | for test_result in test_data["public_tests_results"] |
| | if not test_result["status"] |
| | ] |
| |
|
| | runtime_error_test = None |
| | for test_result in failed_tests: |
| | if test_result["generated_output"] is None: |
| | |
| | runtime_error_test = test_result |
| |
|
| | if runtime_error_test: |
| | |
| | kwargs = { |
| | "test_input": runtime_error_test["input"], |
| | "error_message": runtime_error_test["error_message"].strip(), |
| | } |
| |
|
| | message_content = ( |
| | jinja2.Environment(loader=jinja2.BaseLoader()) |
| | .from_string(self.params["runtime_error_template"]) |
| | .render(**kwargs) |
| | ) |
| | else: |
| | |
| |
|
| | if self.params["single_test_error_message"]: |
| | |
| | first_failed_test = failed_tests[0] |
| |
|
| | kwargs = { |
| | "test_input": first_failed_test["input"], |
| | "expected_output": first_failed_test["expected_output"], |
| | "generated_output": first_failed_test["generated_output"], |
| | } |
| |
|
| | message_content = ( |
| | jinja2.Environment(loader=jinja2.BaseLoader()) |
| | .from_string(self.params["single_test_error_template"]) |
| | .render(**kwargs) |
| | ) |
| | else: |
| | |
| | parts = [self.params["all_tests_header"]] |
| |
|
| | for idx, test_result in enumerate(failed_tests): |
| | kwargs = { |
| | "idx": idx + 1, |
| | "test_input": test_result["input"], |
| | "expected_output": test_result["expected_output"], |
| | "generated_output": test_result["generated_output"], |
| | } |
| |
|
| | parts.append( |
| | jinja2.Environment(loader=jinja2.BaseLoader()) |
| | .from_string(self.params["test_error_template"]) |
| | .render(**kwargs) |
| | ) |
| |
|
| | message_content = self.params["tests_separator"].join(parts) |
| | data_dict[self.output_key] = message_content |
| | return data_dict |
| |
|