pyl w/ burnettk
This commit is contained in:
parent
2c4ae424a4
commit
59842a301c
|
@ -1,7 +1,6 @@
|
||||||
"""APIs for dealing with process groups, process models, and process instances."""
|
"""APIs for dealing with process groups, process models, and process instances."""
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from spiffworkflow_backend.models.process_instance_report import ProcessInstanceReportModel
|
|
||||||
import re
|
import re
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
@ -19,6 +18,9 @@ from flask_bpmn.api.api_error import ApiError
|
||||||
|
|
||||||
from spiffworkflow_backend.models.file import FileSchema
|
from spiffworkflow_backend.models.file import FileSchema
|
||||||
from spiffworkflow_backend.models.process_group import ProcessGroup
|
from spiffworkflow_backend.models.process_group import ProcessGroup
|
||||||
|
from spiffworkflow_backend.models.process_instance_report import (
|
||||||
|
ProcessInstanceReportModel,
|
||||||
|
)
|
||||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||||
from spiffworkflow_backend.models.process_model import ProcessModelInfoSchema
|
from spiffworkflow_backend.models.process_model import ProcessModelInfoSchema
|
||||||
from spiffworkflow_backend.routes.process_api_blueprint import _commit_and_push_to_git
|
from spiffworkflow_backend.routes.process_api_blueprint import _commit_and_push_to_git
|
||||||
|
@ -28,7 +30,9 @@ from spiffworkflow_backend.routes.process_api_blueprint import (
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.git_service import GitService
|
from spiffworkflow_backend.services.git_service import GitService
|
||||||
from spiffworkflow_backend.services.git_service import MissingGitConfigsError
|
from spiffworkflow_backend.services.git_service import MissingGitConfigsError
|
||||||
from spiffworkflow_backend.services.process_instance_report_service import ProcessInstanceReportService
|
from spiffworkflow_backend.services.process_instance_report_service import (
|
||||||
|
ProcessInstanceReportService,
|
||||||
|
)
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
from spiffworkflow_backend.services.spec_file_service import SpecFileService
|
from spiffworkflow_backend.services.spec_file_service import SpecFileService
|
||||||
|
|
||||||
|
@ -356,27 +360,30 @@ def process_model_create_with_natural_language(
|
||||||
status_code=400,
|
status_code=400,
|
||||||
)
|
)
|
||||||
|
|
||||||
bpmn_template_file = os.path.join(current_app.root_path, 'templates', 'basic_with_user_task_template.bpmn')
|
bpmn_template_file = os.path.join(
|
||||||
|
current_app.root_path, "templates", "basic_with_user_task_template.bpmn"
|
||||||
|
)
|
||||||
if not os.path.exists(bpmn_template_file):
|
if not os.path.exists(bpmn_template_file):
|
||||||
raise ApiError(
|
raise ApiError(
|
||||||
error_code="bpmn_template_file_does_not_exist",
|
error_code="bpmn_template_file_does_not_exist",
|
||||||
message=f"Could not find the bpmn template file to create process model.",
|
message="Could not find the bpmn template file to create process model.",
|
||||||
status_code=500,
|
status_code=500,
|
||||||
)
|
)
|
||||||
|
|
||||||
ProcessModelService.add_process_model(process_model_info)
|
ProcessModelService.add_process_model(process_model_info)
|
||||||
bpmn_process_identifier = f"{process_model_identifier}_process"
|
bpmn_process_identifier = f"{process_model_identifier}_process"
|
||||||
bpmn_template_contents = ''
|
bpmn_template_contents = ""
|
||||||
with open(bpmn_template_file, encoding="utf-8") as f:
|
with open(bpmn_template_file, encoding="utf-8") as f:
|
||||||
bpmn_template_contents = f.read()
|
bpmn_template_contents = f.read()
|
||||||
|
|
||||||
bpmn_template_contents = bpmn_template_contents.replace(
|
bpmn_template_contents = bpmn_template_contents.replace(
|
||||||
'natural_language_process_id_template', bpmn_process_identifier)
|
"natural_language_process_id_template", bpmn_process_identifier
|
||||||
bpmn_template_contents = bpmn_template_contents.replace('form-identifier-id-template', form_identifier)
|
)
|
||||||
|
bpmn_template_contents = bpmn_template_contents.replace(
|
||||||
|
"form-identifier-id-template", form_identifier
|
||||||
|
)
|
||||||
|
|
||||||
form_uischema_json: dict = {
|
form_uischema_json: dict = {"ui:order": columns}
|
||||||
"ui:order": columns
|
|
||||||
}
|
|
||||||
|
|
||||||
form_properties: dict = {}
|
form_properties: dict = {}
|
||||||
for column in columns:
|
for column in columns:
|
||||||
|
@ -388,25 +395,37 @@ def process_model_create_with_natural_language(
|
||||||
"title": form_identifier,
|
"title": form_identifier,
|
||||||
"description": "",
|
"description": "",
|
||||||
"properties": form_properties,
|
"properties": form_properties,
|
||||||
"required": []
|
"required": [],
|
||||||
}
|
}
|
||||||
|
|
||||||
SpecFileService.add_file(process_model_info, f"{process_model_identifier}.bpmn", str.encode(bpmn_template_contents))
|
|
||||||
SpecFileService.add_file(process_model_info, f"{form_identifier}-schema.json",
|
|
||||||
str.encode(json.dumps(form_schema_json)))
|
|
||||||
SpecFileService.add_file(
|
SpecFileService.add_file(
|
||||||
process_model_info, f"{form_identifier}-uischema.json", str.encode(json.dumps(form_uischema_json)))
|
process_model_info,
|
||||||
|
f"{process_model_identifier}.bpmn",
|
||||||
|
str.encode(bpmn_template_contents),
|
||||||
|
)
|
||||||
|
SpecFileService.add_file(
|
||||||
|
process_model_info,
|
||||||
|
f"{form_identifier}-schema.json",
|
||||||
|
str.encode(json.dumps(form_schema_json)),
|
||||||
|
)
|
||||||
|
SpecFileService.add_file(
|
||||||
|
process_model_info,
|
||||||
|
f"{form_identifier}-uischema.json",
|
||||||
|
str.encode(json.dumps(form_uischema_json)),
|
||||||
|
)
|
||||||
|
|
||||||
_commit_and_push_to_git(
|
_commit_and_push_to_git(
|
||||||
f"User: {g.user.username} created process model via natural language:"
|
f"User: {g.user.username} created process model via natural language:"
|
||||||
f" {process_model_info.id}"
|
f" {process_model_info.id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
default_report_metadata = ProcessInstanceReportService.system_metadata_map('default')
|
default_report_metadata = ProcessInstanceReportService.system_metadata_map(
|
||||||
|
"default"
|
||||||
|
)
|
||||||
for column in columns:
|
for column in columns:
|
||||||
default_report_metadata['columns'].append({
|
default_report_metadata["columns"].append(
|
||||||
"Header": column, "accessor": column, "filterable": True
|
{"Header": column, "accessor": column, "filterable": True}
|
||||||
})
|
)
|
||||||
ProcessInstanceReportModel.create_report(
|
ProcessInstanceReportModel.create_report(
|
||||||
identifier=process_model_identifier,
|
identifier=process_model_identifier,
|
||||||
user=g.user,
|
user=g.user,
|
||||||
|
|
|
@ -42,7 +42,7 @@ class FileSystemService:
|
||||||
"""Root_path."""
|
"""Root_path."""
|
||||||
dir_name = current_app.config["BPMN_SPEC_ABSOLUTE_DIR"]
|
dir_name = current_app.config["BPMN_SPEC_ABSOLUTE_DIR"]
|
||||||
# ensure this is a string - thanks mypy...
|
# ensure this is a string - thanks mypy...
|
||||||
return os.path.abspath(os.path.join(dir_name, ''))
|
return os.path.abspath(os.path.join(dir_name, ""))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def id_string_to_relative_path(id_string: str) -> str:
|
def id_string_to_relative_path(id_string: str) -> str:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"""Process_instance_report_service."""
|
"""Process_instance_report_service."""
|
||||||
import re
|
import re
|
||||||
from typing import Any
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from typing import Any
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
|
|
|
@ -3,4 +3,4 @@
|
||||||
"description": "",
|
"description": "",
|
||||||
"properties": {},
|
"properties": {},
|
||||||
"required": []
|
"required": []
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
"ui:order": []
|
"ui:order": []
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,24 +205,39 @@ class TestProcessApi(BaseTest):
|
||||||
{"key": "priority", "path": "priority"},
|
{"key": "priority", "path": "priority"},
|
||||||
]
|
]
|
||||||
|
|
||||||
process_model = ProcessModelService.get_process_model(response.json['id'])
|
process_model = ProcessModelService.get_process_model(response.json["id"])
|
||||||
process_model_path = os.path.join(
|
process_model_path = os.path.join(
|
||||||
FileSystemService.root_path(),
|
FileSystemService.root_path(),
|
||||||
FileSystemService.id_string_to_relative_path(process_model.id)
|
FileSystemService.id_string_to_relative_path(process_model.id),
|
||||||
)
|
)
|
||||||
|
|
||||||
process_model_diagram = os.path.join(process_model_path, "bug-tracker.bpmn")
|
process_model_diagram = os.path.join(process_model_path, "bug-tracker.bpmn")
|
||||||
assert os.path.exists(process_model_diagram)
|
assert os.path.exists(process_model_diagram)
|
||||||
form_schema_json = os.path.join(process_model_path, "bug-details-schema.json")
|
form_schema_json = os.path.join(process_model_path, "bug-details-schema.json")
|
||||||
assert os.path.exists(form_schema_json)
|
assert os.path.exists(form_schema_json)
|
||||||
form_uischema_json = os.path.join(process_model_path, "bug-details-uischema.json")
|
form_uischema_json = os.path.join(
|
||||||
|
process_model_path, "bug-details-uischema.json"
|
||||||
|
)
|
||||||
assert os.path.exists(form_uischema_json)
|
assert os.path.exists(form_uischema_json)
|
||||||
|
|
||||||
process_instance_report = ProcessInstanceReportModel.query.filter_by(identifier='bug-tracker').first()
|
process_instance_report = ProcessInstanceReportModel.query.filter_by(
|
||||||
|
identifier="bug-tracker"
|
||||||
|
).first()
|
||||||
assert process_instance_report is not None
|
assert process_instance_report is not None
|
||||||
report_column_accessors = [i['accessor'] for i in process_instance_report.report_metadata['columns']]
|
report_column_accessors = [
|
||||||
expected_column_accessors = ['id', 'process_model_display_name', 'start_in_seconds',
|
i["accessor"] for i in process_instance_report.report_metadata["columns"]
|
||||||
'end_in_seconds', 'username', 'status', 'summary', 'description', 'priority']
|
]
|
||||||
|
expected_column_accessors = [
|
||||||
|
"id",
|
||||||
|
"process_model_display_name",
|
||||||
|
"start_in_seconds",
|
||||||
|
"end_in_seconds",
|
||||||
|
"username",
|
||||||
|
"status",
|
||||||
|
"summary",
|
||||||
|
"description",
|
||||||
|
"priority",
|
||||||
|
]
|
||||||
assert report_column_accessors == expected_column_accessors
|
assert report_column_accessors == expected_column_accessors
|
||||||
|
|
||||||
def test_primary_process_id_updates_via_xml(
|
def test_primary_process_id_updates_via_xml(
|
||||||
|
|
Loading…
Reference in New Issue