Source code for pm4py.visualization.bpmn.variants.dagrejs

'''
    PM4Py – A Process Mining Library for Python
Copyright (C) 2024 Process Intelligence Solutions UG (haftungsbeschränkt)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see this software project's root or
visit <https://www.gnu.org/licenses/>.

Website: https://processintelligence.solutions
Contact: info@processintelligence.solutions
'''
from typing import Optional, Dict, Any
from pm4py.objects.bpmn.obj import BPMN
from pm4py.util import exec_utils, constants, vis_utils
from enum import Enum
from copy import copy
import shutil
import tempfile
import importlib.resources


[docs] class Parameters(Enum): ENCODING = "encoding" IFRAME_WIDTH = "iframe_width" IFRAME_HEIGHT = "iframe_height" LOCAL_JUPYTER_FILE_NAME = "local_jupyter_file_name"
[docs] def get_html_file_contents(): with importlib.resources.path( "pm4py.visualization.bpmn.util", "dagrejs_base.html" ) as p: with open(str(p), "r") as html_file: return html_file.read()
[docs] def apply( bpmn_graph: BPMN, parameters: Optional[Dict[Any, Any]] = None ) -> str: """ Visualizes a BPMN graph by rendering it inside a HTML/Javascript file Parameters -------------- bpmn_graph BPMN graph parameters Parameters of the algorithm, including: - Parameters.ENCODING => the encoding of the HTML to be used Returns --------------- tmp_file_path Path to the HTML file """ if parameters is None: parameters = {} encoding = exec_utils.get_param_value( Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING ) from pm4py.objects.bpmn.exporter.variants import etree as bpmn_xml_exporter export_parameters = copy(parameters) xml_stri = bpmn_xml_exporter.get_xml_string( bpmn_graph, parameters=export_parameters ) xml_stri = ( xml_stri.decode(encoding) .replace("\t", "") .replace("\r", "") .replace("\n", "") ) F = tempfile.NamedTemporaryFile(suffix=".html") F.close() F = open(F.name, "w", encoding=encoding) F.write(get_html_file_contents().replace("REPLACE", xml_stri)) F.close() return F.name
[docs] def view(temp_file_name, parameters=None): """ View the SNA visualization on the screen Parameters ------------- temp_file_name Temporary file name parameters Possible parameters of the algorithm """ if parameters is None: parameters = {} if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: iframe_width = exec_utils.get_param_value( Parameters.IFRAME_WIDTH, parameters, 900 ) iframe_height = exec_utils.get_param_value( Parameters.IFRAME_HEIGHT, parameters, 600 ) local_jupyter_file_name = exec_utils.get_param_value( Parameters.LOCAL_JUPYTER_FILE_NAME, parameters, "jupyter_bpmn_vis.html", ) if vis_utils.check_visualization_inside_jupyter(): from IPython.display import IFrame shutil.copyfile(temp_file_name, local_jupyter_file_name) iframe = IFrame( local_jupyter_file_name, width=iframe_width, height=iframe_height, ) from IPython.display import display return display(iframe) else: vis_utils.open_opsystem_image_viewer(temp_file_name)
[docs] def save(temp_file_name, dest_file, parameters=None): """ Save the SNA visualization from a temporary file to a well-defined destination file Parameters ------------- temp_file_name Temporary file name dest_file Destination file parameters Possible parameters of the algorithm """ if parameters is None: parameters = {} shutil.copyfile(temp_file_name, dest_file)