예제 #1
0
    def _collect_rendered_document_content_sections(
        self,
        validation_results: ExpectationSuiteValidationResult,
        overview_content_blocks: List[RenderedComponentContent],
        collapse_content_blocks: List[RenderedTableContent],
        columns: Dict[str, list],
    ) -> List[RenderedSectionContent]:
        ordered_columns = Renderer._get_column_list_from_evrs(
            validation_results)
        sections = [
            RenderedSectionContent(
                **{
                    "section_name": "Overview",
                    "content_blocks": overview_content_blocks,
                })
        ]

        if "Table-Level Expectations" in columns:
            sections += [
                self._column_section_renderer.render(
                    validation_results=columns["Table-Level Expectations"],
                    evaluation_parameters=validation_results.
                    evaluation_parameters,
                )
            ]

        sections += [
            self._column_section_renderer.render(
                validation_results=columns[column],
                evaluation_parameters=validation_results.evaluation_parameters,
            ) for column in ordered_columns
        ]
        if self.run_info_at_end:
            sections += [
                RenderedSectionContent(
                    **{
                        "section_name": "Run Info",
                        "content_blocks": collapse_content_blocks,
                    })
            ]

        return sections
예제 #2
0
    def render(self, validation_results):
        run_id = validation_results.meta["run_id"]
        if isinstance(run_id, str):
            try:
                run_time = parse(run_id).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
            except (ValueError, TypeError):
                run_time = "__none__"
            run_name = run_id
        elif isinstance(run_id, dict):
            run_name = run_id.get("run_name") or "__none__"
            run_time = run_id.get("run_time") or "__none__"
        elif isinstance(run_id, RunIdentifier):
            run_name = run_id.run_name or "__none__"
            run_time = run_id.run_time.strftime("%Y-%m-%dT%H:%M:%S.%fZ")

        expectation_suite_name = validation_results.meta[
            "expectation_suite_name"]
        batch_kwargs = validation_results.meta.get(
            "batch_kwargs", {}) or validation_results.meta.get(
                "batch_spec", {})

        # add datasource key to batch_kwargs if missing
        if "datasource" not in batch_kwargs and "datasource" not in batch_kwargs:
            # check if expectation_suite_name follows datasource.batch_kwargs_generator.data_asset_name.suite_name pattern
            if len(expectation_suite_name.split(".")) == 4:
                if "batch_kwargs" in validation_results.meta:
                    batch_kwargs["datasource"] = expectation_suite_name.split(
                        ".")[0]
                else:
                    batch_kwargs["datasource"] = expectation_suite_name.split(
                        ".")[0]

        # Group EVRs by column
        # TODO: When we implement a ValidationResultSuite class, this method will move there.
        columns = self._group_evrs_by_column(validation_results)

        ordered_columns = Renderer._get_column_list_from_evrs(
            validation_results)
        column_types = self._overview_section_renderer._get_column_types(
            validation_results)

        data_asset_name = batch_kwargs.get("data_asset_name")
        # Determine whether we have a custom run_name
        try:
            run_name_as_time = parse(run_name)
        except ValueError:
            run_name_as_time = None
        try:
            run_time_datetime = parse(run_time)
        except ValueError:
            run_time_datetime = None

        include_run_name: bool = False
        if run_name_as_time != run_time_datetime and run_name_as_time != "__none__":
            include_run_name = True

        page_title = f"Profiling Results / {str(expectation_suite_name)}"
        if data_asset_name:
            page_title += f" / {str(data_asset_name)}"
        if include_run_name:
            page_title += f" / {str(run_name)}"
        page_title += f" / {str(run_time)}"

        return RenderedDocumentContent(
            **{
                "renderer_type":
                "ProfilingResultsPageRenderer",
                "page_title":
                page_title,
                "expectation_suite_name":
                expectation_suite_name,
                "utm_medium":
                "profiling-results-page",
                "batch_kwargs":
                batch_kwargs if "batch_kwargs" in
                validation_results.meta else None,
                "batch_spec":
                batch_kwargs if "batch_spec" in
                validation_results.meta else None,
                "sections": [
                    self._overview_section_renderer.render(
                        validation_results, section_name="Overview")
                ] + [
                    self._column_section_renderer.render(
                        columns[column],
                        section_name=column,
                        column_type=column_types.get(column),
                    ) for column in ordered_columns
                ],
            })