mirror of
https://github.com/sartography/spiffworkflow-backend.git
synced 2025-02-23 12:58:13 +00:00
added basis of api to create process models from text w/ burnettk
This commit is contained in:
parent
244c6178ae
commit
afd6bcbc35
@ -327,6 +327,32 @@ paths:
|
|||||||
schema:
|
schema:
|
||||||
$ref: "#/components/schemas/ProcessModel"
|
$ref: "#/components/schemas/ProcessModel"
|
||||||
|
|
||||||
|
/process-models-natural-language/{modified_process_group_id}:
|
||||||
|
parameters:
|
||||||
|
- name: modified_process_group_id
|
||||||
|
in: path
|
||||||
|
required: true
|
||||||
|
description: modified id of an existing process group
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
post:
|
||||||
|
operationId: spiffworkflow_backend.routes.process_models_controller.process_model_create_with_natural_language
|
||||||
|
summary: Creates a new process model with the given parameters.
|
||||||
|
tags:
|
||||||
|
- Process Models
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: "#/components/schemas/ProcessModel"
|
||||||
|
responses:
|
||||||
|
"201":
|
||||||
|
description: Process model created successfully.
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: "#/components/schemas/ProcessModel"
|
||||||
|
|
||||||
/process-models/{modified_process_model_identifier}/files:
|
/process-models/{modified_process_model_identifier}/files:
|
||||||
parameters:
|
parameters:
|
||||||
- name: modified_process_model_identifier
|
- name: modified_process_model_identifier
|
||||||
|
@ -1,5 +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 re
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
@ -299,10 +300,66 @@ def process_model_file_show(
|
|||||||
file_contents = SpecFileService.get_data(process_model, file.name)
|
file_contents = SpecFileService.get_data(process_model, file.name)
|
||||||
file.file_contents = file_contents
|
file.file_contents = file_contents
|
||||||
file.process_model_id = process_model.id
|
file.process_model_id = process_model.id
|
||||||
# file.process_group_id = process_model.process_group_id
|
|
||||||
return FileSchema().dump(file)
|
return FileSchema().dump(file)
|
||||||
|
|
||||||
|
|
||||||
|
# {
|
||||||
|
# "natural_language_text": "Create a bug tracker process model with a bug-details form that collects summary, description, and priority"
|
||||||
|
# }
|
||||||
|
def process_model_create_with_natural_language(
|
||||||
|
modified_process_group_id: str, body: Dict[str, Union[str, bool, int]]
|
||||||
|
) -> flask.wrappers.Response:
|
||||||
|
# body_include_list = [
|
||||||
|
# "id",
|
||||||
|
# "display_name",
|
||||||
|
# "primary_file_name",
|
||||||
|
# "primary_process_id",
|
||||||
|
# "description",
|
||||||
|
# "metadata_extraction_paths",
|
||||||
|
# ]
|
||||||
|
# body_filtered = {
|
||||||
|
# include_item: body[include_item]
|
||||||
|
# for include_item in body_include_list
|
||||||
|
# if include_item in body
|
||||||
|
# }
|
||||||
|
|
||||||
|
pattern = re.compile(r"Create a (?P<pm_name>.*?) process model with a (?P<form_name>.*?) form that collects (?P<columns_hey>.*)")
|
||||||
|
match = pattern.match(body["natural_language_text"])
|
||||||
|
process_model_display_name = match.group('pm_name')
|
||||||
|
process_model_identifier = re.sub(r"[ _]", '-', process_model_display_name)
|
||||||
|
process_model_identifier = re.sub(r"-{2,}", '-', process_model_identifier).lower()
|
||||||
|
print(f"process_model_identifier: {process_model_identifier}")
|
||||||
|
|
||||||
|
form_name = match.group('form_name')
|
||||||
|
form_identifier = re.sub(r"[ _]", '-', form_name)
|
||||||
|
form_identifier = re.sub(r"-{2,}", '-', form_identifier).lower()
|
||||||
|
print(f"form_identifier: {form_identifier}")
|
||||||
|
|
||||||
|
column_names = match.group('columns_hey')
|
||||||
|
print(f"column_names: {column_names}")
|
||||||
|
columns = re.sub(r"(, (and )?)", ',', column_names).split(',')
|
||||||
|
print(f"columns: {columns}")
|
||||||
|
#
|
||||||
|
# if modified_process_group_id is None:
|
||||||
|
# raise ApiError(
|
||||||
|
# error_code="process_group_id_not_specified",
|
||||||
|
# message="Process Model could not be created when process_group_id path param is unspecified",
|
||||||
|
# status_code=400,
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# unmodified_process_group_id = _un_modify_modified_process_model_id(
|
||||||
|
# modified_process_group_id
|
||||||
|
# )
|
||||||
|
# process_group = ProcessModelService.get_process_group(unmodified_process_group_id)
|
||||||
|
# if process_group is None:
|
||||||
|
# raise ApiError(
|
||||||
|
# error_code="process_model_could_not_be_created",
|
||||||
|
# message=f"Process Model could not be created from given body because Process Group could not be found: {body}",
|
||||||
|
# status_code=400,
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def _get_file_from_request() -> Any:
|
def _get_file_from_request() -> Any:
|
||||||
"""Get_file_from_request."""
|
"""Get_file_from_request."""
|
||||||
request_file = connexion.request.files.get("file")
|
request_file = connexion.request.files.get("file")
|
||||||
|
@ -163,6 +163,37 @@ class TestProcessApi(BaseTest):
|
|||||||
assert process_model.primary_file_name == bpmn_file_name
|
assert process_model.primary_file_name == bpmn_file_name
|
||||||
assert process_model.primary_process_id == "sample"
|
assert process_model.primary_process_id == "sample"
|
||||||
|
|
||||||
|
def test_process_model_create_with_natural_language(
|
||||||
|
self,
|
||||||
|
app: Flask,
|
||||||
|
client: FlaskClient,
|
||||||
|
with_db_and_bpmn_file_cleanup: None,
|
||||||
|
with_super_admin_user: UserModel,
|
||||||
|
) -> None:
|
||||||
|
process_group_id = "test_process_group"
|
||||||
|
process_group_description = "Test Process Group"
|
||||||
|
process_model_id = "sample"
|
||||||
|
process_model_identifier = f"{process_group_id}/{process_model_id}"
|
||||||
|
self.create_process_group(
|
||||||
|
client, with_super_admin_user, process_group_id, process_group_description
|
||||||
|
)
|
||||||
|
|
||||||
|
body = {
|
||||||
|
"natural_language_text": "Create a Bug Tracker process model with a Bug Details form that collects summary, description, and priority"
|
||||||
|
}
|
||||||
|
self.create_process_model_with_api(
|
||||||
|
client,
|
||||||
|
process_model_id=process_model_identifier,
|
||||||
|
user=with_super_admin_user,
|
||||||
|
)
|
||||||
|
response = client.post(
|
||||||
|
f"/v1.0/process-models-natural-language/{process_group_id}",
|
||||||
|
content_type="application/json",
|
||||||
|
data=json.dumps(body),
|
||||||
|
headers=self.logged_in_headers(with_super_admin_user),
|
||||||
|
)
|
||||||
|
assert response.status_code == 201
|
||||||
|
|
||||||
def test_primary_process_id_updates_via_xml(
|
def test_primary_process_id_updates_via_xml(
|
||||||
self,
|
self,
|
||||||
app: Flask,
|
app: Flask,
|
||||||
@ -250,9 +281,6 @@ class TestProcessApi(BaseTest):
|
|||||||
assert response.json is not None
|
assert response.json is not None
|
||||||
assert response.json["ok"] is True
|
assert response.json["ok"] is True
|
||||||
|
|
||||||
# assert we no longer have a model
|
|
||||||
with pytest.raises(ProcessEntityNotFoundError):
|
|
||||||
ProcessModelService.get_process_model(process_model_identifier)
|
|
||||||
|
|
||||||
def test_process_model_delete_with_instances(
|
def test_process_model_delete_with_instances(
|
||||||
self,
|
self,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user