attempt to message models when saving the bpmn primary file

This commit is contained in:
jasquat 2022-08-03 17:30:37 -04:00
parent 2bf14a0514
commit a470087bfe
2 changed files with 23 additions and 5 deletions

View File

@ -1,8 +1,8 @@
"""empty message """empty message
Revision ID: 4c0b0529db9e Revision ID: e156e4216918
Revises: Revises:
Create Date: 2022-08-03 14:50:21.850381 Create Date: 2022-08-03 17:30:11.770763
""" """
from alembic import op from alembic import op
@ -10,7 +10,7 @@ import sqlalchemy as sa
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = '4c0b0529db9e' revision = 'e156e4216918'
down_revision = None down_revision = None
branch_labels = None branch_labels = None
depends_on = None depends_on = None

View File

@ -4,9 +4,9 @@ import shutil
from datetime import datetime from datetime import datetime
from typing import List from typing import List
from typing import Optional from typing import Optional
from typing import Union
from flask_bpmn.api.api_error import ApiError from flask_bpmn.api.api_error import ApiError
from flask_bpmn.models.db import db
from lxml import etree # type: ignore from lxml import etree # type: ignore
from lxml.etree import _Element # type: ignore from lxml.etree import _Element # type: ignore
from lxml.etree import Element as EtreeElement from lxml.etree import Element as EtreeElement
@ -14,6 +14,7 @@ from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException #
from spiffworkflow_backend.models.file import File from spiffworkflow_backend.models.file import File
from spiffworkflow_backend.models.file import FileType from spiffworkflow_backend.models.file import FileType
from spiffworkflow_backend.models.message_model import MessageModel
from spiffworkflow_backend.models.process_model import ProcessModelInfo from spiffworkflow_backend.models.process_model import ProcessModelInfo
from spiffworkflow_backend.services.file_system_service import FileSystemService from spiffworkflow_backend.services.file_system_service import FileSystemService
@ -72,6 +73,7 @@ class SpecFileService(FileSystemService):
): ):
# If no primary process exists, make this pirmary process. # If no primary process exists, make this pirmary process.
SpecFileService.set_primary_bpmn(workflow_spec, file_name, binary_data) SpecFileService.set_primary_bpmn(workflow_spec, file_name, binary_data)
return file return file
@staticmethod @staticmethod
@ -133,7 +135,7 @@ class SpecFileService(FileSystemService):
def set_primary_bpmn( def set_primary_bpmn(
workflow_spec: ProcessModelInfo, workflow_spec: ProcessModelInfo,
file_name: str, file_name: str,
binary_data: Union[bytes, None] = None, binary_data: Optional[bytes] = None,
) -> None: ) -> None:
"""Set_primary_bpmn.""" """Set_primary_bpmn."""
# If this is a BPMN, extract the process id, and determine if it is contains swim lanes. # If this is a BPMN, extract the process id, and determine if it is contains swim lanes.
@ -147,6 +149,7 @@ class SpecFileService(FileSystemService):
workflow_spec.primary_process_id = SpecFileService.get_process_id(bpmn) workflow_spec.primary_process_id = SpecFileService.get_process_id(bpmn)
workflow_spec.primary_file_name = file_name workflow_spec.primary_file_name = file_name
workflow_spec.is_review = SpecFileService.has_swimlane(bpmn) workflow_spec.is_review = SpecFileService.has_swimlane(bpmn)
SpecFileService.check_for_message_models(bpmn)
except etree.XMLSyntaxError as xse: except etree.XMLSyntaxError as xse:
raise ApiError( raise ApiError(
@ -214,3 +217,18 @@ class SpecFileService(FileSystemService):
) )
return str(process_elements[0].attrib["id"]) return str(process_elements[0].attrib["id"])
@staticmethod
def check_for_message_models(et_root: _Element) -> None:
"""Check_for_message_models."""
for child in et_root:
if child.tag == "message":
message_name = child.attrib.get("name")
if message_name is None:
raise ValidationException("Message name is missing from bpmn xml")
message_model = MessageModel.query.filter_by(name=message_name)
if message_model is None:
message_model = MessageModel(name=message_name)
db.session.add(message_model)
db.session.commit()