Skip to content
This repository was archived by the owner on Jan 14, 2025. It is now read-only.

Commit b50f24b

Browse files
committed
fix xes import
1 parent 1e8ed76 commit b50f24b

File tree

1 file changed

+11
-28
lines changed

1 file changed

+11
-28
lines changed

backend/app.py

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from flask_cors import CORS
44

55
import pm4py
6+
from pm4py.objects.log.importer.xes import importer as xes_importer
67
from enum import Enum
78

89
import subprocess #to execute the layout-generator jar file
@@ -11,50 +12,39 @@ class Parameters:
1112
EVENT_LOG_DISCOVERY = None
1213
EVENT_LOG_CONFORMANCE = None
1314
BPMN_MODEL = None
14-
PROCESS_TREE = None
1515
PETRI_NET = None
1616
IM = None
1717
FM = None
1818

1919
app = Flask(__name__)
2020
CORS(app)
2121

22-
@app.route("/")
23-
def hello():
24-
return "Hello, from Flask!"
2522

2623
@app.route('/discover/inductive-miner', methods=["POST"])
2724
def discover_inductive_miner():
2825
#read xes log
2926
log_stream = request.files.getlist('file')[0].read()
3027
noise = request.form.get('noise')
3128

32-
#serialize log, so that we can process it with pm4py
33-
serialized_log = ('event_log', log_stream)
34-
3529
#create pm4py event log object
36-
Parameters.EVENT_LOG_DISCOVERY = pm4py.deserialize(serialized_log)
30+
Parameters.EVENT_LOG_DISCOVERY = xes_importer.deserialize(log_stream)
3731

3832
#discover petri net
3933
Parameters.PETRI_NET, Parameters.IM, Parameters.FM = pm4py.discover_petri_net_inductive(Parameters.EVENT_LOG_DISCOVERY, noise_threshold=float(noise))
4034

4135
#convert petri net to bpmn
4236
Parameters.BPMN_MODEL = pm4py.convert_to_bpmn(Parameters.PETRI_NET, Parameters.IM, Parameters.FM)
43-
44-
#generate the bpmn xml content from the bpmn graph model
45-
#bpmn-file is a tuple: first element is BPMN, second element is the XML content
46-
#bpmn_file = pm4py.utils.serialize(Parameters.BPMN_MODEL)
4737

4838
#generate the layout using layout-generators
4939
'''
50-
TO BE FIXED
40+
TO BE IMPROVED in future iterations
5141
'''
5242
#layout-generators takes a bpmn file, so save the bpmn-file first
5343
pm4py.write_bpmn(Parameters.BPMN_MODEL, 'result.bpmn')
54-
5544
#generate layout
5645
subprocess.call(['java', '-jar', 'bpmn-layout-generator-0.1.4-jar-with-dependencies.jar', '--output=./result-with-layout.bpmn', 'result.bpmn'])
57-
#get result and send it to frontend
46+
47+
#get result and send it
5848
file = open('result-with-layout.bpmn', 'r')
5949
bpmn_xml_content = file.read()
6050

@@ -66,14 +56,12 @@ def compute_alignment():
6656
#read xes log
6757
log_stream = request.files.getlist('file')[0].read()
6858

69-
#serialize log, so that we can process it with pm4py
70-
serialized_log = ('event_log', log_stream)
71-
7259
#create pm4py event log object
73-
Parameters.EVENT_LOG_CONFORMANCE = pm4py.deserialize(serialized_log)
60+
Parameters.EVENT_LOG_CONFORMANCE = xes_importer.deserialize(log_stream)
61+
62+
#alignment can be only on done on Petri nets
7463
if Parameters.PETRI_NET is not None:
7564
aligned_traces = pm4py.conformance_diagnostics_alignments(Parameters.EVENT_LOG_CONFORMANCE, Parameters.PETRI_NET, Parameters.IM, Parameters.FM)
76-
#print(aligned_traces)
7765
return flask.jsonify(aligned_traces)
7866
else:
7967
return flask.Response(response = "BPMN diagram is missing. \n Discover a model and then apply conformance checking", status=404, mimetype='text/xml')
@@ -82,14 +70,10 @@ def compute_alignment():
8270
def xes_to_csv():
8371
log_stream = request.files.getlist('file')[0].read()
8472

85-
#serialize log, so that we can process it with pm4py
86-
serialized_log = ('event_log', log_stream)
87-
8873
#create pm4py event log object
89-
Parameters.EVENT_LOG_DISCOVERY = pm4py.deserialize(serialized_log)
90-
log_df = pm4py.convert_to_dataframe(Parameters.EVENT_LOG_DISCOVERY)
91-
return flask.jsonify(log_df.to_html())
92-
74+
Parameters.EVENT_LOG_DISCOVERY = xes_importer.deserialize(log_stream)
75+
log_dataframe = pm4py.convert_to_dataframe(Parameters.EVENT_LOG_DISCOVERY)
76+
return flask.jsonify(log_dataframe.to_html())
9377

9478

9579
@app.route('/stats/frequency', methods=["GET"])
@@ -99,6 +83,5 @@ def compute_activity_frequency():
9983
return flask.jsonify(activity_freq_df.to_dict())
10084

10185

102-
10386
if __name__ == "__main__":
10487
app.run("localhost", 6969)

0 commit comments

Comments
 (0)