Merge branch 'main' of github.com:sartography/spiff-arena into main
This commit is contained in:
commit
add6ca7bbf
|
@ -1155,7 +1155,7 @@ python-versions = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyupgrade"
|
name = "pyupgrade"
|
||||||
version = "3.2.0"
|
version = "3.2.2"
|
||||||
description = "A tool to automatically upgrade syntax for newer versions."
|
description = "A tool to automatically upgrade syntax for newer versions."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
|
@ -1767,7 +1767,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>=
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.7"
|
python-versions = "^3.7"
|
||||||
content-hash = "a92b31afb86b91dba0101ae04a6e4cbc5b7bed657f422d53f417fac969e7552f"
|
content-hash = "59fd1a96fd43ad04e57500a4a2f9c2a8b09279872f0277736d52a827634977a6"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
alabaster = [
|
alabaster = [
|
||||||
|
@ -2132,6 +2132,7 @@ greenlet = [
|
||||||
{file = "greenlet-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5b0ff9878333823226d270417f24f4d06f235cb3e54d1103b71ea537a6a86ce"},
|
{file = "greenlet-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5b0ff9878333823226d270417f24f4d06f235cb3e54d1103b71ea537a6a86ce"},
|
||||||
{file = "greenlet-2.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be9e0fb2ada7e5124f5282d6381903183ecc73ea019568d6d63d33f25b2a9000"},
|
{file = "greenlet-2.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be9e0fb2ada7e5124f5282d6381903183ecc73ea019568d6d63d33f25b2a9000"},
|
||||||
{file = "greenlet-2.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b493db84d124805865adc587532ebad30efa68f79ad68f11b336e0a51ec86c2"},
|
{file = "greenlet-2.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b493db84d124805865adc587532ebad30efa68f79ad68f11b336e0a51ec86c2"},
|
||||||
|
{file = "greenlet-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0459d94f73265744fee4c2d5ec44c6f34aa8a31017e6e9de770f7bcf29710be9"},
|
||||||
{file = "greenlet-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a20d33124935d27b80e6fdacbd34205732660e0a1d35d8b10b3328179a2b51a1"},
|
{file = "greenlet-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a20d33124935d27b80e6fdacbd34205732660e0a1d35d8b10b3328179a2b51a1"},
|
||||||
{file = "greenlet-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:ea688d11707d30e212e0110a1aac7f7f3f542a259235d396f88be68b649e47d1"},
|
{file = "greenlet-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:ea688d11707d30e212e0110a1aac7f7f3f542a259235d396f88be68b649e47d1"},
|
||||||
{file = "greenlet-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:afe07421c969e259e9403c3bb658968702bc3b78ec0b6fde3ae1e73440529c23"},
|
{file = "greenlet-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:afe07421c969e259e9403c3bb658968702bc3b78ec0b6fde3ae1e73440529c23"},
|
||||||
|
@ -2140,6 +2141,7 @@ greenlet = [
|
||||||
{file = "greenlet-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:659f167f419a4609bc0516fb18ea69ed39dbb25594934bd2dd4d0401660e8a1e"},
|
{file = "greenlet-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:659f167f419a4609bc0516fb18ea69ed39dbb25594934bd2dd4d0401660e8a1e"},
|
||||||
{file = "greenlet-2.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:356e4519d4dfa766d50ecc498544b44c0249b6de66426041d7f8b751de4d6b48"},
|
{file = "greenlet-2.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:356e4519d4dfa766d50ecc498544b44c0249b6de66426041d7f8b751de4d6b48"},
|
||||||
{file = "greenlet-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:811e1d37d60b47cb8126e0a929b58c046251f28117cb16fcd371eed61f66b764"},
|
{file = "greenlet-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:811e1d37d60b47cb8126e0a929b58c046251f28117cb16fcd371eed61f66b764"},
|
||||||
|
{file = "greenlet-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d38ffd0e81ba8ef347d2be0772e899c289b59ff150ebbbbe05dc61b1246eb4e0"},
|
||||||
{file = "greenlet-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0109af1138afbfb8ae647e31a2b1ab030f58b21dd8528c27beaeb0093b7938a9"},
|
{file = "greenlet-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0109af1138afbfb8ae647e31a2b1ab030f58b21dd8528c27beaeb0093b7938a9"},
|
||||||
{file = "greenlet-2.0.1-cp38-cp38-win32.whl", hash = "sha256:88c8d517e78acdf7df8a2134a3c4b964415b575d2840a2746ddb1cc6175f8608"},
|
{file = "greenlet-2.0.1-cp38-cp38-win32.whl", hash = "sha256:88c8d517e78acdf7df8a2134a3c4b964415b575d2840a2746ddb1cc6175f8608"},
|
||||||
{file = "greenlet-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d6ee1aa7ab36475035eb48c01efae87d37936a8173fc4d7b10bb02c2d75dd8f6"},
|
{file = "greenlet-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d6ee1aa7ab36475035eb48c01efae87d37936a8173fc4d7b10bb02c2d75dd8f6"},
|
||||||
|
@ -2148,6 +2150,7 @@ greenlet = [
|
||||||
{file = "greenlet-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:505138d4fa69462447a562a7c2ef723c6025ba12ac04478bc1ce2fcc279a2db5"},
|
{file = "greenlet-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:505138d4fa69462447a562a7c2ef723c6025ba12ac04478bc1ce2fcc279a2db5"},
|
||||||
{file = "greenlet-2.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cce1e90dd302f45716a7715517c6aa0468af0bf38e814ad4eab58e88fc09f7f7"},
|
{file = "greenlet-2.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cce1e90dd302f45716a7715517c6aa0468af0bf38e814ad4eab58e88fc09f7f7"},
|
||||||
{file = "greenlet-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e9744c657d896c7b580455e739899e492a4a452e2dd4d2b3e459f6b244a638d"},
|
{file = "greenlet-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e9744c657d896c7b580455e739899e492a4a452e2dd4d2b3e459f6b244a638d"},
|
||||||
|
{file = "greenlet-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:662e8f7cad915ba75d8017b3e601afc01ef20deeeabf281bd00369de196d7726"},
|
||||||
{file = "greenlet-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:41b825d65f31e394b523c84db84f9383a2f7eefc13d987f308f4663794d2687e"},
|
{file = "greenlet-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:41b825d65f31e394b523c84db84f9383a2f7eefc13d987f308f4663794d2687e"},
|
||||||
{file = "greenlet-2.0.1-cp39-cp39-win32.whl", hash = "sha256:db38f80540083ea33bdab614a9d28bcec4b54daa5aff1668d7827a9fc769ae0a"},
|
{file = "greenlet-2.0.1-cp39-cp39-win32.whl", hash = "sha256:db38f80540083ea33bdab614a9d28bcec4b54daa5aff1668d7827a9fc769ae0a"},
|
||||||
{file = "greenlet-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b23d2a46d53210b498e5b701a1913697671988f4bf8e10f935433f6e7c332fb6"},
|
{file = "greenlet-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b23d2a46d53210b498e5b701a1913697671988f4bf8e10f935433f6e7c332fb6"},
|
||||||
|
@ -2500,8 +2503,8 @@ pytz = [
|
||||||
{file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"},
|
{file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"},
|
||||||
]
|
]
|
||||||
pyupgrade = [
|
pyupgrade = [
|
||||||
{file = "pyupgrade-3.2.0-py2.py3-none-any.whl", hash = "sha256:2aa6c40e49ea5a350e6e45b8c7847b1741aef274a35d4f0b2bf91731ec8ab796"},
|
{file = "pyupgrade-3.2.2-py2.py3-none-any.whl", hash = "sha256:16c0e3a6ac2d83cd0fd30c138af5504918c59d584344f60a15d5f8009b11a0ed"},
|
||||||
{file = "pyupgrade-3.2.0.tar.gz", hash = "sha256:70e1ac1e6b34a90fb21f5cada1907ef035b12dfc1d9f13cefd367acf3b530310"},
|
{file = "pyupgrade-3.2.2.tar.gz", hash = "sha256:6bfa246fb9d94e490fad37980bcfc05b9494183ff29d9100ef4f7f22a952ce67"},
|
||||||
]
|
]
|
||||||
pyyaml = [
|
pyyaml = [
|
||||||
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
|
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
|
||||||
|
|
|
@ -62,7 +62,7 @@ reorder-python-imports = "^3.9.0"
|
||||||
pre-commit-hooks = "^4.3.0"
|
pre-commit-hooks = "^4.3.0"
|
||||||
sphinx-click = "^4.3.0"
|
sphinx-click = "^4.3.0"
|
||||||
Pygments = "^2.13.0"
|
Pygments = "^2.13.0"
|
||||||
pyupgrade = "^3.2.0"
|
pyupgrade = "^3.2.2"
|
||||||
furo = ">=2021.11.12"
|
furo = ">=2021.11.12"
|
||||||
MonkeyType = "^22.2.0"
|
MonkeyType = "^22.2.0"
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
import csv
|
import csv
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
|
|
||||||
from spiffworkflow_backend import get_hacked_up_app_for_script
|
from spiffworkflow_backend import get_hacked_up_app_for_script
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from apscheduler.schedulers.background import BlockingScheduler # type: ignore
|
from apscheduler.schedulers.background import BlockingScheduler # type: ignore
|
||||||
|
|
||||||
from spiffworkflow_backend import create_app
|
from spiffworkflow_backend import create_app
|
||||||
from spiffworkflow_backend import start_scheduler
|
from spiffworkflow_backend import start_scheduler
|
||||||
from spiffworkflow_backend.helpers.db_helper import try_to_connect
|
from spiffworkflow_backend.helpers.db_helper import try_to_connect
|
||||||
|
|
|
@ -7,8 +7,6 @@ from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.active_task_user import ActiveTaskUserModel
|
from spiffworkflow_backend.models.active_task_user import ActiveTaskUserModel
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
@ -19,6 +17,7 @@ from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
# from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
# from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
@ -77,7 +76,7 @@ def setup_process_instances_for_reports(
|
||||||
process_model_id = "sample"
|
process_model_id = "sample"
|
||||||
# bpmn_file_name = "sample.bpmn"
|
# bpmn_file_name = "sample.bpmn"
|
||||||
bpmn_file_location = "sample"
|
bpmn_file_location = "sample"
|
||||||
process_model_identifier = BaseTest().basic_test_setup(
|
process_model_identifier = BaseTest().create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import logging
|
import logging
|
||||||
from logging.config import fileConfig
|
from logging.config import fileConfig
|
||||||
|
|
||||||
from flask import current_app
|
|
||||||
|
|
||||||
from alembic import context
|
from alembic import context
|
||||||
|
from flask import current_app
|
||||||
|
|
||||||
# this is the Alembic Config object, which provides
|
# this is the Alembic Config object, which provides
|
||||||
# access to the values within the .ini file in use.
|
# access to the values within the .ini file in use.
|
||||||
|
@ -12,17 +11,17 @@ config = context.config
|
||||||
# Interpret the config file for Python logging.
|
# Interpret the config file for Python logging.
|
||||||
# This line sets up loggers basically.
|
# This line sets up loggers basically.
|
||||||
fileConfig(config.config_file_name)
|
fileConfig(config.config_file_name)
|
||||||
logger = logging.getLogger('alembic.env')
|
logger = logging.getLogger("alembic.env")
|
||||||
|
|
||||||
# add your model's MetaData object here
|
# add your model's MetaData object here
|
||||||
# for 'autogenerate' support
|
# for 'autogenerate' support
|
||||||
# from myapp import mymodel
|
# from myapp import mymodel
|
||||||
# target_metadata = mymodel.Base.metadata
|
# target_metadata = mymodel.Base.metadata
|
||||||
config.set_main_option(
|
config.set_main_option(
|
||||||
'sqlalchemy.url',
|
"sqlalchemy.url",
|
||||||
str(current_app.extensions['migrate'].db.get_engine().url).replace(
|
str(current_app.extensions["migrate"].db.get_engine().url).replace("%", "%%"),
|
||||||
'%', '%%'))
|
)
|
||||||
target_metadata = current_app.extensions['migrate'].db.metadata
|
target_metadata = current_app.extensions["migrate"].db.metadata
|
||||||
|
|
||||||
# other values from the config, defined by the needs of env.py,
|
# other values from the config, defined by the needs of env.py,
|
||||||
# can be acquired:
|
# can be acquired:
|
||||||
|
@ -43,9 +42,7 @@ def run_migrations_offline():
|
||||||
|
|
||||||
"""
|
"""
|
||||||
url = config.get_main_option("sqlalchemy.url")
|
url = config.get_main_option("sqlalchemy.url")
|
||||||
context.configure(
|
context.configure(url=url, target_metadata=target_metadata, literal_binds=True)
|
||||||
url=url, target_metadata=target_metadata, literal_binds=True
|
|
||||||
)
|
|
||||||
|
|
||||||
with context.begin_transaction():
|
with context.begin_transaction():
|
||||||
context.run_migrations()
|
context.run_migrations()
|
||||||
|
@ -63,20 +60,20 @@ def run_migrations_online():
|
||||||
# when there are no changes to the schema
|
# when there are no changes to the schema
|
||||||
# reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html
|
# reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html
|
||||||
def process_revision_directives(context, revision, directives):
|
def process_revision_directives(context, revision, directives):
|
||||||
if getattr(config.cmd_opts, 'autogenerate', False):
|
if getattr(config.cmd_opts, "autogenerate", False):
|
||||||
script = directives[0]
|
script = directives[0]
|
||||||
if script.upgrade_ops.is_empty():
|
if script.upgrade_ops.is_empty():
|
||||||
directives[:] = []
|
directives[:] = []
|
||||||
logger.info('No changes in schema detected.')
|
logger.info("No changes in schema detected.")
|
||||||
|
|
||||||
connectable = current_app.extensions['migrate'].db.get_engine()
|
connectable = current_app.extensions["migrate"].db.get_engine()
|
||||||
|
|
||||||
with connectable.connect() as connection:
|
with connectable.connect() as connection:
|
||||||
context.configure(
|
context.configure(
|
||||||
connection=connection,
|
connection=connection,
|
||||||
target_metadata=target_metadata,
|
target_metadata=target_metadata,
|
||||||
process_revision_directives=process_revision_directives,
|
process_revision_directives=process_revision_directives,
|
||||||
**current_app.extensions['migrate'].configure_args
|
**current_app.extensions["migrate"].configure_args
|
||||||
)
|
)
|
||||||
|
|
||||||
with context.begin_transaction():
|
with context.begin_transaction():
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
"""empty message
|
"""empty message
|
||||||
|
|
||||||
Revision ID: fd00c59e1f60
|
Revision ID: fd00c59e1f60
|
||||||
Revises:
|
Revises:
|
||||||
Create Date: 2022-11-09 14:04:14.169379
|
Create Date: 2022-11-09 14:04:14.169379
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision = 'fd00c59e1f60'
|
revision = "fd00c59e1f60"
|
||||||
down_revision = None
|
down_revision = None
|
||||||
branch_labels = None
|
branch_labels = None
|
||||||
depends_on = None
|
depends_on = None
|
||||||
|
@ -18,291 +18,532 @@ depends_on = None
|
||||||
|
|
||||||
def upgrade():
|
def upgrade():
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
op.create_table('bpmn_process_id_lookup',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"bpmn_process_id_lookup",
|
||||||
sa.Column('bpmn_process_identifier', sa.String(length=255), nullable=True),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('bpmn_file_relative_path', sa.String(length=255), nullable=True),
|
sa.Column("bpmn_process_identifier", sa.String(length=255), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id')
|
sa.Column("bpmn_file_relative_path", sa.String(length=255), nullable=True),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_bpmn_process_id_lookup_bpmn_process_identifier'), 'bpmn_process_id_lookup', ['bpmn_process_identifier'], unique=True)
|
op.create_index(
|
||||||
op.create_table('group',
|
op.f("ix_bpmn_process_id_lookup_bpmn_process_identifier"),
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"bpmn_process_id_lookup",
|
||||||
sa.Column('name', sa.String(length=255), nullable=True),
|
["bpmn_process_identifier"],
|
||||||
sa.Column('identifier', sa.String(length=255), nullable=True),
|
unique=True,
|
||||||
sa.PrimaryKeyConstraint('id')
|
|
||||||
)
|
)
|
||||||
op.create_table('message_model',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"group",
|
||||||
sa.Column('identifier', sa.String(length=50), nullable=True),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('name', sa.String(length=50), nullable=True),
|
sa.Column("name", sa.String(length=255), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id')
|
sa.Column("identifier", sa.String(length=255), nullable=True),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_message_model_identifier'), 'message_model', ['identifier'], unique=True)
|
op.create_table(
|
||||||
op.create_index(op.f('ix_message_model_name'), 'message_model', ['name'], unique=True)
|
"message_model",
|
||||||
op.create_table('permission_target',
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
sa.Column("identifier", sa.String(length=50), nullable=True),
|
||||||
sa.Column('uri', sa.String(length=255), nullable=False),
|
sa.Column("name", sa.String(length=50), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
sa.UniqueConstraint('uri')
|
|
||||||
)
|
)
|
||||||
op.create_table('spiff_logging',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_message_model_identifier"),
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
"message_model",
|
||||||
sa.Column('bpmn_process_identifier', sa.String(length=255), nullable=False),
|
["identifier"],
|
||||||
sa.Column('bpmn_task_identifier', sa.String(length=255), nullable=False),
|
unique=True,
|
||||||
sa.Column('bpmn_task_name', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('bpmn_task_type', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('spiff_task_guid', sa.String(length=50), nullable=False),
|
|
||||||
sa.Column('timestamp', sa.DECIMAL(precision=17, scale=6), nullable=False),
|
|
||||||
sa.Column('message', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('current_user_id', sa.Integer(), nullable=True),
|
|
||||||
sa.Column('spiff_step', sa.Integer(), nullable=False),
|
|
||||||
sa.PrimaryKeyConstraint('id')
|
|
||||||
)
|
)
|
||||||
op.create_table('spiff_step_details',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_message_model_name"), "message_model", ["name"], unique=True
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
|
||||||
sa.Column('spiff_step', sa.Integer(), nullable=False),
|
|
||||||
sa.Column('task_json', sa.JSON(), nullable=False),
|
|
||||||
sa.Column('timestamp', sa.DECIMAL(precision=17, scale=6), nullable=False),
|
|
||||||
sa.Column('completed_by_user_id', sa.Integer(), nullable=True),
|
|
||||||
sa.PrimaryKeyConstraint('id')
|
|
||||||
)
|
)
|
||||||
op.create_table('user',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"permission_target",
|
||||||
sa.Column('username', sa.String(length=255), nullable=False),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('uid', sa.String(length=50), nullable=True),
|
sa.Column("uri", sa.String(length=255), nullable=False),
|
||||||
sa.Column('service', sa.String(length=50), nullable=False),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
sa.Column('service_id', sa.String(length=255), nullable=False),
|
sa.UniqueConstraint("uri"),
|
||||||
sa.Column('name', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('email', sa.String(length=255), nullable=True),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('service', 'service_id', name='service_key'),
|
|
||||||
sa.UniqueConstraint('uid'),
|
|
||||||
sa.UniqueConstraint('username')
|
|
||||||
)
|
)
|
||||||
op.create_table('message_correlation_property',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"spiff_logging",
|
||||||
sa.Column('identifier', sa.String(length=50), nullable=True),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('message_model_id', sa.Integer(), nullable=False),
|
sa.Column("process_instance_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("bpmn_process_identifier", sa.String(length=255), nullable=False),
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("bpmn_task_identifier", sa.String(length=255), nullable=False),
|
||||||
sa.ForeignKeyConstraint(['message_model_id'], ['message_model.id'], ),
|
sa.Column("bpmn_task_name", sa.String(length=255), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.Column("bpmn_task_type", sa.String(length=255), nullable=True),
|
||||||
sa.UniqueConstraint('identifier', 'message_model_id', name='message_correlation_property_unique')
|
sa.Column("spiff_task_guid", sa.String(length=50), nullable=False),
|
||||||
|
sa.Column("timestamp", sa.DECIMAL(precision=17, scale=6), nullable=False),
|
||||||
|
sa.Column("message", sa.String(length=255), nullable=True),
|
||||||
|
sa.Column("current_user_id", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("spiff_step", sa.Integer(), nullable=False),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_message_correlation_property_identifier'), 'message_correlation_property', ['identifier'], unique=False)
|
op.create_table(
|
||||||
op.create_table('message_triggerable_process_model',
|
"spiff_step_details",
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('message_model_id', sa.Integer(), nullable=False),
|
sa.Column("process_instance_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('process_model_identifier', sa.String(length=50), nullable=False),
|
sa.Column("spiff_step", sa.Integer(), nullable=False),
|
||||||
sa.Column('process_group_identifier', sa.String(length=50), nullable=False),
|
sa.Column("task_json", sa.JSON(), nullable=False),
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("timestamp", sa.DECIMAL(precision=17, scale=6), nullable=False),
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("completed_by_user_id", sa.Integer(), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['message_model_id'], ['message_model.id'], ),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('message_model_id')
|
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_message_triggerable_process_model_process_group_identifier'), 'message_triggerable_process_model', ['process_group_identifier'], unique=False)
|
op.create_table(
|
||||||
op.create_index(op.f('ix_message_triggerable_process_model_process_model_identifier'), 'message_triggerable_process_model', ['process_model_identifier'], unique=False)
|
"user",
|
||||||
op.create_table('principal',
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
sa.Column("username", sa.String(length=255), nullable=False),
|
||||||
sa.Column('user_id', sa.Integer(), nullable=True),
|
sa.Column("uid", sa.String(length=50), nullable=True),
|
||||||
sa.Column('group_id', sa.Integer(), nullable=True),
|
sa.Column("service", sa.String(length=50), nullable=False),
|
||||||
sa.CheckConstraint('NOT(user_id IS NULL AND group_id IS NULL)'),
|
sa.Column("service_id", sa.String(length=255), nullable=False),
|
||||||
sa.ForeignKeyConstraint(['group_id'], ['group.id'], ),
|
sa.Column("name", sa.String(length=255), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
sa.Column("email", sa.String(length=255), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
sa.UniqueConstraint('group_id'),
|
sa.UniqueConstraint("service", "service_id", name="service_key"),
|
||||||
sa.UniqueConstraint('user_id')
|
sa.UniqueConstraint("uid"),
|
||||||
|
sa.UniqueConstraint("username"),
|
||||||
)
|
)
|
||||||
op.create_table('process_instance',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"message_correlation_property",
|
||||||
sa.Column('process_model_identifier', sa.String(length=255), nullable=False),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('process_group_identifier', sa.String(length=50), nullable=False),
|
sa.Column("identifier", sa.String(length=50), nullable=True),
|
||||||
sa.Column('process_initiator_id', sa.Integer(), nullable=False),
|
sa.Column("message_model_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('bpmn_json', sa.JSON(), nullable=True),
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.Column('start_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.Column('end_in_seconds', sa.Integer(), nullable=True),
|
sa.ForeignKeyConstraint(
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
["message_model_id"],
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
["message_model.id"],
|
||||||
sa.Column('status', sa.String(length=50), nullable=True),
|
),
|
||||||
sa.Column('bpmn_version_control_type', sa.String(length=50), nullable=True),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
sa.Column('bpmn_version_control_identifier', sa.String(length=255), nullable=True),
|
sa.UniqueConstraint(
|
||||||
sa.Column('spiff_step', sa.Integer(), nullable=True),
|
"identifier", "message_model_id", name="message_correlation_property_unique"
|
||||||
sa.ForeignKeyConstraint(['process_initiator_id'], ['user.id'], ),
|
),
|
||||||
sa.PrimaryKeyConstraint('id')
|
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_process_instance_process_group_identifier'), 'process_instance', ['process_group_identifier'], unique=False)
|
op.create_index(
|
||||||
op.create_index(op.f('ix_process_instance_process_model_identifier'), 'process_instance', ['process_model_identifier'], unique=False)
|
op.f("ix_message_correlation_property_identifier"),
|
||||||
op.create_table('process_instance_report',
|
"message_correlation_property",
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
["identifier"],
|
||||||
sa.Column('identifier', sa.String(length=50), nullable=False),
|
unique=False,
|
||||||
sa.Column('report_metadata', sa.JSON(), nullable=True),
|
|
||||||
sa.Column('created_by_id', sa.Integer(), nullable=False),
|
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(['created_by_id'], ['user.id'], ),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('created_by_id', 'identifier', name='process_instance_report_unique')
|
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_process_instance_report_created_by_id'), 'process_instance_report', ['created_by_id'], unique=False)
|
op.create_table(
|
||||||
op.create_index(op.f('ix_process_instance_report_identifier'), 'process_instance_report', ['identifier'], unique=False)
|
"message_triggerable_process_model",
|
||||||
op.create_table('refresh_token',
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
sa.Column("message_model_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('user_id', sa.Integer(), nullable=False),
|
sa.Column("process_model_identifier", sa.String(length=50), nullable=False),
|
||||||
sa.Column('token', sa.String(length=1024), nullable=False),
|
sa.Column("process_group_identifier", sa.String(length=50), nullable=False),
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.UniqueConstraint('user_id')
|
sa.ForeignKeyConstraint(
|
||||||
|
["message_model_id"],
|
||||||
|
["message_model.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint("message_model_id"),
|
||||||
)
|
)
|
||||||
op.create_table('secret',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_message_triggerable_process_model_process_group_identifier"),
|
||||||
sa.Column('key', sa.String(length=50), nullable=False),
|
"message_triggerable_process_model",
|
||||||
sa.Column('value', sa.Text(), nullable=False),
|
["process_group_identifier"],
|
||||||
sa.Column('user_id', sa.Integer(), nullable=False),
|
unique=False,
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('key')
|
|
||||||
)
|
)
|
||||||
op.create_table('user_group_assignment',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_message_triggerable_process_model_process_model_identifier"),
|
||||||
sa.Column('user_id', sa.Integer(), nullable=False),
|
"message_triggerable_process_model",
|
||||||
sa.Column('group_id', sa.Integer(), nullable=False),
|
["process_model_identifier"],
|
||||||
sa.ForeignKeyConstraint(['group_id'], ['group.id'], ),
|
unique=False,
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('user_id', 'group_id', name='user_group_assignment_unique')
|
|
||||||
)
|
)
|
||||||
op.create_table('active_task',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"principal",
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('actual_owner_id', sa.Integer(), nullable=True),
|
sa.Column("user_id", sa.Integer(), nullable=True),
|
||||||
sa.Column('lane_assignment_id', sa.Integer(), nullable=True),
|
sa.Column("group_id", sa.Integer(), nullable=True),
|
||||||
sa.Column('form_file_name', sa.String(length=50), nullable=True),
|
sa.CheckConstraint("NOT(user_id IS NULL AND group_id IS NULL)"),
|
||||||
sa.Column('ui_form_file_name', sa.String(length=50), nullable=True),
|
sa.ForeignKeyConstraint(
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
["group_id"],
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
["group.id"],
|
||||||
sa.Column('task_id', sa.String(length=50), nullable=True),
|
),
|
||||||
sa.Column('task_name', sa.String(length=50), nullable=True),
|
sa.ForeignKeyConstraint(
|
||||||
sa.Column('task_title', sa.String(length=50), nullable=True),
|
["user_id"],
|
||||||
sa.Column('task_type', sa.String(length=50), nullable=True),
|
["user.id"],
|
||||||
sa.Column('task_status', sa.String(length=50), nullable=True),
|
),
|
||||||
sa.Column('process_model_display_name', sa.String(length=255), nullable=True),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
sa.ForeignKeyConstraint(['actual_owner_id'], ['user.id'], ),
|
sa.UniqueConstraint("group_id"),
|
||||||
sa.ForeignKeyConstraint(['lane_assignment_id'], ['group.id'], ),
|
sa.UniqueConstraint("user_id"),
|
||||||
sa.ForeignKeyConstraint(['process_instance_id'], ['process_instance.id'], ),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('task_id', 'process_instance_id', name='active_task_unique')
|
|
||||||
)
|
)
|
||||||
op.create_table('message_correlation',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"process_instance",
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('message_correlation_property_id', sa.Integer(), nullable=False),
|
sa.Column("process_model_identifier", sa.String(length=255), nullable=False),
|
||||||
sa.Column('name', sa.String(length=255), nullable=False),
|
sa.Column("process_group_identifier", sa.String(length=50), nullable=False),
|
||||||
sa.Column('value', sa.String(length=255), nullable=False),
|
sa.Column("process_initiator_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("bpmn_json", sa.JSON(), nullable=True),
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("start_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['message_correlation_property_id'], ['message_correlation_property.id'], ),
|
sa.Column("end_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['process_instance_id'], ['process_instance.id'], ),
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.UniqueConstraint('process_instance_id', 'message_correlation_property_id', 'name', name='message_instance_id_name_unique')
|
sa.Column("status", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column("bpmn_version_control_type", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column(
|
||||||
|
"bpmn_version_control_identifier", sa.String(length=255), nullable=True
|
||||||
|
),
|
||||||
|
sa.Column("spiff_step", sa.Integer(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["process_initiator_id"],
|
||||||
|
["user.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_message_correlation_message_correlation_property_id'), 'message_correlation', ['message_correlation_property_id'], unique=False)
|
op.create_index(
|
||||||
op.create_index(op.f('ix_message_correlation_name'), 'message_correlation', ['name'], unique=False)
|
op.f("ix_process_instance_process_group_identifier"),
|
||||||
op.create_index(op.f('ix_message_correlation_process_instance_id'), 'message_correlation', ['process_instance_id'], unique=False)
|
"process_instance",
|
||||||
op.create_index(op.f('ix_message_correlation_value'), 'message_correlation', ['value'], unique=False)
|
["process_group_identifier"],
|
||||||
op.create_table('message_instance',
|
unique=False,
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
|
||||||
sa.Column('message_model_id', sa.Integer(), nullable=False),
|
|
||||||
sa.Column('message_type', sa.String(length=20), nullable=False),
|
|
||||||
sa.Column('payload', sa.JSON(), nullable=True),
|
|
||||||
sa.Column('status', sa.String(length=20), nullable=False),
|
|
||||||
sa.Column('failure_cause', sa.Text(), nullable=True),
|
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(['message_model_id'], ['message_model.id'], ),
|
|
||||||
sa.ForeignKeyConstraint(['process_instance_id'], ['process_instance.id'], ),
|
|
||||||
sa.PrimaryKeyConstraint('id')
|
|
||||||
)
|
)
|
||||||
op.create_table('permission_assignment',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_process_instance_process_model_identifier"),
|
||||||
sa.Column('principal_id', sa.Integer(), nullable=False),
|
"process_instance",
|
||||||
sa.Column('permission_target_id', sa.Integer(), nullable=False),
|
["process_model_identifier"],
|
||||||
sa.Column('grant_type', sa.String(length=50), nullable=False),
|
unique=False,
|
||||||
sa.Column('permission', sa.String(length=50), nullable=False),
|
|
||||||
sa.ForeignKeyConstraint(['permission_target_id'], ['permission_target.id'], ),
|
|
||||||
sa.ForeignKeyConstraint(['principal_id'], ['principal.id'], ),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('principal_id', 'permission_target_id', 'permission', name='permission_assignment_uniq')
|
|
||||||
)
|
)
|
||||||
op.create_table('active_task_user',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"process_instance_report",
|
||||||
sa.Column('active_task_id', sa.Integer(), nullable=False),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('user_id', sa.Integer(), nullable=False),
|
sa.Column("identifier", sa.String(length=50), nullable=False),
|
||||||
sa.ForeignKeyConstraint(['active_task_id'], ['active_task.id'], ),
|
sa.Column("report_metadata", sa.JSON(), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
sa.Column("created_by_id", sa.Integer(), nullable=False),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.UniqueConstraint('active_task_id', 'user_id', name='active_task_user_unique')
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["created_by_id"],
|
||||||
|
["user.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint(
|
||||||
|
"created_by_id", "identifier", name="process_instance_report_unique"
|
||||||
|
),
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_active_task_user_active_task_id'), 'active_task_user', ['active_task_id'], unique=False)
|
op.create_index(
|
||||||
op.create_index(op.f('ix_active_task_user_user_id'), 'active_task_user', ['user_id'], unique=False)
|
op.f("ix_process_instance_report_created_by_id"),
|
||||||
op.create_table('message_correlation_message_instance',
|
"process_instance_report",
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
["created_by_id"],
|
||||||
sa.Column('message_instance_id', sa.Integer(), nullable=False),
|
unique=False,
|
||||||
sa.Column('message_correlation_id', sa.Integer(), nullable=False),
|
)
|
||||||
sa.ForeignKeyConstraint(['message_correlation_id'], ['message_correlation.id'], ),
|
op.create_index(
|
||||||
sa.ForeignKeyConstraint(['message_instance_id'], ['message_instance.id'], ),
|
op.f("ix_process_instance_report_identifier"),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
"process_instance_report",
|
||||||
sa.UniqueConstraint('message_instance_id', 'message_correlation_id', name='message_correlation_message_instance_unique')
|
["identifier"],
|
||||||
|
unique=False,
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"refresh_token",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("token", sa.String(length=1024), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["user_id"],
|
||||||
|
["user.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint("user_id"),
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"secret",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("key", sa.String(length=50), nullable=False),
|
||||||
|
sa.Column("value", sa.Text(), nullable=False),
|
||||||
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["user_id"],
|
||||||
|
["user.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint("key"),
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"user_group_assignment",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("group_id", sa.Integer(), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["group_id"],
|
||||||
|
["group.id"],
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["user_id"],
|
||||||
|
["user.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint("user_id", "group_id", name="user_group_assignment_unique"),
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"active_task",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("process_instance_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("actual_owner_id", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("lane_assignment_id", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("form_file_name", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column("ui_form_file_name", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("task_id", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column("task_name", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column("task_title", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column("task_type", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column("task_status", sa.String(length=50), nullable=True),
|
||||||
|
sa.Column("process_model_display_name", sa.String(length=255), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["actual_owner_id"],
|
||||||
|
["user.id"],
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["lane_assignment_id"],
|
||||||
|
["group.id"],
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["process_instance_id"],
|
||||||
|
["process_instance.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint(
|
||||||
|
"task_id", "process_instance_id", name="active_task_unique"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"message_correlation",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("process_instance_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("message_correlation_property_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("name", sa.String(length=255), nullable=False),
|
||||||
|
sa.Column("value", sa.String(length=255), nullable=False),
|
||||||
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["message_correlation_property_id"],
|
||||||
|
["message_correlation_property.id"],
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["process_instance_id"],
|
||||||
|
["process_instance.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint(
|
||||||
|
"process_instance_id",
|
||||||
|
"message_correlation_property_id",
|
||||||
|
"name",
|
||||||
|
name="message_instance_id_name_unique",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
op.create_index(
|
||||||
|
op.f("ix_message_correlation_message_correlation_property_id"),
|
||||||
|
"message_correlation",
|
||||||
|
["message_correlation_property_id"],
|
||||||
|
unique=False,
|
||||||
|
)
|
||||||
|
op.create_index(
|
||||||
|
op.f("ix_message_correlation_name"),
|
||||||
|
"message_correlation",
|
||||||
|
["name"],
|
||||||
|
unique=False,
|
||||||
|
)
|
||||||
|
op.create_index(
|
||||||
|
op.f("ix_message_correlation_process_instance_id"),
|
||||||
|
"message_correlation",
|
||||||
|
["process_instance_id"],
|
||||||
|
unique=False,
|
||||||
|
)
|
||||||
|
op.create_index(
|
||||||
|
op.f("ix_message_correlation_value"),
|
||||||
|
"message_correlation",
|
||||||
|
["value"],
|
||||||
|
unique=False,
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"message_instance",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("process_instance_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("message_model_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("message_type", sa.String(length=20), nullable=False),
|
||||||
|
sa.Column("payload", sa.JSON(), nullable=True),
|
||||||
|
sa.Column("status", sa.String(length=20), nullable=False),
|
||||||
|
sa.Column("failure_cause", sa.Text(), nullable=True),
|
||||||
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["message_model_id"],
|
||||||
|
["message_model.id"],
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["process_instance_id"],
|
||||||
|
["process_instance.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"permission_assignment",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("principal_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("permission_target_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("grant_type", sa.String(length=50), nullable=False),
|
||||||
|
sa.Column("permission", sa.String(length=50), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["permission_target_id"],
|
||||||
|
["permission_target.id"],
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["principal_id"],
|
||||||
|
["principal.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint(
|
||||||
|
"principal_id",
|
||||||
|
"permission_target_id",
|
||||||
|
"permission",
|
||||||
|
name="permission_assignment_uniq",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"active_task_user",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("active_task_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["active_task_id"],
|
||||||
|
["active_task.id"],
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["user_id"],
|
||||||
|
["user.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint(
|
||||||
|
"active_task_id", "user_id", name="active_task_user_unique"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
op.create_index(
|
||||||
|
op.f("ix_active_task_user_active_task_id"),
|
||||||
|
"active_task_user",
|
||||||
|
["active_task_id"],
|
||||||
|
unique=False,
|
||||||
|
)
|
||||||
|
op.create_index(
|
||||||
|
op.f("ix_active_task_user_user_id"),
|
||||||
|
"active_task_user",
|
||||||
|
["user_id"],
|
||||||
|
unique=False,
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"message_correlation_message_instance",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("message_instance_id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("message_correlation_id", sa.Integer(), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["message_correlation_id"],
|
||||||
|
["message_correlation.id"],
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["message_instance_id"],
|
||||||
|
["message_instance.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint(
|
||||||
|
"message_instance_id",
|
||||||
|
"message_correlation_id",
|
||||||
|
name="message_correlation_message_instance_unique",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
op.create_index(
|
||||||
|
op.f("ix_message_correlation_message_instance_message_correlation_id"),
|
||||||
|
"message_correlation_message_instance",
|
||||||
|
["message_correlation_id"],
|
||||||
|
unique=False,
|
||||||
|
)
|
||||||
|
op.create_index(
|
||||||
|
op.f("ix_message_correlation_message_instance_message_instance_id"),
|
||||||
|
"message_correlation_message_instance",
|
||||||
|
["message_instance_id"],
|
||||||
|
unique=False,
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_message_correlation_message_instance_message_correlation_id'), 'message_correlation_message_instance', ['message_correlation_id'], unique=False)
|
|
||||||
op.create_index(op.f('ix_message_correlation_message_instance_message_instance_id'), 'message_correlation_message_instance', ['message_instance_id'], unique=False)
|
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
def downgrade():
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
op.drop_index(op.f('ix_message_correlation_message_instance_message_instance_id'), table_name='message_correlation_message_instance')
|
op.drop_index(
|
||||||
op.drop_index(op.f('ix_message_correlation_message_instance_message_correlation_id'), table_name='message_correlation_message_instance')
|
op.f("ix_message_correlation_message_instance_message_instance_id"),
|
||||||
op.drop_table('message_correlation_message_instance')
|
table_name="message_correlation_message_instance",
|
||||||
op.drop_index(op.f('ix_active_task_user_user_id'), table_name='active_task_user')
|
)
|
||||||
op.drop_index(op.f('ix_active_task_user_active_task_id'), table_name='active_task_user')
|
op.drop_index(
|
||||||
op.drop_table('active_task_user')
|
op.f("ix_message_correlation_message_instance_message_correlation_id"),
|
||||||
op.drop_table('permission_assignment')
|
table_name="message_correlation_message_instance",
|
||||||
op.drop_table('message_instance')
|
)
|
||||||
op.drop_index(op.f('ix_message_correlation_value'), table_name='message_correlation')
|
op.drop_table("message_correlation_message_instance")
|
||||||
op.drop_index(op.f('ix_message_correlation_process_instance_id'), table_name='message_correlation')
|
op.drop_index(op.f("ix_active_task_user_user_id"), table_name="active_task_user")
|
||||||
op.drop_index(op.f('ix_message_correlation_name'), table_name='message_correlation')
|
op.drop_index(
|
||||||
op.drop_index(op.f('ix_message_correlation_message_correlation_property_id'), table_name='message_correlation')
|
op.f("ix_active_task_user_active_task_id"), table_name="active_task_user"
|
||||||
op.drop_table('message_correlation')
|
)
|
||||||
op.drop_table('active_task')
|
op.drop_table("active_task_user")
|
||||||
op.drop_table('user_group_assignment')
|
op.drop_table("permission_assignment")
|
||||||
op.drop_table('secret')
|
op.drop_table("message_instance")
|
||||||
op.drop_table('refresh_token')
|
op.drop_index(
|
||||||
op.drop_index(op.f('ix_process_instance_report_identifier'), table_name='process_instance_report')
|
op.f("ix_message_correlation_value"), table_name="message_correlation"
|
||||||
op.drop_index(op.f('ix_process_instance_report_created_by_id'), table_name='process_instance_report')
|
)
|
||||||
op.drop_table('process_instance_report')
|
op.drop_index(
|
||||||
op.drop_index(op.f('ix_process_instance_process_model_identifier'), table_name='process_instance')
|
op.f("ix_message_correlation_process_instance_id"),
|
||||||
op.drop_index(op.f('ix_process_instance_process_group_identifier'), table_name='process_instance')
|
table_name="message_correlation",
|
||||||
op.drop_table('process_instance')
|
)
|
||||||
op.drop_table('principal')
|
op.drop_index(op.f("ix_message_correlation_name"), table_name="message_correlation")
|
||||||
op.drop_index(op.f('ix_message_triggerable_process_model_process_model_identifier'), table_name='message_triggerable_process_model')
|
op.drop_index(
|
||||||
op.drop_index(op.f('ix_message_triggerable_process_model_process_group_identifier'), table_name='message_triggerable_process_model')
|
op.f("ix_message_correlation_message_correlation_property_id"),
|
||||||
op.drop_table('message_triggerable_process_model')
|
table_name="message_correlation",
|
||||||
op.drop_index(op.f('ix_message_correlation_property_identifier'), table_name='message_correlation_property')
|
)
|
||||||
op.drop_table('message_correlation_property')
|
op.drop_table("message_correlation")
|
||||||
op.drop_table('user')
|
op.drop_table("active_task")
|
||||||
op.drop_table('spiff_step_details')
|
op.drop_table("user_group_assignment")
|
||||||
op.drop_table('spiff_logging')
|
op.drop_table("secret")
|
||||||
op.drop_table('permission_target')
|
op.drop_table("refresh_token")
|
||||||
op.drop_index(op.f('ix_message_model_name'), table_name='message_model')
|
op.drop_index(
|
||||||
op.drop_index(op.f('ix_message_model_identifier'), table_name='message_model')
|
op.f("ix_process_instance_report_identifier"),
|
||||||
op.drop_table('message_model')
|
table_name="process_instance_report",
|
||||||
op.drop_table('group')
|
)
|
||||||
op.drop_index(op.f('ix_bpmn_process_id_lookup_bpmn_process_identifier'), table_name='bpmn_process_id_lookup')
|
op.drop_index(
|
||||||
op.drop_table('bpmn_process_id_lookup')
|
op.f("ix_process_instance_report_created_by_id"),
|
||||||
|
table_name="process_instance_report",
|
||||||
|
)
|
||||||
|
op.drop_table("process_instance_report")
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_process_instance_process_model_identifier"),
|
||||||
|
table_name="process_instance",
|
||||||
|
)
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_process_instance_process_group_identifier"),
|
||||||
|
table_name="process_instance",
|
||||||
|
)
|
||||||
|
op.drop_table("process_instance")
|
||||||
|
op.drop_table("principal")
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_message_triggerable_process_model_process_model_identifier"),
|
||||||
|
table_name="message_triggerable_process_model",
|
||||||
|
)
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_message_triggerable_process_model_process_group_identifier"),
|
||||||
|
table_name="message_triggerable_process_model",
|
||||||
|
)
|
||||||
|
op.drop_table("message_triggerable_process_model")
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_message_correlation_property_identifier"),
|
||||||
|
table_name="message_correlation_property",
|
||||||
|
)
|
||||||
|
op.drop_table("message_correlation_property")
|
||||||
|
op.drop_table("user")
|
||||||
|
op.drop_table("spiff_step_details")
|
||||||
|
op.drop_table("spiff_logging")
|
||||||
|
op.drop_table("permission_target")
|
||||||
|
op.drop_index(op.f("ix_message_model_name"), table_name="message_model")
|
||||||
|
op.drop_index(op.f("ix_message_model_identifier"), table_name="message_model")
|
||||||
|
op.drop_table("message_model")
|
||||||
|
op.drop_table("group")
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_bpmn_process_id_lookup_bpmn_process_identifier"),
|
||||||
|
table_name="bpmn_process_id_lookup",
|
||||||
|
)
|
||||||
|
op.drop_table("bpmn_process_id_lookup")
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|
|
@ -643,7 +643,7 @@ werkzeug = "*"
|
||||||
type = "git"
|
type = "git"
|
||||||
url = "https://github.com/sartography/flask-bpmn"
|
url = "https://github.com/sartography/flask-bpmn"
|
||||||
reference = "main"
|
reference = "main"
|
||||||
resolved_reference = "b9d4077955e0d45406946ef07440176fb9fd12e5"
|
resolved_reference = "df9ab9a12078e4f908c87778371725e0af414a11"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "Flask-Cors"
|
name = "Flask-Cors"
|
||||||
|
|
|
@ -5,6 +5,7 @@ from typing import Any
|
||||||
import connexion # type: ignore
|
import connexion # type: ignore
|
||||||
import flask.app
|
import flask.app
|
||||||
import flask.json
|
import flask.json
|
||||||
|
import spiffworkflow_backend.load_database_models # noqa: F401
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from apscheduler.schedulers.background import BackgroundScheduler # type: ignore
|
from apscheduler.schedulers.background import BackgroundScheduler # type: ignore
|
||||||
from apscheduler.schedulers.base import BaseScheduler # type: ignore
|
from apscheduler.schedulers.base import BaseScheduler # type: ignore
|
||||||
|
@ -14,9 +15,6 @@ from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import migrate
|
from flask_bpmn.models.db import migrate
|
||||||
from flask_cors import CORS # type: ignore
|
from flask_cors import CORS # type: ignore
|
||||||
from flask_mail import Mail # type: ignore
|
from flask_mail import Mail # type: ignore
|
||||||
from werkzeug.exceptions import NotFound
|
|
||||||
|
|
||||||
import spiffworkflow_backend.load_database_models # noqa: F401
|
|
||||||
from spiffworkflow_backend.config import setup_config
|
from spiffworkflow_backend.config import setup_config
|
||||||
from spiffworkflow_backend.routes.admin_blueprint.admin_blueprint import admin_blueprint
|
from spiffworkflow_backend.routes.admin_blueprint.admin_blueprint import admin_blueprint
|
||||||
from spiffworkflow_backend.routes.process_api_blueprint import process_api_blueprint
|
from spiffworkflow_backend.routes.process_api_blueprint import process_api_blueprint
|
||||||
|
@ -26,6 +24,7 @@ from spiffworkflow_backend.services.authorization_service import AuthorizationSe
|
||||||
from spiffworkflow_backend.services.background_processing_service import (
|
from spiffworkflow_backend.services.background_processing_service import (
|
||||||
BackgroundProcessingService,
|
BackgroundProcessingService,
|
||||||
)
|
)
|
||||||
|
from werkzeug.exceptions import NotFound
|
||||||
|
|
||||||
|
|
||||||
class MyJSONEncoder(DefaultJSONProvider):
|
class MyJSONEncoder(DefaultJSONProvider):
|
||||||
|
|
|
@ -141,6 +141,12 @@ paths:
|
||||||
|
|
||||||
/process-groups:
|
/process-groups:
|
||||||
parameters:
|
parameters:
|
||||||
|
- name: process_group_identifier
|
||||||
|
in: query
|
||||||
|
required: false
|
||||||
|
description: Optional parameter to filter by a single group
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
- name: page
|
- name: page
|
||||||
in: query
|
in: query
|
||||||
required: false
|
required: false
|
||||||
|
@ -702,33 +708,6 @@ paths:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
$ref: "#/components/schemas/Workflow"
|
$ref: "#/components/schemas/Workflow"
|
||||||
|
|
||||||
/process-models/{process_group_id}/{process_model_id}/process-instances/reports:
|
|
||||||
parameters:
|
|
||||||
- name: process_group_id
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: The unique id of an existing process group
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- name: process_model_id
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: The unique id of an existing process model.
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- name: page
|
|
||||||
in: query
|
|
||||||
required: false
|
|
||||||
description: The page number to return. Defaults to page 1.
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
- name: per_page
|
|
||||||
in: query
|
|
||||||
required: false
|
|
||||||
description: The page number to return. Defaults to page 1.
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
post:
|
post:
|
||||||
operationId: spiffworkflow_backend.routes.process_api_blueprint.process_instance_report_create
|
operationId: spiffworkflow_backend.routes.process_api_blueprint.process_instance_report_create
|
||||||
summary: Returns all process instance reports for process model
|
summary: Returns all process instance reports for process model
|
||||||
|
@ -776,39 +755,6 @@ paths:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
$ref: "#/components/schemas/Workflow"
|
$ref: "#/components/schemas/Workflow"
|
||||||
|
|
||||||
/process-models/{process_group_id}/{process_model_id}/process-instances/reports/{report_identifier}:
|
|
||||||
parameters:
|
|
||||||
- name: process_group_id
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: The unique id of an existing process group
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- name: process_model_id
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: The unique id of an existing process model.
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- name: report_identifier
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: The unique id of an existing report
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- name: page
|
|
||||||
in: query
|
|
||||||
required: false
|
|
||||||
description: The page number to return. Defaults to page 1.
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
- name: per_page
|
|
||||||
in: query
|
|
||||||
required: false
|
|
||||||
description: The page number to return. Defaults to page 1.
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
put:
|
put:
|
||||||
operationId: spiffworkflow_backend.routes.process_api_blueprint.process_instance_report_update
|
operationId: spiffworkflow_backend.routes.process_api_blueprint.process_instance_report_update
|
||||||
summary: Updates a process instance report
|
summary: Updates a process instance report
|
||||||
|
|
|
@ -3,9 +3,8 @@ import os
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from werkzeug.utils import ImportStringError
|
|
||||||
|
|
||||||
from spiffworkflow_backend.services.logging_service import setup_logger
|
from spiffworkflow_backend.services.logging_service import setup_logger
|
||||||
|
from werkzeug.utils import ImportStringError
|
||||||
|
|
||||||
|
|
||||||
class ConfigurationError(Exception):
|
class ConfigurationError(Exception):
|
||||||
|
|
|
@ -6,14 +6,13 @@ from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
from sqlalchemy.orm import relationship
|
|
||||||
from sqlalchemy.orm import RelationshipProperty
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
from spiffworkflow_backend.models.task import Task
|
from spiffworkflow_backend.models.task import Task
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
from sqlalchemy.orm import RelationshipProperty
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
|
@ -5,10 +5,9 @@ from dataclasses import dataclass
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
|
@ -7,7 +7,6 @@ from typing import Optional
|
||||||
import marshmallow
|
import marshmallow
|
||||||
from marshmallow import INCLUDE
|
from marshmallow import INCLUDE
|
||||||
from marshmallow import Schema
|
from marshmallow import Schema
|
||||||
|
|
||||||
from spiffworkflow_backend.helpers.spiff_enum import SpiffEnum
|
from spiffworkflow_backend.helpers.spiff_enum import SpiffEnum
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,13 +4,12 @@ from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
from sqlalchemy.orm import relationship
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.message_correlation_property import (
|
from spiffworkflow_backend.models.message_correlation_property import (
|
||||||
MessageCorrelationPropertyModel,
|
MessageCorrelationPropertyModel,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from spiffworkflow_backend.models.message_correlation_message_instance import ( # noqa: F401
|
from spiffworkflow_backend.models.message_correlation_message_instance import ( # noqa: F401
|
||||||
|
|
|
@ -3,10 +3,9 @@ from dataclasses import dataclass
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.message_correlation import MessageCorrelationModel
|
from spiffworkflow_backend.models.message_correlation import MessageCorrelationModel
|
||||||
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
|
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
"""Message_correlation_property."""
|
"""Message_correlation_property."""
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.message_model import MessageModel
|
from spiffworkflow_backend.models.message_model import MessageModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
|
||||||
|
|
||||||
class MessageCorrelationPropertyModel(SpiffworkflowBaseDBModel):
|
class MessageCorrelationPropertyModel(SpiffworkflowBaseDBModel):
|
||||||
|
|
|
@ -7,15 +7,14 @@ from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
|
from spiffworkflow_backend.models.message_model import MessageModel
|
||||||
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
from sqlalchemy import ForeignKey
|
from sqlalchemy import ForeignKey
|
||||||
from sqlalchemy.event import listens_for
|
from sqlalchemy.event import listens_for
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from sqlalchemy.orm import validates
|
from sqlalchemy.orm import validates
|
||||||
|
|
||||||
from spiffworkflow_backend.models.message_model import MessageModel
|
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from spiffworkflow_backend.models.message_correlation_message_instance import ( # noqa: F401
|
from spiffworkflow_backend.models.message_correlation_message_instance import ( # noqa: F401
|
||||||
MessageCorrelationMessageInstanceModel,
|
MessageCorrelationMessageInstanceModel,
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
"""Message_correlation_property."""
|
"""Message_correlation_property."""
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.message_model import MessageModel
|
from spiffworkflow_backend.models.message_model import MessageModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
|
||||||
|
|
||||||
class MessageTriggerableProcessModel(SpiffworkflowBaseDBModel):
|
class MessageTriggerableProcessModel(SpiffworkflowBaseDBModel):
|
||||||
|
|
|
@ -4,11 +4,10 @@ from typing import Any
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
from sqlalchemy.orm import validates
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.permission_target import PermissionTargetModel
|
from spiffworkflow_backend.models.permission_target import PermissionTargetModel
|
||||||
from spiffworkflow_backend.models.principal import PrincipalModel
|
from spiffworkflow_backend.models.principal import PrincipalModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
from sqlalchemy.orm import validates
|
||||||
|
|
||||||
|
|
||||||
class PermitDeny(enum.Enum):
|
class PermitDeny(enum.Enum):
|
||||||
|
|
|
@ -3,13 +3,12 @@ from dataclasses import dataclass
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from sqlalchemy import ForeignKey
|
from sqlalchemy import ForeignKey
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
from sqlalchemy.schema import CheckConstraint
|
from sqlalchemy.schema import CheckConstraint
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
|
||||||
|
|
||||||
|
|
||||||
class DataValidityError(Exception):
|
class DataValidityError(Exception):
|
||||||
"""DataValidityError."""
|
"""DataValidityError."""
|
||||||
|
|
|
@ -9,7 +9,6 @@ from typing import Any
|
||||||
import marshmallow
|
import marshmallow
|
||||||
from marshmallow import post_load
|
from marshmallow import post_load
|
||||||
from marshmallow import Schema
|
from marshmallow import Schema
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,16 +12,15 @@ from marshmallow import INCLUDE
|
||||||
from marshmallow import Schema
|
from marshmallow import Schema
|
||||||
from marshmallow_enum import EnumField # type: ignore
|
from marshmallow_enum import EnumField # type: ignore
|
||||||
from SpiffWorkflow.util.deep_merge import DeepMerge # type: ignore
|
from SpiffWorkflow.util.deep_merge import DeepMerge # type: ignore
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
from sqlalchemy.orm import deferred
|
|
||||||
from sqlalchemy.orm import relationship
|
|
||||||
from sqlalchemy.orm import validates
|
|
||||||
|
|
||||||
from spiffworkflow_backend.helpers.spiff_enum import SpiffEnum
|
from spiffworkflow_backend.helpers.spiff_enum import SpiffEnum
|
||||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||||
from spiffworkflow_backend.models.task import Task
|
from spiffworkflow_backend.models.task import Task
|
||||||
from spiffworkflow_backend.models.task import TaskSchema
|
from spiffworkflow_backend.models.task import TaskSchema
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
from sqlalchemy.orm import deferred
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
from sqlalchemy.orm import validates
|
||||||
|
|
||||||
|
|
||||||
class NavigationItemSchema(Schema):
|
class NavigationItemSchema(Schema):
|
||||||
|
|
|
@ -9,10 +9,6 @@ from typing import TypedDict
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
from sqlalchemy.orm import deferred
|
|
||||||
from sqlalchemy.orm import relationship
|
|
||||||
|
|
||||||
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
||||||
ProcessEntityNotFoundError,
|
ProcessEntityNotFoundError,
|
||||||
)
|
)
|
||||||
|
@ -21,6 +17,9 @@ from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
from sqlalchemy.orm import deferred
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
|
|
||||||
ReportMetadata = dict[str, Any]
|
ReportMetadata = dict[str, Any]
|
||||||
|
|
|
@ -9,7 +9,6 @@ from typing import Any
|
||||||
import marshmallow
|
import marshmallow
|
||||||
from marshmallow import Schema
|
from marshmallow import Schema
|
||||||
from marshmallow.decorators import post_load
|
from marshmallow.decorators import post_load
|
||||||
|
|
||||||
from spiffworkflow_backend.models.file import File
|
from spiffworkflow_backend.models.file import File
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,8 @@ from dataclasses import dataclass
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from marshmallow import Schema
|
from marshmallow import Schema
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
|
||||||
|
|
||||||
@dataclass()
|
@dataclass()
|
||||||
|
|
|
@ -10,13 +10,12 @@ from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from marshmallow import Schema
|
from marshmallow import Schema
|
||||||
from sqlalchemy.orm import relationship
|
|
||||||
from sqlalchemy.orm import validates
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.services.authentication_service import (
|
from spiffworkflow_backend.services.authentication_service import (
|
||||||
AuthenticationProviderTypes,
|
AuthenticationProviderTypes,
|
||||||
)
|
)
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
from sqlalchemy.orm import validates
|
||||||
|
|
||||||
|
|
||||||
class UserNotFoundError(Exception):
|
class UserNotFoundError(Exception):
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
"""UserGroupAssignment."""
|
"""UserGroupAssignment."""
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||||
from sqlalchemy import ForeignKey
|
|
||||||
from sqlalchemy.orm import relationship
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
from sqlalchemy import ForeignKey
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
|
|
||||||
class UserGroupAssignmentModel(SpiffworkflowBaseDBModel):
|
class UserGroupAssignmentModel(SpiffworkflowBaseDBModel):
|
||||||
|
|
|
@ -7,8 +7,6 @@ from flask import redirect
|
||||||
from flask import render_template
|
from flask import render_template
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
from werkzeug.wrappers import Response
|
|
||||||
|
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
|
@ -18,6 +16,7 @@ from spiffworkflow_backend.services.process_instance_service import (
|
||||||
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
|
||||||
from spiffworkflow_backend.services.user_service import UserService
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
from werkzeug.wrappers import Response
|
||||||
|
|
||||||
admin_blueprint = Blueprint(
|
admin_blueprint = Blueprint(
|
||||||
"admin", __name__, template_folder="templates", static_folder="static"
|
"admin", __name__, template_folder="templates", static_folder="static"
|
||||||
|
|
|
@ -28,9 +28,6 @@ from lxml import etree # type: ignore
|
||||||
from lxml.builder import ElementMaker # type: ignore
|
from lxml.builder import ElementMaker # type: ignore
|
||||||
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
||||||
from SpiffWorkflow.task import TaskState
|
from SpiffWorkflow.task import TaskState
|
||||||
from sqlalchemy import asc
|
|
||||||
from sqlalchemy import desc
|
|
||||||
|
|
||||||
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
||||||
ProcessEntityNotFoundError,
|
ProcessEntityNotFoundError,
|
||||||
)
|
)
|
||||||
|
@ -78,6 +75,8 @@ from spiffworkflow_backend.services.secret_service import SecretService
|
||||||
from spiffworkflow_backend.services.service_task_service import ServiceTaskService
|
from spiffworkflow_backend.services.service_task_service import ServiceTaskService
|
||||||
from spiffworkflow_backend.services.spec_file_service import SpecFileService
|
from spiffworkflow_backend.services.spec_file_service import SpecFileService
|
||||||
from spiffworkflow_backend.services.user_service import UserService
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
from sqlalchemy import asc
|
||||||
|
from sqlalchemy import desc
|
||||||
|
|
||||||
|
|
||||||
class TaskDataSelectOption(TypedDict):
|
class TaskDataSelectOption(TypedDict):
|
||||||
|
@ -162,7 +161,9 @@ def process_group_delete(modified_process_group_id: str) -> flask.wrappers.Respo
|
||||||
return Response(json.dumps({"ok": True}), status=200, mimetype="application/json")
|
return Response(json.dumps({"ok": True}), status=200, mimetype="application/json")
|
||||||
|
|
||||||
|
|
||||||
def process_group_update(modified_process_group_id: str, body: dict) -> flask.wrappers.Response:
|
def process_group_update(
|
||||||
|
modified_process_group_id: str, body: dict
|
||||||
|
) -> flask.wrappers.Response:
|
||||||
"""Process Group Update."""
|
"""Process Group Update."""
|
||||||
body_include_list = ["display_name", "description"]
|
body_include_list = ["display_name", "description"]
|
||||||
body_filtered = {
|
body_filtered = {
|
||||||
|
@ -177,9 +178,12 @@ def process_group_update(modified_process_group_id: str, body: dict) -> flask.wr
|
||||||
return make_response(jsonify(process_group), 200)
|
return make_response(jsonify(process_group), 200)
|
||||||
|
|
||||||
|
|
||||||
def process_groups_list(page: int = 1, per_page: int = 100) -> flask.wrappers.Response:
|
def process_groups_list(process_group_identifier: Optional[str] = None, page: int = 1, per_page: int = 100) -> flask.wrappers.Response:
|
||||||
"""Process_groups_list."""
|
"""Process_groups_list."""
|
||||||
process_groups = ProcessModelService().get_process_groups()
|
if process_group_identifier is not None:
|
||||||
|
process_groups = ProcessModelService().get_process_groups(process_group_identifier)
|
||||||
|
else:
|
||||||
|
process_groups = ProcessModelService().get_process_groups()
|
||||||
batch = ProcessModelService().get_batch(
|
batch = ProcessModelService().get_batch(
|
||||||
items=process_groups, page=page, per_page=per_page
|
items=process_groups, page=page, per_page=per_page
|
||||||
)
|
)
|
||||||
|
@ -230,7 +234,9 @@ def process_model_add(
|
||||||
)
|
)
|
||||||
|
|
||||||
modified_process_model_id = process_model_info.id
|
modified_process_model_id = process_model_info.id
|
||||||
unmodified_process_model_id = un_modify_modified_process_model_id(modified_process_model_id)
|
unmodified_process_model_id = un_modify_modified_process_model_id(
|
||||||
|
modified_process_model_id
|
||||||
|
)
|
||||||
process_model_info.id = unmodified_process_model_id
|
process_model_info.id = unmodified_process_model_id
|
||||||
process_group_id, _ = os.path.split(process_model_info.id)
|
process_group_id, _ = os.path.split(process_model_info.id)
|
||||||
process_model_service = ProcessModelService()
|
process_model_service = ProcessModelService()
|
||||||
|
|
|
@ -12,14 +12,13 @@ from flask import g
|
||||||
from flask import redirect
|
from flask import redirect
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from werkzeug.wrappers import Response
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.authentication_service import (
|
from spiffworkflow_backend.services.authentication_service import (
|
||||||
AuthenticationService,
|
AuthenticationService,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.authorization_service import AuthorizationService
|
from spiffworkflow_backend.services.authorization_service import AuthorizationService
|
||||||
from spiffworkflow_backend.services.user_service import UserService
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
from werkzeug.wrappers import Response
|
||||||
|
|
||||||
"""
|
"""
|
||||||
.. module:: crc.api.user
|
.. module:: crc.api.user
|
||||||
|
@ -125,7 +124,9 @@ def verify_token(
|
||||||
# no user_info
|
# no user_info
|
||||||
else:
|
else:
|
||||||
raise ApiError(
|
raise ApiError(
|
||||||
error_code="no_user_info", message="Cannot retrieve user info", status_code=401
|
error_code="no_user_info",
|
||||||
|
message="Cannot retrieve user info",
|
||||||
|
status_code=401,
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -9,11 +9,10 @@ from flask import request
|
||||||
from flask import Response
|
from flask import Response
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from sqlalchemy.exc import IntegrityError
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.models.user_group_assignment import UserGroupAssignmentModel
|
from spiffworkflow_backend.models.user_group_assignment import UserGroupAssignmentModel
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
APPLICATION_JSON: Final = "application/json"
|
APPLICATION_JSON: Final = "application/json"
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from flask import g
|
from flask import g
|
||||||
|
|
||||||
from spiffworkflow_backend.models.script_attributes_context import (
|
from spiffworkflow_backend.models.script_attributes_context import (
|
||||||
ScriptAttributesContext,
|
ScriptAttributesContext,
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
|
|
||||||
from spiffworkflow_backend.models.script_attributes_context import (
|
from spiffworkflow_backend.models.script_attributes_context import (
|
||||||
ScriptAttributesContext,
|
ScriptAttributesContext,
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,7 +4,6 @@ from typing import Any
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
|
|
||||||
from spiffworkflow_backend.models.script_attributes_context import (
|
from spiffworkflow_backend.models.script_attributes_context import (
|
||||||
ScriptAttributesContext,
|
ScriptAttributesContext,
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,7 +9,6 @@ from typing import Any
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
|
|
||||||
from spiffworkflow_backend.models.script_attributes_context import (
|
from spiffworkflow_backend.models.script_attributes_context import (
|
||||||
ScriptAttributesContext,
|
ScriptAttributesContext,
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,10 +4,9 @@ import time
|
||||||
|
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
def load_acceptance_test_fixtures() -> list[ProcessInstanceModel]:
|
def load_acceptance_test_fixtures() -> list[ProcessInstanceModel]:
|
||||||
|
|
|
@ -11,9 +11,8 @@ from flask import current_app
|
||||||
from flask import redirect
|
from flask import redirect
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from werkzeug.wrappers import Response
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.refresh_token import RefreshTokenModel
|
from spiffworkflow_backend.models.refresh_token import RefreshTokenModel
|
||||||
|
from werkzeug.wrappers import Response
|
||||||
|
|
||||||
|
|
||||||
class AuthenticationProviderTypes(enum.Enum):
|
class AuthenticationProviderTypes(enum.Enum):
|
||||||
|
|
|
@ -11,8 +11,6 @@ from flask import request
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
||||||
from sqlalchemy import text
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.models.permission_assignment import PermissionAssignmentModel
|
from spiffworkflow_backend.models.permission_assignment import PermissionAssignmentModel
|
||||||
|
@ -27,6 +25,7 @@ from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.user_service import UserService
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
from sqlalchemy import text
|
||||||
|
|
||||||
|
|
||||||
class PermissionsFileNotSetError(Exception):
|
class PermissionsFileNotSetError(Exception):
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
"""Background_processing_service."""
|
"""Background_processing_service."""
|
||||||
import flask
|
import flask
|
||||||
|
|
||||||
from spiffworkflow_backend.services.message_service import MessageService
|
from spiffworkflow_backend.services.message_service import MessageService
|
||||||
from spiffworkflow_backend.services.process_instance_service import (
|
from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
"""Data_setup_service."""
|
"""Data_setup_service."""
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ 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 flask_bpmn.models.db import db
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
|
||||||
from spiffworkflow_backend.services.email_service import EmailService
|
from spiffworkflow_backend.services.email_service import EmailService
|
||||||
|
|
|
@ -7,7 +7,6 @@ from typing import Optional
|
||||||
import pytz
|
import pytz
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
|
|
||||||
from spiffworkflow_backend.models.file import CONTENT_TYPES
|
from spiffworkflow_backend.models.file import CONTENT_TYPES
|
||||||
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
|
||||||
|
@ -34,7 +33,7 @@ class FileSystemService:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def process_group_path(name: str) -> str:
|
def process_group_path(name: str) -> str:
|
||||||
"""Category_path."""
|
"""Category_path."""
|
||||||
return os.path.join(FileSystemService.root_path(), name)
|
return os.path.abspath(os.path.join(FileSystemService.root_path(), name))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def full_path_from_relative_path(relative_path: str) -> str:
|
def full_path_from_relative_path(relative_path: str) -> str:
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.services.user_service import UserService
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ from typing import Optional
|
||||||
from flask import g
|
from flask import g
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
|
|
||||||
from spiffworkflow_backend.models.spiff_logging import SpiffLoggingModel
|
from spiffworkflow_backend.models.spiff_logging import SpiffLoggingModel
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,6 @@ from typing import Any
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from sqlalchemy import and_
|
|
||||||
from sqlalchemy import or_
|
|
||||||
from sqlalchemy import select
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.message_correlation import MessageCorrelationModel
|
from spiffworkflow_backend.models.message_correlation import MessageCorrelationModel
|
||||||
from spiffworkflow_backend.models.message_correlation_message_instance import (
|
from spiffworkflow_backend.models.message_correlation_message_instance import (
|
||||||
MessageCorrelationMessageInstanceModel,
|
MessageCorrelationMessageInstanceModel,
|
||||||
|
@ -23,6 +19,9 @@ from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
from spiffworkflow_backend.services.process_instance_service import (
|
from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
)
|
)
|
||||||
|
from sqlalchemy import and_
|
||||||
|
from sqlalchemy import or_
|
||||||
|
from sqlalchemy import select
|
||||||
|
|
||||||
|
|
||||||
class MessageServiceError(Exception):
|
class MessageServiceError(Exception):
|
||||||
|
|
|
@ -65,7 +65,6 @@ from SpiffWorkflow.spiff.serializer.task_spec_converters import UserTaskConverte
|
||||||
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
||||||
from SpiffWorkflow.task import TaskState
|
from SpiffWorkflow.task import TaskState
|
||||||
from SpiffWorkflow.util.deep_merge import DeepMerge # type: ignore
|
from SpiffWorkflow.util.deep_merge import DeepMerge # type: ignore
|
||||||
|
|
||||||
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
||||||
from spiffworkflow_backend.models.active_task_user import ActiveTaskUserModel
|
from spiffworkflow_backend.models.active_task_user import ActiveTaskUserModel
|
||||||
from spiffworkflow_backend.models.bpmn_process_id_lookup import BpmnProcessIdLookup
|
from spiffworkflow_backend.models.bpmn_process_id_lookup import BpmnProcessIdLookup
|
||||||
|
|
|
@ -7,7 +7,6 @@ from flask import current_app
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceApi
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceApi
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
|
||||||
|
|
|
@ -8,7 +8,6 @@ from typing import Optional
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
|
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
|
|
||||||
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
||||||
ProcessEntityNotFoundError,
|
ProcessEntityNotFoundError,
|
||||||
)
|
)
|
||||||
|
@ -161,9 +160,9 @@ class ProcessModelService(FileSystemService):
|
||||||
process_models.sort()
|
process_models.sort()
|
||||||
return process_models
|
return process_models
|
||||||
|
|
||||||
def get_process_groups(self) -> list[ProcessGroup]:
|
def get_process_groups(self, process_group_id: Optional[str] = None) -> list[ProcessGroup]:
|
||||||
"""Returns the process_groups as a list in display order."""
|
"""Returns the process_groups as a list in display order."""
|
||||||
process_groups = self.__scan_process_groups()
|
process_groups = self.__scan_process_groups(process_group_id)
|
||||||
process_groups.sort()
|
process_groups.sort()
|
||||||
return process_groups
|
return process_groups
|
||||||
|
|
||||||
|
@ -213,10 +212,35 @@ class ProcessModelService(FileSystemService):
|
||||||
)
|
)
|
||||||
return process_group
|
return process_group
|
||||||
|
|
||||||
|
def __get_all_nested_models(self, group_path: str) -> list:
|
||||||
|
"""__get_all_nested_models."""
|
||||||
|
all_nested_models = []
|
||||||
|
for root, dirs, files in os.walk(group_path):
|
||||||
|
for dir in dirs:
|
||||||
|
model_dir = os.path.join(group_path, dir)
|
||||||
|
if ProcessModelService().is_model(model_dir):
|
||||||
|
process_model = self.get_process_model(model_dir)
|
||||||
|
all_nested_models.append(process_model)
|
||||||
|
return all_nested_models
|
||||||
|
|
||||||
def process_group_delete(self, process_group_id: str) -> None:
|
def process_group_delete(self, process_group_id: str) -> None:
|
||||||
"""Delete_process_group."""
|
"""Delete_process_group."""
|
||||||
|
problem_models = []
|
||||||
path = self.process_group_path(process_group_id)
|
path = self.process_group_path(process_group_id)
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
|
nested_models = self.__get_all_nested_models(path)
|
||||||
|
for process_model in nested_models:
|
||||||
|
instances = ProcessInstanceModel.query.filter(
|
||||||
|
ProcessInstanceModel.process_model_identifier == process_model.id
|
||||||
|
).all()
|
||||||
|
if len(instances) > 0:
|
||||||
|
problem_models.append(process_model)
|
||||||
|
if len(problem_models) > 0:
|
||||||
|
raise ApiError(
|
||||||
|
error_code="existing_instances",
|
||||||
|
message=f"We cannot delete the group `{process_group_id}`, "
|
||||||
|
f"there are models with existing instances inside the group. {problem_models}",
|
||||||
|
)
|
||||||
shutil.rmtree(path)
|
shutil.rmtree(path)
|
||||||
self.cleanup_process_group_display_order()
|
self.cleanup_process_group_display_order()
|
||||||
|
|
||||||
|
@ -230,12 +254,16 @@ class ProcessModelService(FileSystemService):
|
||||||
index += 1
|
index += 1
|
||||||
return process_groups
|
return process_groups
|
||||||
|
|
||||||
def __scan_process_groups(self) -> list[ProcessGroup]:
|
def __scan_process_groups(self, process_group_id: Optional[str] = None) -> list[ProcessGroup]:
|
||||||
"""__scan_process_groups."""
|
"""__scan_process_groups."""
|
||||||
if not os.path.exists(FileSystemService.root_path()):
|
if not os.path.exists(FileSystemService.root_path()):
|
||||||
return [] # Nothing to scan yet. There are no files.
|
return [] # Nothing to scan yet. There are no files.
|
||||||
|
if process_group_id is not None:
|
||||||
|
scan_path = os.path.join(FileSystemService.root_path(), process_group_id)
|
||||||
|
else:
|
||||||
|
scan_path = FileSystemService.root_path()
|
||||||
|
|
||||||
with os.scandir(FileSystemService.root_path()) as directory_items:
|
with os.scandir(scan_path) as directory_items:
|
||||||
process_groups = []
|
process_groups = []
|
||||||
for item in directory_items:
|
for item in directory_items:
|
||||||
# if item.is_dir() and not item.name[0] == ".":
|
# if item.is_dir() and not item.name[0] == ".":
|
||||||
|
|
|
@ -8,7 +8,6 @@ from typing import Optional
|
||||||
|
|
||||||
from SpiffWorkflow.bpmn.exceptions import WorkflowTaskExecException # type: ignore
|
from SpiffWorkflow.bpmn.exceptions import WorkflowTaskExecException # type: ignore
|
||||||
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
||||||
|
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
CustomBpmnScriptEngine,
|
CustomBpmnScriptEngine,
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,7 +3,6 @@ from typing import Optional
|
||||||
|
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
|
|
||||||
from spiffworkflow_backend.models.secret_model import SecretModel
|
from spiffworkflow_backend.models.secret_model import SecretModel
|
||||||
|
|
||||||
# from cryptography.fernet import Fernet
|
# from cryptography.fernet import Fernet
|
||||||
|
|
|
@ -5,7 +5,6 @@ from typing import Any
|
||||||
import requests
|
import requests
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
from flask import g
|
from flask import g
|
||||||
|
|
||||||
from spiffworkflow_backend.services.file_system_service import FileSystemService
|
from spiffworkflow_backend.services.file_system_service import FileSystemService
|
||||||
from spiffworkflow_backend.services.secret_service import SecretService
|
from spiffworkflow_backend.services.secret_service import SecretService
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ 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
|
||||||
from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException # type: ignore
|
from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException # type: ignore
|
||||||
|
|
||||||
from spiffworkflow_backend.models.bpmn_process_id_lookup import BpmnProcessIdLookup
|
from spiffworkflow_backend.models.bpmn_process_id_lookup import BpmnProcessIdLookup
|
||||||
from spiffworkflow_backend.models.file import File
|
from spiffworkflow_backend.models.file import File
|
||||||
from spiffworkflow_backend.models.file import FileReference
|
from spiffworkflow_backend.models.file import FileReference
|
||||||
|
|
|
@ -6,7 +6,6 @@ from flask import current_app
|
||||||
from flask import g
|
from flask import g
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
|
|
||||||
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
||||||
from spiffworkflow_backend.models.active_task_user import ActiveTaskUserModel
|
from spiffworkflow_backend.models.active_task_user import ActiveTaskUserModel
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:spiffworkflow="http://spiffworkflow.org/bpmn/schema/1.0/core" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_96f6665" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.0.0-dev">
|
||||||
|
<bpmn:process id="Proccess_WithForm" name="Process With Form" isExecutable="true">
|
||||||
|
<bpmn:startEvent id="StartEvent_1">
|
||||||
|
<bpmn:outgoing>Flow_0smvjir</bpmn:outgoing>
|
||||||
|
</bpmn:startEvent>
|
||||||
|
<bpmn:sequenceFlow id="Flow_0smvjir" sourceRef="StartEvent_1" targetRef="Activity_SimpleForm" />
|
||||||
|
<bpmn:endEvent id="Event_00xci7j">
|
||||||
|
<bpmn:incoming>Flow_1boyhcj</bpmn:incoming>
|
||||||
|
</bpmn:endEvent>
|
||||||
|
<bpmn:sequenceFlow id="Flow_1boyhcj" sourceRef="Activity_1cscoeg" targetRef="Event_00xci7j" />
|
||||||
|
<bpmn:manualTask id="Activity_1cscoeg" name="DisplayInfo">
|
||||||
|
<bpmn:extensionElements>
|
||||||
|
<spiffworkflow:instructionsForEndUser>Hello {{ name }}
|
||||||
|
Department: {{ department }}
|
||||||
|
</spiffworkflow:instructionsForEndUser>
|
||||||
|
</bpmn:extensionElements>
|
||||||
|
<bpmn:incoming>Flow_1ly1khd</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_1boyhcj</bpmn:outgoing>
|
||||||
|
</bpmn:manualTask>
|
||||||
|
<bpmn:sequenceFlow id="Flow_1ly1khd" sourceRef="Activity_SimpleForm" targetRef="Activity_1cscoeg" />
|
||||||
|
<bpmn:userTask id="Activity_SimpleForm" name="Simple Form">
|
||||||
|
<bpmn:extensionElements>
|
||||||
|
<spiffworkflow:properties>
|
||||||
|
<spiffworkflow:property name="formJsonSchemaFilename" value="simple_form.json" />
|
||||||
|
<spiffworkflow:property name="formUiSchemaFilename" value="simple_form_ui.json" />
|
||||||
|
</spiffworkflow:properties>
|
||||||
|
</bpmn:extensionElements>
|
||||||
|
<bpmn:incoming>Flow_0smvjir</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_1ly1khd</bpmn:outgoing>
|
||||||
|
</bpmn:userTask>
|
||||||
|
</bpmn:process>
|
||||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
||||||
|
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Proccess_WithForm">
|
||||||
|
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
|
||||||
|
<dc:Bounds x="179" y="159" width="36" height="36" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Event_00xci7j_di" bpmnElement="Event_00xci7j">
|
||||||
|
<dc:Bounds x="592" y="159" width="36" height="36" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_00g930h_di" bpmnElement="Activity_1cscoeg">
|
||||||
|
<dc:Bounds x="430" y="137" width="100" height="80" />
|
||||||
|
<bpmndi:BPMNLabel />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0x5k4l1_di" bpmnElement="Activity_SimpleForm">
|
||||||
|
<dc:Bounds x="270" y="137" width="100" height="80" />
|
||||||
|
<bpmndi:BPMNLabel />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_0smvjir_di" bpmnElement="Flow_0smvjir">
|
||||||
|
<di:waypoint x="215" y="177" />
|
||||||
|
<di:waypoint x="270" y="177" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1boyhcj_di" bpmnElement="Flow_1boyhcj">
|
||||||
|
<di:waypoint x="530" y="177" />
|
||||||
|
<di:waypoint x="592" y="177" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1ly1khd_di" bpmnElement="Flow_1ly1khd">
|
||||||
|
<di:waypoint x="370" y="177" />
|
||||||
|
<di:waypoint x="430" y="177" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
</bpmndi:BPMNPlane>
|
||||||
|
</bpmndi:BPMNDiagram>
|
||||||
|
</bpmn:definitions>
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"title": "Simple form",
|
||||||
|
"description": "A simple form example.",
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "Name",
|
||||||
|
"default": "World"
|
||||||
|
},
|
||||||
|
"department": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "Department",
|
||||||
|
"enum": [
|
||||||
|
"Finance",
|
||||||
|
"HR",
|
||||||
|
"IT"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"ui:title": "Name",
|
||||||
|
"ui:description": "(Your name)"
|
||||||
|
},
|
||||||
|
"department": {
|
||||||
|
"ui:title": "Department",
|
||||||
|
"ui:description": "(Your department)"
|
||||||
|
},
|
||||||
|
"ui:order": ["name", "department"]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,6 @@ from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
from werkzeug.test import TestResponse # type: ignore
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.permission_assignment import Permission
|
from spiffworkflow_backend.models.permission_assignment import Permission
|
||||||
from spiffworkflow_backend.models.permission_target import PermissionTargetModel
|
from spiffworkflow_backend.models.permission_target import PermissionTargetModel
|
||||||
from spiffworkflow_backend.models.process_group import ProcessGroup
|
from spiffworkflow_backend.models.process_group import ProcessGroup
|
||||||
|
@ -28,6 +25,8 @@ from spiffworkflow_backend.services.authorization_service import AuthorizationSe
|
||||||
from spiffworkflow_backend.services.file_system_service import FileSystemService
|
from spiffworkflow_backend.services.file_system_service import FileSystemService
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
from spiffworkflow_backend.services.user_service import UserService
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
from werkzeug.test import TestResponse # type: ignore
|
||||||
|
|
||||||
# from tests.spiffworkflow_backend.helpers.test_data import logged_in_headers
|
# from tests.spiffworkflow_backend.helpers.test_data import logged_in_headers
|
||||||
|
|
||||||
|
@ -35,7 +34,30 @@ from spiffworkflow_backend.services.user_service import UserService
|
||||||
class BaseTest:
|
class BaseTest:
|
||||||
"""BaseTest."""
|
"""BaseTest."""
|
||||||
|
|
||||||
def basic_test_setup(
|
@staticmethod
|
||||||
|
def find_or_create_user(username: str = "test_user_1") -> UserModel:
|
||||||
|
"""Find_or_create_user."""
|
||||||
|
user = UserModel.query.filter_by(username=username).first()
|
||||||
|
if isinstance(user, UserModel):
|
||||||
|
return user
|
||||||
|
|
||||||
|
user = UserService.create_user("internal", username, username=username)
|
||||||
|
if isinstance(user, UserModel):
|
||||||
|
return user
|
||||||
|
|
||||||
|
raise ApiError(
|
||||||
|
error_code="create_user_error",
|
||||||
|
message=f"Cannot find or create user: {username}",
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def logged_in_headers(
|
||||||
|
user: UserModel, _redirect_url: str = "http://some/frontend/url"
|
||||||
|
) -> Dict[str, str]:
|
||||||
|
"""Logged_in_headers."""
|
||||||
|
return dict(Authorization="Bearer " + user.encode_auth_token())
|
||||||
|
|
||||||
|
def create_group_and_model_with_bpmn(
|
||||||
self,
|
self,
|
||||||
client: FlaskClient,
|
client: FlaskClient,
|
||||||
user: UserModel,
|
user: UserModel,
|
||||||
|
@ -75,56 +97,27 @@ class BaseTest:
|
||||||
|
|
||||||
return process_model_identifier
|
return process_model_identifier
|
||||||
|
|
||||||
@staticmethod
|
def create_process_group(
|
||||||
def find_or_create_user(username: str = "test_user_1") -> UserModel:
|
self,
|
||||||
"""Find_or_create_user."""
|
|
||||||
user = UserModel.query.filter_by(username=username).first()
|
|
||||||
if isinstance(user, UserModel):
|
|
||||||
return user
|
|
||||||
|
|
||||||
user = UserService.create_user("internal", username, username=username)
|
|
||||||
if isinstance(user, UserModel):
|
|
||||||
return user
|
|
||||||
|
|
||||||
raise ApiError(
|
|
||||||
error_code="create_user_error",
|
|
||||||
message=f"Cannot find or create user: {username}",
|
|
||||||
)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_open_id_constants(app: Flask) -> tuple:
|
|
||||||
"""Get_open_id_constants."""
|
|
||||||
open_id_server_url = app.config["OPEN_ID_SERVER_URL"]
|
|
||||||
open_id_client_id = app.config["OPEN_ID_CLIENT_ID"]
|
|
||||||
open_id_realm_name = app.config["OPEN_ID_REALM_NAME"]
|
|
||||||
open_id_client_secret_key = app.config[
|
|
||||||
"OPEN_ID_CLIENT_SECRET_KEY"
|
|
||||||
] # noqa: S105
|
|
||||||
|
|
||||||
return (
|
|
||||||
open_id_server_url,
|
|
||||||
open_id_client_id,
|
|
||||||
open_id_realm_name,
|
|
||||||
open_id_client_secret_key,
|
|
||||||
)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def create_process_instance(
|
|
||||||
client: FlaskClient,
|
client: FlaskClient,
|
||||||
test_process_model_id: str,
|
user: Any,
|
||||||
headers: Dict[str, str],
|
process_group_id: str,
|
||||||
) -> TestResponse:
|
display_name: str = "",
|
||||||
"""Create_process_instance.
|
) -> str:
|
||||||
|
"""Create_process_group."""
|
||||||
There must be an existing process model to instantiate.
|
process_group = ProcessGroup(
|
||||||
"""
|
id=process_group_id, display_name=display_name, display_order=0, admin=False
|
||||||
modified_process_model_id = test_process_model_id.replace("/", ":")
|
)
|
||||||
response = client.post(
|
response = client.post(
|
||||||
f"/v1.0/process-models/{modified_process_model_id}/process-instances",
|
"/v1.0/process-groups",
|
||||||
headers=headers,
|
headers=self.logged_in_headers(user),
|
||||||
|
content_type="application/json",
|
||||||
|
data=json.dumps(ProcessGroupSchema().dump(process_group)),
|
||||||
)
|
)
|
||||||
assert response.status_code == 201
|
assert response.status_code == 201
|
||||||
return response
|
assert response.json is not None
|
||||||
|
assert response.json["id"] == process_group_id
|
||||||
|
return process_group_id
|
||||||
|
|
||||||
def create_process_model_with_api(
|
def create_process_model_with_api(
|
||||||
self,
|
self,
|
||||||
|
@ -178,6 +171,22 @@ class BaseTest:
|
||||||
"You must include the process_model_id, which must be a path to the model"
|
"You must include the process_model_id, which must be a path to the model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_test_data_file_contents(
|
||||||
|
self, file_name: str, process_model_test_data_dir: str
|
||||||
|
) -> bytes:
|
||||||
|
"""Get_test_data_file_contents."""
|
||||||
|
file_full_path = os.path.join(
|
||||||
|
current_app.instance_path,
|
||||||
|
"..",
|
||||||
|
"..",
|
||||||
|
"tests",
|
||||||
|
"data",
|
||||||
|
process_model_test_data_dir,
|
||||||
|
file_name,
|
||||||
|
)
|
||||||
|
with open(file_full_path, "rb") as file:
|
||||||
|
return file.read()
|
||||||
|
|
||||||
def create_spec_file(
|
def create_spec_file(
|
||||||
self,
|
self,
|
||||||
client: FlaskClient,
|
client: FlaskClient,
|
||||||
|
@ -230,27 +239,23 @@ class BaseTest:
|
||||||
assert file["file_contents"] == file2["file_contents"]
|
assert file["file_contents"] == file2["file_contents"]
|
||||||
return file
|
return file
|
||||||
|
|
||||||
def create_process_group(
|
@staticmethod
|
||||||
self,
|
def create_process_instance_from_process_model_id(
|
||||||
client: FlaskClient,
|
client: FlaskClient,
|
||||||
user: Any,
|
test_process_model_id: str,
|
||||||
process_group_id: str,
|
headers: Dict[str, str],
|
||||||
display_name: str = "",
|
) -> TestResponse:
|
||||||
) -> str:
|
"""Create_process_instance.
|
||||||
"""Create_process_group."""
|
|
||||||
process_group = ProcessGroup(
|
There must be an existing process model to instantiate.
|
||||||
id=process_group_id, display_name=display_name, display_order=0, admin=False
|
"""
|
||||||
)
|
modified_process_model_id = test_process_model_id.replace("/", ":")
|
||||||
response = client.post(
|
response = client.post(
|
||||||
"/v1.0/process-groups",
|
f"/v1.0/process-models/{modified_process_model_id}/process-instances",
|
||||||
headers=self.logged_in_headers(user),
|
headers=headers,
|
||||||
content_type="application/json",
|
|
||||||
data=json.dumps(ProcessGroupSchema().dump(process_group)),
|
|
||||||
)
|
)
|
||||||
assert response.status_code == 201
|
assert response.status_code == 201
|
||||||
assert response.json is not None
|
return response
|
||||||
assert response.json["id"] == process_group_id
|
|
||||||
return process_group_id
|
|
||||||
|
|
||||||
# @staticmethod
|
# @staticmethod
|
||||||
# def get_public_access_token(username: str, password: str) -> dict:
|
# def get_public_access_token(username: str, password: str) -> dict:
|
||||||
|
@ -324,29 +329,6 @@ class BaseTest:
|
||||||
)
|
)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def logged_in_headers(
|
|
||||||
user: UserModel, _redirect_url: str = "http://some/frontend/url"
|
|
||||||
) -> Dict[str, str]:
|
|
||||||
"""Logged_in_headers."""
|
|
||||||
return dict(Authorization="Bearer " + user.encode_auth_token())
|
|
||||||
|
|
||||||
def get_test_data_file_contents(
|
|
||||||
self, file_name: str, process_model_test_data_dir: str
|
|
||||||
) -> bytes:
|
|
||||||
"""Get_test_data_file_contents."""
|
|
||||||
file_full_path = os.path.join(
|
|
||||||
current_app.instance_path,
|
|
||||||
"..",
|
|
||||||
"..",
|
|
||||||
"tests",
|
|
||||||
"data",
|
|
||||||
process_model_test_data_dir,
|
|
||||||
file_name,
|
|
||||||
)
|
|
||||||
with open(file_full_path, "rb") as file:
|
|
||||||
return file.read()
|
|
||||||
|
|
||||||
def assert_user_has_permission(
|
def assert_user_has_permission(
|
||||||
self,
|
self,
|
||||||
user: UserModel,
|
user: UserModel,
|
||||||
|
|
|
@ -4,7 +4,6 @@ import os
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||||
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
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
"""User."""
|
"""User."""
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from tests.spiffworkflow_backend.helpers.example_data import ExampleDataLoader
|
|
||||||
|
|
||||||
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
||||||
ProcessEntityNotFoundError,
|
ProcessEntityNotFoundError,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.models.process_group import ProcessGroup
|
from spiffworkflow_backend.models.process_group import ProcessGroup
|
||||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
|
from tests.spiffworkflow_backend.helpers.example_data import ExampleDataLoader
|
||||||
|
|
||||||
|
|
||||||
def assure_process_group_exists(process_group_id: Optional[str] = None) -> ProcessGroup:
|
def assure_process_group_exists(process_group_id: Optional[str] = None) -> ProcessGroup:
|
||||||
|
|
|
@ -2,11 +2,10 @@
|
||||||
import ast
|
import ast
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.services.authentication_service import (
|
from spiffworkflow_backend.services.authentication_service import (
|
||||||
AuthenticationService,
|
AuthenticationService,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestAuthentication(BaseTest):
|
class TestAuthentication(BaseTest):
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
"""Test_logging_service."""
|
"""Test_logging_service."""
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestLoggingService(BaseTest):
|
class TestLoggingService(BaseTest):
|
||||||
|
@ -45,7 +44,7 @@ class TestLoggingService(BaseTest):
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
)
|
)
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client, process_model_identifier, headers
|
client, process_model_identifier, headers
|
||||||
)
|
)
|
||||||
assert response.json is not None
|
assert response.json is not None
|
||||||
|
|
|
@ -3,18 +3,129 @@ import json
|
||||||
|
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_group import ProcessGroup
|
from spiffworkflow_backend.models.process_group import ProcessGroup
|
||||||
from spiffworkflow_backend.models.process_group import ProcessGroupSchema
|
from spiffworkflow_backend.models.process_group import ProcessGroupSchema
|
||||||
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.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
from spiffworkflow_backend.services.process_instance_service import (
|
||||||
|
ProcessInstanceService,
|
||||||
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestNestedGroups(BaseTest):
|
class TestNestedGroups(BaseTest):
|
||||||
"""TestNestedGroups."""
|
"""TestNestedGroups."""
|
||||||
|
|
||||||
|
def test_delete_group_with_running_instance(
|
||||||
|
self,
|
||||||
|
app: Flask,
|
||||||
|
client: FlaskClient,
|
||||||
|
with_db_and_bpmn_file_cleanup: None,
|
||||||
|
with_super_admin_user: UserModel,
|
||||||
|
) -> None:
|
||||||
|
"""Test_delete_group_with_running_instance."""
|
||||||
|
process_group_id = "test_group"
|
||||||
|
process_model_id = "manual_task"
|
||||||
|
bpmn_file_name = "manual_task.bpmn"
|
||||||
|
bpmn_file_location = "manual_task"
|
||||||
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
|
client,
|
||||||
|
with_super_admin_user,
|
||||||
|
process_group_id=process_group_id,
|
||||||
|
process_model_id=process_model_id,
|
||||||
|
bpmn_file_name=bpmn_file_name,
|
||||||
|
bpmn_file_location=bpmn_file_location,
|
||||||
|
)
|
||||||
|
response = self.create_process_instance_from_process_model_id(
|
||||||
|
client,
|
||||||
|
process_model_identifier,
|
||||||
|
self.logged_in_headers(with_super_admin_user),
|
||||||
|
)
|
||||||
|
process_instance_id = response.json["id"]
|
||||||
|
|
||||||
|
client.post(
|
||||||
|
f"/v1.0/process-instances/{process_instance_id}/run",
|
||||||
|
headers=self.logged_in_headers(with_super_admin_user),
|
||||||
|
)
|
||||||
|
process_instance = ProcessInstanceService().get_process_instance(
|
||||||
|
process_instance_id
|
||||||
|
)
|
||||||
|
assert process_instance
|
||||||
|
modified_process_group_id = process_group_id.replace("/", ":")
|
||||||
|
response = client.delete(
|
||||||
|
f"/v1.0/process-groups/{modified_process_group_id}",
|
||||||
|
headers=self.logged_in_headers(with_super_admin_user),
|
||||||
|
)
|
||||||
|
assert response.status_code == 400
|
||||||
|
assert response.json["error_code"] == "existing_instances"
|
||||||
|
assert "We cannot delete the group" in response.json["message"]
|
||||||
|
assert (
|
||||||
|
"there are models with existing instances inside the group"
|
||||||
|
in response.json["message"]
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_delete_group_with_running_instance_in_nested_group(
|
||||||
|
self,
|
||||||
|
app: Flask,
|
||||||
|
client: FlaskClient,
|
||||||
|
with_db_and_bpmn_file_cleanup: None,
|
||||||
|
with_super_admin_user: UserModel,
|
||||||
|
) -> None:
|
||||||
|
"""Test_delete_group_with_running_instance_in_nested_group."""
|
||||||
|
process_group_a = ProcessGroup(
|
||||||
|
id="group_a",
|
||||||
|
display_name="Group A",
|
||||||
|
display_order=0,
|
||||||
|
admin=False,
|
||||||
|
)
|
||||||
|
response_a = client.post( # noqa: F841
|
||||||
|
"/v1.0/process-groups",
|
||||||
|
headers=self.logged_in_headers(with_super_admin_user),
|
||||||
|
content_type="application/json",
|
||||||
|
data=json.dumps(ProcessGroupSchema().dump(process_group_a)),
|
||||||
|
)
|
||||||
|
|
||||||
|
process_group_id = "group_a/test_group"
|
||||||
|
process_model_id = "manual_task"
|
||||||
|
bpmn_file_name = "manual_task.bpmn"
|
||||||
|
bpmn_file_location = "manual_task"
|
||||||
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
|
client,
|
||||||
|
with_super_admin_user,
|
||||||
|
process_group_id=process_group_id,
|
||||||
|
process_model_id=process_model_id,
|
||||||
|
bpmn_file_name=bpmn_file_name,
|
||||||
|
bpmn_file_location=bpmn_file_location,
|
||||||
|
)
|
||||||
|
response = self.create_process_instance_from_process_model_id(
|
||||||
|
client,
|
||||||
|
process_model_identifier,
|
||||||
|
self.logged_in_headers(with_super_admin_user),
|
||||||
|
)
|
||||||
|
process_instance_id = response.json["id"]
|
||||||
|
|
||||||
|
client.post(
|
||||||
|
f"/v1.0/process-instances/{process_instance_id}/run",
|
||||||
|
headers=self.logged_in_headers(with_super_admin_user),
|
||||||
|
)
|
||||||
|
process_instance = ProcessInstanceService().get_process_instance(
|
||||||
|
process_instance_id
|
||||||
|
)
|
||||||
|
assert process_instance
|
||||||
|
modified_process_group_id = process_group_id.replace("/", ":")
|
||||||
|
response = client.delete(
|
||||||
|
f"/v1.0/process-groups/{modified_process_group_id}",
|
||||||
|
headers=self.logged_in_headers(with_super_admin_user),
|
||||||
|
)
|
||||||
|
assert response.status_code == 400
|
||||||
|
assert response.json["error_code"] == "existing_instances"
|
||||||
|
assert "We cannot delete the group" in response.json["message"]
|
||||||
|
assert (
|
||||||
|
"there are models with existing instances inside the group"
|
||||||
|
in response.json["message"]
|
||||||
|
)
|
||||||
|
|
||||||
def test_nested_groups(
|
def test_nested_groups(
|
||||||
self,
|
self,
|
||||||
app: Flask,
|
app: Flask,
|
||||||
|
|
|
@ -9,9 +9,6 @@ import pytest
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
||||||
ProcessEntityNotFoundError,
|
ProcessEntityNotFoundError,
|
||||||
)
|
)
|
||||||
|
@ -35,6 +32,8 @@ from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
# from spiffworkflow_backend.services.git_service import GitService
|
# from spiffworkflow_backend.services.git_service import GitService
|
||||||
|
|
||||||
|
@ -286,7 +285,7 @@ class TestProcessApi(BaseTest):
|
||||||
)
|
)
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
# create an instance from a model
|
# create an instance from a model
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client, process_model_identifier, headers
|
client, process_model_identifier, headers
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -623,7 +622,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_process_model_file_update."""
|
"""Test_process_model_file_update."""
|
||||||
process_model_identifier = self.basic_test_setup(client, with_super_admin_user)
|
process_model_identifier = self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
modified_process_model_id = process_model_identifier.replace("/", ":")
|
modified_process_model_id = process_model_identifier.replace("/", ":")
|
||||||
|
|
||||||
data = {"key1": "THIS DATA"}
|
data = {"key1": "THIS DATA"}
|
||||||
|
@ -647,7 +646,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_process_model_file_update."""
|
"""Test_process_model_file_update."""
|
||||||
process_model_identifier = self.basic_test_setup(client, with_super_admin_user)
|
process_model_identifier = self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
modified_process_model_id = process_model_identifier.replace("/", ":")
|
modified_process_model_id = process_model_identifier.replace("/", ":")
|
||||||
|
|
||||||
data = {"file": (io.BytesIO(b""), "random_fact.svg")}
|
data = {"file": (io.BytesIO(b""), "random_fact.svg")}
|
||||||
|
@ -723,7 +722,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_process_model_file_update."""
|
"""Test_process_model_file_update."""
|
||||||
process_model_identifier = self.basic_test_setup(client, with_super_admin_user)
|
process_model_identifier = self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
# self.create_spec_file(client, user=with_super_admin_user)
|
# self.create_spec_file(client, user=with_super_admin_user)
|
||||||
|
|
||||||
# process_model = load_test_spec("random_fact")
|
# process_model = load_test_spec("random_fact")
|
||||||
|
@ -749,7 +748,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_process_model_file_update."""
|
"""Test_process_model_file_update."""
|
||||||
process_model_identifier = self.basic_test_setup(client, with_super_admin_user)
|
process_model_identifier = self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
||||||
|
|
||||||
response = client.delete(
|
response = client.delete(
|
||||||
|
@ -770,7 +769,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_process_model_file_update."""
|
"""Test_process_model_file_update."""
|
||||||
process_model_identifier = self.basic_test_setup(client, with_super_admin_user)
|
process_model_identifier = self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
||||||
|
|
||||||
response = client.delete(
|
response = client.delete(
|
||||||
|
@ -797,7 +796,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_get_file."""
|
"""Test_get_file."""
|
||||||
process_model_identifier = self.basic_test_setup(client, with_super_admin_user)
|
process_model_identifier = self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
||||||
|
|
||||||
response = client.get(
|
response = client.get(
|
||||||
|
@ -817,7 +816,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_get_workflow_from_workflow_spec."""
|
"""Test_get_workflow_from_workflow_spec."""
|
||||||
process_model_identifier = self.basic_test_setup(client, with_super_admin_user)
|
process_model_identifier = self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
||||||
|
|
||||||
response = client.post(
|
response = client.post(
|
||||||
|
@ -852,7 +851,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_get_process_groups_when_there_are_some."""
|
"""Test_get_process_groups_when_there_are_some."""
|
||||||
self.basic_test_setup(client, with_super_admin_user)
|
self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
response = client.get(
|
response = client.get(
|
||||||
"/v1.0/process-groups",
|
"/v1.0/process-groups",
|
||||||
headers=self.logged_in_headers(with_super_admin_user),
|
headers=self.logged_in_headers(with_super_admin_user),
|
||||||
|
@ -872,7 +871,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_get_process_group_when_found."""
|
"""Test_get_process_group_when_found."""
|
||||||
process_model_identifier = self.basic_test_setup(client, with_super_admin_user)
|
process_model_identifier = self.create_group_and_model_with_bpmn(client, with_super_admin_user)
|
||||||
process_group_id, process_model_id = os.path.split(process_model_identifier)
|
process_group_id, process_model_id = os.path.split(process_model_identifier)
|
||||||
|
|
||||||
response = client.get(
|
response = client.get(
|
||||||
|
@ -893,7 +892,7 @@ class TestProcessApi(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_get_process_model_when_found."""
|
"""Test_get_process_model_when_found."""
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client, with_super_admin_user, bpmn_file_name="random_fact.bpmn"
|
client, with_super_admin_user, bpmn_file_name="random_fact.bpmn"
|
||||||
)
|
)
|
||||||
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
||||||
|
@ -938,7 +937,7 @@ class TestProcessApi(BaseTest):
|
||||||
"""Test_process_instance_create."""
|
"""Test_process_instance_create."""
|
||||||
test_process_model_id = "runs_without_input/sample"
|
test_process_model_id = "runs_without_input/sample"
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
response = self.create_process_instance(client, test_process_model_id, headers)
|
response = self.create_process_instance_from_process_model_id(client, test_process_model_id, headers)
|
||||||
assert response.json is not None
|
assert response.json is not None
|
||||||
assert response.json["updated_at_in_seconds"] is not None
|
assert response.json["updated_at_in_seconds"] is not None
|
||||||
assert response.json["status"] == "not_started"
|
assert response.json["status"] == "not_started"
|
||||||
|
@ -956,7 +955,7 @@ class TestProcessApi(BaseTest):
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_process_instance_run."""
|
"""Test_process_instance_run."""
|
||||||
# process_model_id = "runs_without_input/sample"
|
# process_model_id = "runs_without_input/sample"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client=client,
|
client=client,
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
process_group_id="runs_without_input",
|
process_group_id="runs_without_input",
|
||||||
|
@ -966,7 +965,7 @@ class TestProcessApi(BaseTest):
|
||||||
)
|
)
|
||||||
|
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client, process_model_identifier, headers
|
client, process_model_identifier, headers
|
||||||
)
|
)
|
||||||
assert response.json is not None
|
assert response.json is not None
|
||||||
|
@ -998,7 +997,7 @@ class TestProcessApi(BaseTest):
|
||||||
"""Test_process_instance_show."""
|
"""Test_process_instance_show."""
|
||||||
process_group_id = "simple_script"
|
process_group_id = "simple_script"
|
||||||
process_model_id = "simple_script"
|
process_model_id = "simple_script"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1006,7 +1005,7 @@ class TestProcessApi(BaseTest):
|
||||||
)
|
)
|
||||||
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
modified_process_model_identifier = process_model_identifier.replace("/", ":")
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
create_response = self.create_process_instance(
|
create_response = self.create_process_instance_from_process_model_id(
|
||||||
client, process_model_identifier, headers
|
client, process_model_identifier, headers
|
||||||
)
|
)
|
||||||
assert create_response.json is not None
|
assert create_response.json is not None
|
||||||
|
@ -1041,7 +1040,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "message_receiver"
|
process_model_id = "message_receiver"
|
||||||
bpmn_file_name = "message_receiver.bpmn"
|
bpmn_file_name = "message_receiver.bpmn"
|
||||||
bpmn_file_location = "message_send_one_conversation"
|
bpmn_file_location = "message_send_one_conversation"
|
||||||
self.basic_test_setup(
|
self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1089,7 +1088,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "message_sender"
|
process_model_id = "message_sender"
|
||||||
bpmn_file_name = "message_sender.bpmn"
|
bpmn_file_name = "message_sender.bpmn"
|
||||||
bpmn_file_location = "message_send_one_conversation"
|
bpmn_file_location = "message_send_one_conversation"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1106,7 +1105,7 @@ class TestProcessApi(BaseTest):
|
||||||
"andThis": "another_item_non_key",
|
"andThis": "another_item_non_key",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client,
|
client,
|
||||||
process_model_identifier,
|
process_model_identifier,
|
||||||
self.logged_in_headers(with_super_admin_user),
|
self.logged_in_headers(with_super_admin_user),
|
||||||
|
@ -1157,7 +1156,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "message_sender"
|
process_model_id = "message_sender"
|
||||||
bpmn_file_name = "message_sender.bpmn"
|
bpmn_file_name = "message_sender.bpmn"
|
||||||
bpmn_file_location = "message_send_one_conversation"
|
bpmn_file_location = "message_send_one_conversation"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1166,7 +1165,7 @@ class TestProcessApi(BaseTest):
|
||||||
bpmn_file_location=bpmn_file_location,
|
bpmn_file_location=bpmn_file_location,
|
||||||
)
|
)
|
||||||
|
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client,
|
client,
|
||||||
process_model_identifier,
|
process_model_identifier,
|
||||||
self.logged_in_headers(with_super_admin_user),
|
self.logged_in_headers(with_super_admin_user),
|
||||||
|
@ -1206,7 +1205,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "user_task"
|
process_model_id = "user_task"
|
||||||
bpmn_file_name = "user_task.bpmn"
|
bpmn_file_name = "user_task.bpmn"
|
||||||
bpmn_file_location = "user_task"
|
bpmn_file_location = "user_task"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1216,7 +1215,7 @@ class TestProcessApi(BaseTest):
|
||||||
)
|
)
|
||||||
|
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client, process_model_identifier, headers
|
client, process_model_identifier, headers
|
||||||
)
|
)
|
||||||
assert response.json is not None
|
assert response.json is not None
|
||||||
|
@ -1245,7 +1244,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_group_id = "my_process_group"
|
process_group_id = "my_process_group"
|
||||||
process_model_id = "dynamic_enum_select_fields"
|
process_model_id = "dynamic_enum_select_fields"
|
||||||
bpmn_file_location = "dynamic_enum_select_fields"
|
bpmn_file_location = "dynamic_enum_select_fields"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1255,7 +1254,7 @@ class TestProcessApi(BaseTest):
|
||||||
)
|
)
|
||||||
|
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client, process_model_identifier, headers
|
client, process_model_identifier, headers
|
||||||
)
|
)
|
||||||
assert response.json is not None
|
assert response.json is not None
|
||||||
|
@ -1297,7 +1296,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_group_id = "runs_without_input"
|
process_group_id = "runs_without_input"
|
||||||
process_model_id = "sample"
|
process_model_id = "sample"
|
||||||
bpmn_file_location = "sample"
|
bpmn_file_location = "sample"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1306,7 +1305,7 @@ class TestProcessApi(BaseTest):
|
||||||
)
|
)
|
||||||
|
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
self.create_process_instance(client, process_model_identifier, headers)
|
self.create_process_instance_from_process_model_id(client, process_model_identifier, headers)
|
||||||
|
|
||||||
response = client.get(
|
response = client.get(
|
||||||
"/v1.0/process-instances",
|
"/v1.0/process-instances",
|
||||||
|
@ -1342,7 +1341,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "sample"
|
process_model_id = "sample"
|
||||||
bpmn_file_name = "sample.bpmn"
|
bpmn_file_name = "sample.bpmn"
|
||||||
bpmn_file_location = "sample"
|
bpmn_file_location = "sample"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1351,11 +1350,11 @@ class TestProcessApi(BaseTest):
|
||||||
bpmn_file_location=bpmn_file_location,
|
bpmn_file_location=bpmn_file_location,
|
||||||
)
|
)
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
self.create_process_instance(client, process_model_identifier, headers)
|
self.create_process_instance_from_process_model_id(client, process_model_identifier, headers)
|
||||||
self.create_process_instance(client, process_model_identifier, headers)
|
self.create_process_instance_from_process_model_id(client, process_model_identifier, headers)
|
||||||
self.create_process_instance(client, process_model_identifier, headers)
|
self.create_process_instance_from_process_model_id(client, process_model_identifier, headers)
|
||||||
self.create_process_instance(client, process_model_identifier, headers)
|
self.create_process_instance_from_process_model_id(client, process_model_identifier, headers)
|
||||||
self.create_process_instance(client, process_model_identifier, headers)
|
self.create_process_instance_from_process_model_id(client, process_model_identifier, headers)
|
||||||
|
|
||||||
response = client.get(
|
response = client.get(
|
||||||
"/v1.0/process-instances?per_page=2&page=3",
|
"/v1.0/process-instances?per_page=2&page=3",
|
||||||
|
@ -1391,7 +1390,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "sample"
|
process_model_id = "sample"
|
||||||
bpmn_file_name = "sample.bpmn"
|
bpmn_file_name = "sample.bpmn"
|
||||||
bpmn_file_location = "sample"
|
bpmn_file_location = "sample"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1504,7 +1503,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "sample"
|
process_model_id = "sample"
|
||||||
bpmn_file_name = "sample.bpmn"
|
bpmn_file_name = "sample.bpmn"
|
||||||
bpmn_file_location = "sample"
|
bpmn_file_location = "sample"
|
||||||
process_model_identifier = self.basic_test_setup( # noqa: F841
|
process_model_identifier = self.create_group_and_model_with_bpmn( # noqa: F841
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1544,7 +1543,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "sample"
|
process_model_id = "sample"
|
||||||
# bpmn_file_name = "sample.bpmn"
|
# bpmn_file_name = "sample.bpmn"
|
||||||
# bpmn_file_location = "sample"
|
# bpmn_file_location = "sample"
|
||||||
# process_model_identifier = self.basic_test_setup(
|
# process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
# client,
|
# client,
|
||||||
# with_super_admin_user,
|
# with_super_admin_user,
|
||||||
# process_group_id=process_group_id,
|
# process_group_id=process_group_id,
|
||||||
|
@ -1658,7 +1657,7 @@ class TestProcessApi(BaseTest):
|
||||||
) -> Any:
|
) -> Any:
|
||||||
"""Setup_testing_instance."""
|
"""Setup_testing_instance."""
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
response = self.create_process_instance(client, process_model_id, headers)
|
response = self.create_process_instance_from_process_model_id(client, process_model_id, headers)
|
||||||
process_instance = response.json
|
process_instance = response.json
|
||||||
assert isinstance(process_instance, dict)
|
assert isinstance(process_instance, dict)
|
||||||
process_instance_id = process_instance["id"]
|
process_instance_id = process_instance["id"]
|
||||||
|
@ -1676,7 +1675,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "error"
|
process_model_id = "error"
|
||||||
bpmn_file_name = "error.bpmn"
|
bpmn_file_name = "error.bpmn"
|
||||||
bpmn_file_location = "error"
|
bpmn_file_location = "error"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1730,7 +1729,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "error"
|
process_model_id = "error"
|
||||||
bpmn_file_name = "error.bpmn"
|
bpmn_file_name = "error.bpmn"
|
||||||
bpmn_file_location = "error"
|
bpmn_file_location = "error"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1784,7 +1783,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "error"
|
process_model_id = "error"
|
||||||
bpmn_file_name = "error.bpmn"
|
bpmn_file_name = "error.bpmn"
|
||||||
bpmn_file_location = "error"
|
bpmn_file_location = "error"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1843,7 +1842,7 @@ class TestProcessApi(BaseTest):
|
||||||
file_data = b"abc123"
|
file_data = b"abc123"
|
||||||
bpmn_file_name = "hello_world.bpmn"
|
bpmn_file_name = "hello_world.bpmn"
|
||||||
bpmn_file_location = "hello_world"
|
bpmn_file_location = "hello_world"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1876,7 +1875,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "message_receiver"
|
process_model_id = "message_receiver"
|
||||||
bpmn_file_name = "message_receiver.bpmn"
|
bpmn_file_name = "message_receiver.bpmn"
|
||||||
bpmn_file_location = "message_send_one_conversation"
|
bpmn_file_location = "message_send_one_conversation"
|
||||||
self.basic_test_setup(
|
self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1968,7 +1967,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "model_with_lanes"
|
process_model_id = "model_with_lanes"
|
||||||
bpmn_file_name = "lanes.bpmn"
|
bpmn_file_name = "lanes.bpmn"
|
||||||
bpmn_file_location = "model_with_lanes"
|
bpmn_file_location = "model_with_lanes"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -1983,7 +1982,7 @@ class TestProcessApi(BaseTest):
|
||||||
# process_group_id="finance",
|
# process_group_id="finance",
|
||||||
# )
|
# )
|
||||||
|
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client,
|
client,
|
||||||
# process_model.process_group_id,
|
# process_model.process_group_id,
|
||||||
process_model_identifier,
|
process_model_identifier,
|
||||||
|
@ -2171,7 +2170,7 @@ class TestProcessApi(BaseTest):
|
||||||
"""Test_process_instance_suspend."""
|
"""Test_process_instance_suspend."""
|
||||||
bpmn_file_name = "manual_task.bpmn"
|
bpmn_file_name = "manual_task.bpmn"
|
||||||
bpmn_file_location = "manual_task"
|
bpmn_file_location = "manual_task"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client=client,
|
client=client,
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
process_model_id="manual_task",
|
process_model_id="manual_task",
|
||||||
|
@ -2192,7 +2191,7 @@ class TestProcessApi(BaseTest):
|
||||||
)
|
)
|
||||||
|
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client, process_model_identifier, headers
|
client, process_model_identifier, headers
|
||||||
)
|
)
|
||||||
assert response.json is not None
|
assert response.json is not None
|
||||||
|
@ -2239,7 +2238,7 @@ class TestProcessApi(BaseTest):
|
||||||
process_model_id = "simple_script"
|
process_model_id = "simple_script"
|
||||||
bpmn_file_name = "simple_script.bpmn"
|
bpmn_file_name = "simple_script.bpmn"
|
||||||
bpmn_file_location = "simple_script"
|
bpmn_file_location = "simple_script"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client=client,
|
client=client,
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
|
|
@ -6,15 +6,14 @@ import pytest
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from werkzeug.test import TestResponse # type: ignore
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||||
from spiffworkflow_backend.models.secret_model import SecretModel
|
from spiffworkflow_backend.models.secret_model import SecretModel
|
||||||
from spiffworkflow_backend.models.secret_model import SecretModelSchema
|
from spiffworkflow_backend.models.secret_model import SecretModelSchema
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
from spiffworkflow_backend.services.secret_service import SecretService
|
from spiffworkflow_backend.services.secret_service import SecretService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from werkzeug.test import TestResponse # type: ignore
|
||||||
|
|
||||||
|
|
||||||
class SecretServiceTestHelpers(BaseTest):
|
class SecretServiceTestHelpers(BaseTest):
|
||||||
|
|
|
@ -2,15 +2,14 @@
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.user_service import UserService
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestGetGroupMembers(BaseTest):
|
class TestGetGroupMembers(BaseTest):
|
||||||
|
|
|
@ -4,9 +4,6 @@ import datetime
|
||||||
import pytz
|
import pytz
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.script_attributes_context import (
|
from spiffworkflow_backend.models.script_attributes_context import (
|
||||||
ScriptAttributesContext,
|
ScriptAttributesContext,
|
||||||
)
|
)
|
||||||
|
@ -17,6 +14,8 @@ from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
from spiffworkflow_backend.services.process_instance_service import (
|
from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestGetLocaltime(BaseTest):
|
class TestGetLocaltime(BaseTest):
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
"""Test_acceptance_test_fixtures."""
|
"""Test_acceptance_test_fixtures."""
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
|
|
||||||
from spiffworkflow_backend.services.acceptance_test_fixtures import (
|
from spiffworkflow_backend.services.acceptance_test_fixtures import (
|
||||||
load_acceptance_test_fixtures,
|
load_acceptance_test_fixtures,
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
import pytest
|
import pytest
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.models.user import UserNotFoundError
|
from spiffworkflow_backend.models.user import UserNotFoundError
|
||||||
from spiffworkflow_backend.services.authorization_service import AuthorizationService
|
from spiffworkflow_backend.services.authorization_service import AuthorizationService
|
||||||
|
@ -14,6 +12,7 @@ from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestAuthorizationService(BaseTest):
|
class TestAuthorizationService(BaseTest):
|
||||||
|
@ -104,7 +103,7 @@ class TestAuthorizationService(BaseTest):
|
||||||
self.find_or_create_user("testuser1")
|
self.find_or_create_user("testuser1")
|
||||||
AuthorizationService.import_permissions_from_yaml_file()
|
AuthorizationService.import_permissions_from_yaml_file()
|
||||||
|
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client=client,
|
client=client,
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
process_group_id="test_group",
|
process_group_id="test_group",
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
"""Test_various_bpmn_constructs."""
|
"""Test_various_bpmn_constructs."""
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
|
@ -10,6 +8,7 @@ from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
from spiffworkflow_backend.services.process_instance_service import (
|
from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestDotNotation(BaseTest):
|
class TestDotNotation(BaseTest):
|
||||||
|
@ -27,7 +26,7 @@ class TestDotNotation(BaseTest):
|
||||||
process_model_id = "test_dot_notation"
|
process_model_id = "test_dot_notation"
|
||||||
bpmn_file_name = "diagram.bpmn"
|
bpmn_file_name = "diagram.bpmn"
|
||||||
bpmn_file_location = "dot_notation"
|
bpmn_file_location = "dot_notation"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
@ -37,7 +36,7 @@ class TestDotNotation(BaseTest):
|
||||||
)
|
)
|
||||||
|
|
||||||
headers = self.logged_in_headers(with_super_admin_user)
|
headers = self.logged_in_headers(with_super_admin_user)
|
||||||
response = self.create_process_instance(
|
response = self.create_process_instance_from_process_model_id(
|
||||||
client, process_model_identifier, headers
|
client, process_model_identifier, headers
|
||||||
)
|
)
|
||||||
process_instance_id = response.json["id"]
|
process_instance_id = response.json["id"]
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
"""Test_environment_var_script."""
|
"""Test_environment_var_script."""
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestEnvironmentVarScript(BaseTest):
|
class TestEnvironmentVarScript(BaseTest):
|
||||||
|
|
|
@ -3,12 +3,11 @@ import pytest
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
|
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
|
||||||
from spiffworkflow_backend.models.message_model import MessageModel
|
from spiffworkflow_backend.models.message_model import MessageModel
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestMessageInstance(BaseTest):
|
class TestMessageInstance(BaseTest):
|
||||||
|
@ -20,7 +19,7 @@ class TestMessageInstance(BaseTest):
|
||||||
process_model_id = "hello_world"
|
process_model_id = "hello_world"
|
||||||
bpmn_file_name = "hello_world.bpmn"
|
bpmn_file_name = "hello_world.bpmn"
|
||||||
bpmn_file_location = "hello_world"
|
bpmn_file_location = "hello_world"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
user,
|
user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
"""Test_message_service."""
|
"""Test_message_service."""
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.message_correlation import MessageCorrelationModel
|
from spiffworkflow_backend.models.message_correlation import MessageCorrelationModel
|
||||||
from spiffworkflow_backend.models.message_correlation_message_instance import (
|
from spiffworkflow_backend.models.message_correlation_message_instance import (
|
||||||
MessageCorrelationMessageInstanceModel,
|
MessageCorrelationMessageInstanceModel,
|
||||||
|
@ -18,6 +15,8 @@ from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
from spiffworkflow_backend.services.process_instance_service import (
|
from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestMessageService(BaseTest):
|
class TestMessageService(BaseTest):
|
||||||
|
|
|
@ -2,12 +2,11 @@
|
||||||
import pytest
|
import pytest
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.permission_target import (
|
from spiffworkflow_backend.models.permission_target import (
|
||||||
InvalidPermissionTargetUriError,
|
InvalidPermissionTargetUriError,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.models.permission_target import PermissionTargetModel
|
from spiffworkflow_backend.models.permission_target import PermissionTargetModel
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestPermissionTarget(BaseTest):
|
class TestPermissionTarget(BaseTest):
|
||||||
|
|
|
@ -2,15 +2,14 @@
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.models.permission_assignment import PermissionAssignmentModel
|
from spiffworkflow_backend.models.permission_assignment import PermissionAssignmentModel
|
||||||
from spiffworkflow_backend.models.permission_target import PermissionTargetModel
|
from spiffworkflow_backend.models.permission_target import PermissionTargetModel
|
||||||
from spiffworkflow_backend.models.principal import PrincipalModel
|
from spiffworkflow_backend.models.principal import PrincipalModel
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.user_service import UserService
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
# we think we can get the list of roles for a user.
|
# we think we can get the list of roles for a user.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
"""Process Model."""
|
"""Process Model."""
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_group import ProcessGroup
|
from spiffworkflow_backend.models.process_group import ProcessGroup
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,6 @@ import pytest
|
||||||
from flask import g
|
from flask import g
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
|
@ -19,6 +16,8 @@ from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
from spiffworkflow_backend.services.process_instance_service import (
|
from spiffworkflow_backend.services.process_instance_service import (
|
||||||
ProcessInstanceService,
|
ProcessInstanceService,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestProcessInstanceProcessor(BaseTest):
|
class TestProcessInstanceProcessor(BaseTest):
|
||||||
|
|
|
@ -2,12 +2,11 @@
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||||
from spiffworkflow_backend.models.process_instance_report import (
|
from spiffworkflow_backend.models.process_instance_report import (
|
||||||
ProcessInstanceReportModel,
|
ProcessInstanceReportModel,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
# from tests.spiffworkflow_backend.helpers.test_data import find_or_create_process_group
|
# from tests.spiffworkflow_backend.helpers.test_data import find_or_create_process_group
|
||||||
# from spiffworkflow_backend.models.permission_assignment import PermissionAssignmentModel
|
# from spiffworkflow_backend.models.permission_assignment import PermissionAssignmentModel
|
||||||
|
|
|
@ -2,15 +2,14 @@
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.bpmn_process_id_lookup import BpmnProcessIdLookup
|
from spiffworkflow_backend.models.bpmn_process_id_lookup import BpmnProcessIdLookup
|
||||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestProcessModel(BaseTest):
|
class TestProcessModel(BaseTest):
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
"""Test_process_model_service."""
|
"""Test_process_model_service."""
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestProcessModelService(BaseTest):
|
class TestProcessModelService(BaseTest):
|
||||||
|
|
|
@ -3,13 +3,12 @@ import pytest
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestOpenFile(BaseTest):
|
class TestOpenFile(BaseTest):
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
"""Test Permissions."""
|
"""Test Permissions."""
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.script_unit_test_runner import PythonScriptContext
|
from spiffworkflow_backend.services.script_unit_test_runner import PythonScriptContext
|
||||||
from spiffworkflow_backend.services.script_unit_test_runner import ScriptUnitTestRunner
|
from spiffworkflow_backend.services.script_unit_test_runner import ScriptUnitTestRunner
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestScriptUnitTestRunner(BaseTest):
|
class TestScriptUnitTestRunner(BaseTest):
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
"""Test_various_bpmn_constructs."""
|
"""Test_various_bpmn_constructs."""
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.services.secret_service import SecretService
|
from spiffworkflow_backend.services.secret_service import SecretService
|
||||||
from spiffworkflow_backend.services.service_task_service import ServiceTaskDelegate
|
from spiffworkflow_backend.services.service_task_service import ServiceTaskDelegate
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestServiceTaskDelegate(BaseTest):
|
class TestServiceTaskDelegate(BaseTest):
|
||||||
|
|
|
@ -7,13 +7,12 @@ from flask.testing import FlaskClient
|
||||||
from flask_bpmn.api.api_error import ApiError
|
from flask_bpmn.api.api_error import ApiError
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from SpiffWorkflow.dmn.parser.BpmnDmnParser import BpmnDmnParser # type: ignore
|
from SpiffWorkflow.dmn.parser.BpmnDmnParser import BpmnDmnParser # type: ignore
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.bpmn_process_id_lookup import BpmnProcessIdLookup
|
from spiffworkflow_backend.models.bpmn_process_id_lookup import BpmnProcessIdLookup
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
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
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
|
||||||
class TestSpecFileService(BaseTest):
|
class TestSpecFileService(BaseTest):
|
||||||
|
@ -35,7 +34,7 @@ class TestSpecFileService(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_can_store_process_ids_for_lookup."""
|
"""Test_can_store_process_ids_for_lookup."""
|
||||||
self.basic_test_setup(
|
self.create_group_and_model_with_bpmn(
|
||||||
client=client,
|
client=client,
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
process_group_id=self.process_group_id,
|
process_group_id=self.process_group_id,
|
||||||
|
@ -60,7 +59,7 @@ class TestSpecFileService(BaseTest):
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_fails_to_save_duplicate_process_id."""
|
"""Test_fails_to_save_duplicate_process_id."""
|
||||||
bpmn_process_identifier = "Level1"
|
bpmn_process_identifier = "Level1"
|
||||||
self.basic_test_setup(
|
self.create_group_and_model_with_bpmn(
|
||||||
client=client,
|
client=client,
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
process_group_id=self.process_group_id,
|
process_group_id=self.process_group_id,
|
||||||
|
@ -104,7 +103,7 @@ class TestSpecFileService(BaseTest):
|
||||||
db.session.add(process_id_lookup)
|
db.session.add(process_id_lookup)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
self.basic_test_setup(
|
self.create_group_and_model_with_bpmn(
|
||||||
client=client,
|
client=client,
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
process_group_id=self.process_group_id,
|
process_group_id=self.process_group_id,
|
||||||
|
@ -144,7 +143,7 @@ class TestSpecFileService(BaseTest):
|
||||||
"""
|
"""
|
||||||
process_group_id = "test_group"
|
process_group_id = "test_group"
|
||||||
process_model_id = "call_activity_nested"
|
process_model_id = "call_activity_nested"
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client=client,
|
client=client,
|
||||||
user=with_super_admin_user,
|
user=with_super_admin_user,
|
||||||
process_group_id=process_group_id,
|
process_group_id=process_group_id,
|
||||||
|
|
|
@ -3,11 +3,10 @@ from decimal import Decimal
|
||||||
|
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
|
from spiffworkflow_backend.models.spiff_logging import SpiffLoggingModel
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
from spiffworkflow_backend.models.spiff_logging import SpiffLoggingModel
|
|
||||||
|
|
||||||
|
|
||||||
class TestSpiffLogging(BaseTest):
|
class TestSpiffLogging(BaseTest):
|
||||||
"""TestSpiffLogging."""
|
"""TestSpiffLogging."""
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
"""Test_various_bpmn_constructs."""
|
"""Test_various_bpmn_constructs."""
|
||||||
from flask.app import Flask
|
from flask.app import Flask
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
||||||
|
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
)
|
)
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestVariousBpmnConstructs(BaseTest):
|
class TestVariousBpmnConstructs(BaseTest):
|
||||||
|
@ -21,7 +20,7 @@ class TestVariousBpmnConstructs(BaseTest):
|
||||||
with_super_admin_user: UserModel,
|
with_super_admin_user: UserModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_running_process_with_timer_intermediate_catch_event."""
|
"""Test_running_process_with_timer_intermediate_catch_event."""
|
||||||
process_model_identifier = self.basic_test_setup(
|
process_model_identifier = self.create_group_and_model_with_bpmn(
|
||||||
client,
|
client,
|
||||||
with_super_admin_user,
|
with_super_admin_user,
|
||||||
"test_group",
|
"test_group",
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
"""Test cases for the __main__ module."""
|
"""Test cases for the __main__ module."""
|
||||||
import pytest
|
import pytest
|
||||||
from click.testing import CliRunner
|
from click.testing import CliRunner
|
||||||
|
|
||||||
from spiffworkflow_backend import __main__
|
from spiffworkflow_backend import __main__
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46545,7 +46545,7 @@
|
||||||
"@csstools/postcss-text-decoration-shorthand": "^1.0.0",
|
"@csstools/postcss-text-decoration-shorthand": "^1.0.0",
|
||||||
"@csstools/postcss-trigonometric-functions": "^1.0.2",
|
"@csstools/postcss-trigonometric-functions": "^1.0.2",
|
||||||
"@csstools/postcss-unset-value": "^1.0.2",
|
"@csstools/postcss-unset-value": "^1.0.2",
|
||||||
"autoprefixer": "10.4.5",
|
"autoprefixer": "10.4.8",
|
||||||
"browserslist": "^4.21.3",
|
"browserslist": "^4.21.3",
|
||||||
"css-blank-pseudo": "^3.0.3",
|
"css-blank-pseudo": "^3.0.3",
|
||||||
"css-has-pseudo": "^3.0.4",
|
"css-has-pseudo": "^3.0.4",
|
||||||
|
@ -46583,8 +46583,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"autoprefixer": {
|
"autoprefixer": {
|
||||||
"version": "10.4.5",
|
"version": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz",
|
||||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz",
|
|
||||||
"integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==",
|
"integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.20.2",
|
"browserslist": "^4.20.2",
|
||||||
|
|
|
@ -38,6 +38,10 @@ export default function NavigationBar() {
|
||||||
let newActiveKey = '/admin/process-groups';
|
let newActiveKey = '/admin/process-groups';
|
||||||
if (location.pathname.match(/^\/admin\/messages\b/)) {
|
if (location.pathname.match(/^\/admin\/messages\b/)) {
|
||||||
newActiveKey = '/admin/messages';
|
newActiveKey = '/admin/messages';
|
||||||
|
} else if (
|
||||||
|
location.pathname.match(/^\/admin\/process-instances\/reports\b/)
|
||||||
|
) {
|
||||||
|
newActiveKey = '/admin/process-instances/reports';
|
||||||
} else if (location.pathname.match(/^\/admin\/process-instances\b/)) {
|
} else if (location.pathname.match(/^\/admin\/process-instances\b/)) {
|
||||||
newActiveKey = '/admin/process-instances';
|
newActiveKey = '/admin/process-instances';
|
||||||
} else if (location.pathname.match(/^\/admin\/secrets\b/)) {
|
} else if (location.pathname.match(/^\/admin\/secrets\b/)) {
|
||||||
|
@ -119,6 +123,12 @@ export default function NavigationBar() {
|
||||||
>
|
>
|
||||||
Authentications
|
Authentications
|
||||||
</HeaderMenuItem>
|
</HeaderMenuItem>
|
||||||
|
<HeaderMenuItem
|
||||||
|
href="/admin/process-instances/reports"
|
||||||
|
isCurrentPage={isActivePage('/admin/process-instances/reports')}
|
||||||
|
>
|
||||||
|
Reports
|
||||||
|
</HeaderMenuItem>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,6 +10,10 @@ export default function SubNavigation() {
|
||||||
let newActiveKey = '/admin/process-groups';
|
let newActiveKey = '/admin/process-groups';
|
||||||
if (location.pathname.match(/^\/admin\/messages\b/)) {
|
if (location.pathname.match(/^\/admin\/messages\b/)) {
|
||||||
newActiveKey = '/admin/messages';
|
newActiveKey = '/admin/messages';
|
||||||
|
} else if (
|
||||||
|
location.pathname.match(/^\/admin\/process-instances\/reports\b/)
|
||||||
|
) {
|
||||||
|
newActiveKey = '/admin/process-instances/reports';
|
||||||
} else if (location.pathname.match(/^\/admin\/process-instances\b/)) {
|
} else if (location.pathname.match(/^\/admin\/process-instances\b/)) {
|
||||||
newActiveKey = '/admin/process-instances';
|
newActiveKey = '/admin/process-instances';
|
||||||
} else if (location.pathname.match(/^\/admin\/secrets\b/)) {
|
} else if (location.pathname.match(/^\/admin\/secrets\b/)) {
|
||||||
|
@ -45,6 +49,9 @@ export default function SubNavigation() {
|
||||||
<Nav.Item>
|
<Nav.Item>
|
||||||
<Nav.Link href="/admin/authentications">Authentications</Nav.Link>
|
<Nav.Link href="/admin/authentications">Authentications</Nav.Link>
|
||||||
</Nav.Item>
|
</Nav.Item>
|
||||||
|
<Nav.Item>
|
||||||
|
<Nav.Link href="/admin/process-instances/reports">Reports</Nav.Link>
|
||||||
|
</Nav.Item>
|
||||||
</Nav>
|
</Nav>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,19 +81,19 @@ export default function AdminRoutes() {
|
||||||
element={<ProcessInstanceShow />}
|
element={<ProcessInstanceShow />}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="process-models/:process_model_id/process-instances/reports"
|
path="process-instances/reports"
|
||||||
element={<ProcessInstanceReportList />}
|
element={<ProcessInstanceReportList />}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="process-models/:process_group_id/:process_model_id/process-instances/reports/:report_identifier"
|
path="process-instances/reports/:report_identifier"
|
||||||
element={<ProcessInstanceReportShow />}
|
element={<ProcessInstanceReportShow />}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="process-models/:process_group_id/:process_model_id/process-instances/reports/new"
|
path="process-instances/reports/new"
|
||||||
element={<ProcessInstanceReportNew />}
|
element={<ProcessInstanceReportNew />}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
path="process-models/:process_group_id/:process_model_id/process-instances/reports/:report_identifier/edit"
|
path="process-instances/reports/:report_identifier/edit"
|
||||||
element={<ProcessInstanceReportEdit />}
|
element={<ProcessInstanceReportEdit />}
|
||||||
/>
|
/>
|
||||||
<Route
|
<Route
|
||||||
|
|
|
@ -19,14 +19,19 @@ export default function ProcessGroupShow() {
|
||||||
const [processGroup, setProcessGroup] = useState<ProcessGroup | null>(null);
|
const [processGroup, setProcessGroup] = useState<ProcessGroup | null>(null);
|
||||||
const [processModels, setProcessModels] = useState([]);
|
const [processModels, setProcessModels] = useState([]);
|
||||||
const [processGroups, setProcessGroups] = useState([]);
|
const [processGroups, setProcessGroups] = useState([]);
|
||||||
const [pagination, setPagination] = useState(null);
|
const [modelPagination, setModelPagination] = useState(null);
|
||||||
|
const [groupPagination, setGroupPagination] = useState(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const { page, perPage } = getPageInfoFromSearchParams(searchParams);
|
const { page, perPage } = getPageInfoFromSearchParams(searchParams);
|
||||||
|
|
||||||
const setProcessModelFromResult = (result: any) => {
|
const setProcessModelFromResult = (result: any) => {
|
||||||
setProcessModels(result.results);
|
setProcessModels(result.results);
|
||||||
setPagination(result.pagination);
|
setModelPagination(result.pagination);
|
||||||
|
};
|
||||||
|
const setProcessGroupFromResult = (result: any) => {
|
||||||
|
setProcessGroups(result.results);
|
||||||
|
setGroupPagination(result.pagination);
|
||||||
};
|
};
|
||||||
const processResult = (result: any) => {
|
const processResult = (result: any) => {
|
||||||
setProcessGroup(result);
|
setProcessGroup(result);
|
||||||
|
@ -37,7 +42,10 @@ export default function ProcessGroupShow() {
|
||||||
path: `/process-models?process_group_identifier=${unmodifiedProcessGroupId}&per_page=${perPage}&page=${page}`,
|
path: `/process-models?process_group_identifier=${unmodifiedProcessGroupId}&per_page=${perPage}&page=${page}`,
|
||||||
successCallback: setProcessModelFromResult,
|
successCallback: setProcessModelFromResult,
|
||||||
});
|
});
|
||||||
setProcessGroups(result.process_groups);
|
HttpService.makeCallToBackend({
|
||||||
|
path: `/process-groups?process_group_identifier=${unmodifiedProcessGroupId}&per_page=${perPage}&page=${page}`,
|
||||||
|
successCallback: setProcessGroupFromResult,
|
||||||
|
});
|
||||||
};
|
};
|
||||||
HttpService.makeCallToBackend({
|
HttpService.makeCallToBackend({
|
||||||
path: `/process-groups/${params.process_group_id}`,
|
path: `/process-groups/${params.process_group_id}`,
|
||||||
|
@ -50,7 +58,7 @@ export default function ProcessGroupShow() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const rows = processModels.map((row: ProcessModel) => {
|
const rows = processModels.map((row: ProcessModel) => {
|
||||||
const modifiedProcessModelId: String = row.id.replace('/', ':');
|
const modifiedProcessModelId: String = modifyProcessModelPath((row as any).id);
|
||||||
return (
|
return (
|
||||||
<tr key={row.id}>
|
<tr key={row.id}>
|
||||||
<td>
|
<td>
|
||||||
|
@ -117,7 +125,7 @@ export default function ProcessGroupShow() {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (processGroup && pagination) {
|
if (processGroup && groupPagination && modelPagination) {
|
||||||
const { page, perPage } = getPageInfoFromSearchParams(searchParams);
|
const { page, perPage } = getPageInfoFromSearchParams(searchParams);
|
||||||
const modifiedProcessGroupId = modifyProcessModelPath(processGroup.id);
|
const modifiedProcessGroupId = modifyProcessModelPath(processGroup.id);
|
||||||
return (
|
return (
|
||||||
|
@ -153,7 +161,7 @@ export default function ProcessGroupShow() {
|
||||||
<PaginationForTable
|
<PaginationForTable
|
||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
pagination={pagination}
|
pagination={modelPagination}
|
||||||
tableToDisplay={buildModelTable()}
|
tableToDisplay={buildModelTable()}
|
||||||
path={`/admin/process-groups/${processGroup.id}`}
|
path={`/admin/process-groups/${processGroup.id}`}
|
||||||
/>
|
/>
|
||||||
|
@ -162,7 +170,7 @@ export default function ProcessGroupShow() {
|
||||||
<PaginationForTable
|
<PaginationForTable
|
||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
pagination={pagination}
|
pagination={groupPagination}
|
||||||
tableToDisplay={buildGroupTable()}
|
tableToDisplay={buildGroupTable()}
|
||||||
path={`/admin/process-groups/${processGroup.id}`}
|
path={`/admin/process-groups/${processGroup.id}`}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate, useParams } from 'react-router-dom';
|
||||||
import ProcessBreadcrumb from '../components/ProcessBreadcrumb';
|
|
||||||
import HttpService from '../services/HttpService';
|
import HttpService from '../services/HttpService';
|
||||||
import ButtonWithConfirmation from '../components/ButtonWithConfirmation';
|
import ButtonWithConfirmation from '../components/ButtonWithConfirmation';
|
||||||
|
|
||||||
|
@ -24,15 +23,11 @@ export default function ProcessInstanceReportEdit() {
|
||||||
const [filterBy, setFilterBy] = useState('');
|
const [filterBy, setFilterBy] = useState('');
|
||||||
|
|
||||||
const navigateToProcessInstanceReport = (_result: any) => {
|
const navigateToProcessInstanceReport = (_result: any) => {
|
||||||
navigate(
|
navigate(`/admin/process-instances/reports/${params.report_identifier}`);
|
||||||
`/admin/process-models/${params.process_group_id}/${params.process_model_id}/process-instances/reports/${params.report_identifier}`
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const navigateToProcessInstanceReports = (_result: any) => {
|
const navigateToProcessInstanceReports = (_result: any) => {
|
||||||
navigate(
|
navigate(`/admin/process-instances/reports`);
|
||||||
`/admin/process-models/${params.process_group_id}/${params.process_model_id}/process-instances/reports`
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -111,7 +106,6 @@ export default function ProcessInstanceReportEdit() {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ProcessBreadcrumb />
|
|
||||||
<h1>Edit Process Instance Report: {params.report_identifier}</h1>
|
<h1>Edit Process Instance Report: {params.report_identifier}</h1>
|
||||||
<ButtonWithConfirmation
|
<ButtonWithConfirmation
|
||||||
description={`Delete Report ${params.report_identifier}?`}
|
description={`Delete Report ${params.report_identifier}?`}
|
||||||
|
|
|
@ -2,16 +2,11 @@ import { useEffect, useState } from 'react';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { Button, Table } from '@carbon/react';
|
import { Button, Table } from '@carbon/react';
|
||||||
import { useParams, Link } from 'react-router-dom';
|
import { useParams, Link } from 'react-router-dom';
|
||||||
import ProcessBreadcrumb from '../components/ProcessBreadcrumb';
|
|
||||||
import HttpService from '../services/HttpService';
|
import HttpService from '../services/HttpService';
|
||||||
import { modifyProcessModelPath } from '../helpers';
|
|
||||||
|
|
||||||
export default function ProcessInstanceReportList() {
|
export default function ProcessInstanceReportList() {
|
||||||
const params = useParams();
|
const params = useParams();
|
||||||
const [processInstanceReports, setProcessInstanceReports] = useState([]);
|
const [processInstanceReports, setProcessInstanceReports] = useState([]);
|
||||||
const modifiedProcessModelId = modifyProcessModelPath(
|
|
||||||
params.process_model_id || ''
|
|
||||||
);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
HttpService.makeCallToBackend({
|
HttpService.makeCallToBackend({
|
||||||
|
@ -27,7 +22,7 @@ export default function ProcessInstanceReportList() {
|
||||||
<tr key={(row as any).id}>
|
<tr key={(row as any).id}>
|
||||||
<td>
|
<td>
|
||||||
<Link
|
<Link
|
||||||
to={`/admin/process-models/${modifiedProcessModelId}/process-instances/reports/${rowToUse.identifier}`}
|
to={`/admin/process-instances/reports/${rowToUse.identifier}`}
|
||||||
>
|
>
|
||||||
{rowToUse.identifier}
|
{rowToUse.identifier}
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -49,15 +44,8 @@ export default function ProcessInstanceReportList() {
|
||||||
|
|
||||||
const headerStuff = (
|
const headerStuff = (
|
||||||
<>
|
<>
|
||||||
<ProcessBreadcrumb
|
<h1>Process Instance Reports</h1>
|
||||||
processGroupId={params.process_group_id}
|
<Button href="/admin/process-instances/reports/new">
|
||||||
processModelId={params.process_model_id}
|
|
||||||
linkProcessModel
|
|
||||||
/>
|
|
||||||
<h1>Reports for Process Model: {params.process_model_id}</h1>
|
|
||||||
<Button
|
|
||||||
href={`/admin/process-models/${modifiedProcessModelId}/process-instances/reports/new`}
|
|
||||||
>
|
|
||||||
Add a process instance report
|
Add a process instance report
|
||||||
</Button>
|
</Button>
|
||||||
</>
|
</>
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import ProcessBreadcrumb from '../components/ProcessBreadcrumb';
|
import ProcessBreadcrumb from '../components/ProcessBreadcrumb';
|
||||||
import HttpService from '../services/HttpService';
|
import HttpService from '../services/HttpService';
|
||||||
|
|
||||||
export default function ProcessInstanceReportNew() {
|
export default function ProcessInstanceReportNew() {
|
||||||
const params = useParams();
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
const [identifier, setIdentifier] = useState('');
|
const [identifier, setIdentifier] = useState('');
|
||||||
|
@ -13,9 +12,7 @@ export default function ProcessInstanceReportNew() {
|
||||||
const [filterBy, setFilterBy] = useState('');
|
const [filterBy, setFilterBy] = useState('');
|
||||||
|
|
||||||
const navigateToNewProcessInstance = (_result: any) => {
|
const navigateToNewProcessInstance = (_result: any) => {
|
||||||
navigate(
|
navigate(`/admin/process-instances/reports/${identifier}`);
|
||||||
`/admin/process-models/${params.process_group_id}/${params.process_model_id}/process-instances/reports/${identifier}`
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const addProcessInstanceReport = (event: any) => {
|
const addProcessInstanceReport = (event: any) => {
|
||||||
|
|
|
@ -82,7 +82,7 @@ export default function ProcessInstanceReport() {
|
||||||
/>
|
/>
|
||||||
<h1>Process Instance Report: {params.report_identifier}</h1>
|
<h1>Process Instance Report: {params.report_identifier}</h1>
|
||||||
<Button
|
<Button
|
||||||
href={`/admin/process-models/${params.process_group_id}/${params.process_model_id}/process-instances/reports/${params.report_identifier}/edit`}
|
href={`/admin/process-instances/reports/${params.report_identifier}/edit`}
|
||||||
>
|
>
|
||||||
Edit process instance report
|
Edit process instance report
|
||||||
</Button>
|
</Button>
|
||||||
|
|
|
@ -378,14 +378,6 @@ export default function ProcessModelShow() {
|
||||||
List
|
List
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<Link
|
|
||||||
to={`/admin/process-models/${modifiedProcessModelId}/process-instances/reports`}
|
|
||||||
data-qa="process-instance-reports-link"
|
|
||||||
>
|
|
||||||
Reports
|
|
||||||
</Link>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue