Skip to content

Repository files navigation

BPMN PY

Overview

This library allows you to work with BPMN Diagrams in Python for Automated Planning applications. My code is an expansion of this project by Jasper Nie.

Setup

pip install git+https://github.com/QuMuLab/bpmn-py.git

Usage

The following is a basic overview of the library, a more in-depth documentation can be found here: https://bpmn-py.readthedocs.io/ or by running bpmn-py-docs in your terminal.

Demo

1. Automatically create bpmn in python from xml file then export to pddl or xml

frombpmn_pyimportDiagram, BPMNExporter, BPMNParser, XMLCreatordiagram_name="order_pizza"file_path=f"examples/{diagram_name}.bpmn"parser=BPMNParser(file_path)
diagram=parser.parse()
exporter=BPMNExporter(diagram)
exporter.create_pddl()
exporter=XMLCreator(diagram)
exporter.create_xml()

2. "Manually" create bpmn in python then export to xml or pddl

frombpmn_pyimportDiagram, BPMNExporter, BPMNParser, XMLCreatorfrombpmn_pyimportuserTask, startEvent, endEvent, parallelGateway, exclusiveGateway, inclusiveGatewaydiagram=Diagram("Dispatch of Goods")
pool=diagram.add_pool("Computer Hardware Shop")
logistics=pool.add_swimlane("Logistics")
secretary=pool.add_swimlane("Secretary")
warehouse=pool.add_swimlane("Warehouse")
insure_parcel=logistics.add_task("Insure Parcel", userTask)
ship_goods=secretary.add_event("Ship Goods", startEvent)
parallel_split=secretary.add_gateway(None, parallelGateway)
clarify=secretary.add_task("Clarify shipment method", userTask)
special_sandling_split=secretary.add_gateway("Special sandling?", exclusiveGateway)
if_insurance_split=secretary.add_gateway("If insurance necessary", inclusiveGateway)
write_label=secretary.add_task("Write package label", userTask)
if_insurance_join=secretary.add_gateway(None, inclusiveGateway)
get_offers=secretary.add_task("Get 3 offers from logistic companies", userTask)
select_company=secretary.add_task("Select logistic company and place order", userTask)
special_sandling_join=secretary.add_gateway(None, exclusiveGateway)
package_goods=warehouse.add_task("Package Goods", userTask)
parallel_join=warehouse.add_gateway(None, parallelGateway)
prepare=warehouse.add_task("Prepare for picking up goods", userTask)
shipment_prepared=warehouse.add_event("Shipment prepared", endEvent)
diagram.add_sequence_flow(if_insurance_split, insure_parcel)
diagram.add_sequence_flow(insure_parcel, if_insurance_join)
diagram.add_sequence_flow(ship_goods, parallel_split)
diagram.add_sequence_flow(parallel_split, clarify)
diagram.add_sequence_flow(clarify, special_sandling_split)
diagram.add_sequence_flow(special_sandling_split, if_insurance_split)
diagram.add_sequence_flow(if_insurance_split, write_label)
diagram.add_sequence_flow(write_label, if_insurance_join)
diagram.add_sequence_flow(if_insurance_join, special_sandling_join)
diagram.add_sequence_flow(special_sandling_split, get_offers)
diagram.add_sequence_flow(get_offers, select_company)
diagram.add_sequence_flow(select_company, special_sandling_join)
diagram.add_sequence_flow(special_sandling_join, parallel_join)
diagram.add_sequence_flow(parallel_split, package_goods)
diagram.add_sequence_flow(package_goods, parallel_join)
diagram.add_sequence_flow(parallel_join, prepare)
diagram.add_sequence_flow(prepare, shipment_prepared)
exporter=BPMNExporter(diagram)
exporter.create_pddl()
exporter=XMLCreator(diagram)
exporter.create_xml()

3. Automatically create bpmn in python from xml file then manually edit it before exporting to pddl or xml

frombpmn_pyimportDiagram, BPMNExporter, BPMNParser, XMLCreatorfrombpmn_pyimportuserTask, startEvent, endEvent, parallelGateway, exclusiveGateway, inclusiveGatewaydiagram_name="order_pizza"file_path=f"examples/{diagram_name}.bpmn"parser=BPMNParser(file_path)
diagram=parser.parse()
complain=diagram.add_task("Complain again to Delivery Service", userTask)
forflowindiagram.seq_flows:
ifflow.startRef.label=="Cancel Order"andflow.endRef.label=="Order Cancelled":
order_cancelled=flow.endRefflow.endRef=complaindiagram.add_sequence_flow(complain, order_cancelled)
breakexporter=BPMNExporter(diagram)
exporter.create_pddl()
exporter=XMLCreator(diagram)
exporter.create_xml()

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages