Warning

This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.workflow.reports.generators

"""Module containing Galaxy workflow report generator plugins.
"""

from abc import (
    ABCMeta,
    abstractmethod,
)

from galaxy.managers import workflows
from galaxy.managers.markdown_util import (
    internal_galaxy_markdown_to_pdf,
    ready_galaxy_markdown_for_export,
    resolve_invocation_markdown,
)
from galaxy.model import WorkflowInvocation
from galaxy.schema import PdfDocumentType


[docs]class WorkflowReportGeneratorPlugin(metaclass=ABCMeta): """ """ @property @abstractmethod def plugin_type(self): """Short string labelling this plugin."""
[docs] @abstractmethod def generate_report_json(self, trans, invocation, runtime_report_config_json=None): """ """
[docs] @abstractmethod def generate_report_pdf(self, trans, invocation, runtime_report_config_json=None): """ """
[docs]class WorkflowMarkdownGeneratorPlugin(WorkflowReportGeneratorPlugin, metaclass=ABCMeta): """WorkflowReportGeneratorPlugin that generates markdown as base report."""
[docs] def generate_report_json(self, trans, invocation: WorkflowInvocation, runtime_report_config_json=None): """ """ workflow_manager = workflows.WorkflowsManager(trans.app) workflow_encoded_id = trans.app.security.encode_id(invocation.workflow_id) workflow = workflow_manager.get_stored_accessible_workflow(trans, workflow_encoded_id, by_stored_id=False) internal_markdown = self._generate_internal_markdown( trans, invocation, runtime_report_config_json=runtime_report_config_json ) export_markdown, extra_rendering_data = ready_galaxy_markdown_for_export(trans, internal_markdown) # Invocations can only be run on history, and user must exist, so this should always work username = invocation.history and invocation.history.user and invocation.history.user.username rval = { "render_format": "markdown", # Presumably the frontend could render things other ways. "markdown": export_markdown, "invocation_markdown": export_markdown, "model_class": "Report", "id": trans.app.security.encode_id(invocation.workflow_id), "username": username, "title": workflow.name, } rval.update(extra_rendering_data) return rval
[docs] def generate_report_pdf(self, trans, invocation, runtime_report_config_json=None): internal_markdown = self._generate_internal_markdown( trans, invocation, runtime_report_config_json=runtime_report_config_json ) return internal_galaxy_markdown_to_pdf(trans, internal_markdown, PdfDocumentType.invocation_report)
@abstractmethod def _generate_report_markdown(self, trans, invocation, runtime_report_config_json=None): """ """ def _generate_internal_markdown(self, trans, invocation, runtime_report_config_json=None): workflow_markdown = self._generate_report_markdown( trans, invocation, runtime_report_config_json=runtime_report_config_json ) internal_markdown = resolve_invocation_markdown(trans, invocation, workflow_markdown) return internal_markdown