mirror of
https://github.com/status-im/spiff-arena.git
synced 2025-02-28 17:30:35 +00:00
Merge branch 'main' of github.com:sartography/spiff-arena
This commit is contained in:
commit
aa54abb7db
@ -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
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
"""Updates all JSON files, based on the current state of BPMN_SPEC_ABSOLUTE_DIR."""
|
|
||||||
from spiffworkflow_backend import get_hacked_up_app_for_script
|
|
||||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
|
||||||
"""Main."""
|
|
||||||
app = get_hacked_up_app_for_script()
|
|
||||||
with app.app_context():
|
|
||||||
|
|
||||||
groups = ProcessModelService().get_process_groups()
|
|
||||||
for group in groups:
|
|
||||||
for process_model in group.process_models:
|
|
||||||
update_items = {
|
|
||||||
"process_group_id": "",
|
|
||||||
"id": f"{group.id}/{process_model.id}",
|
|
||||||
}
|
|
||||||
ProcessModelService().update_spec(process_model, update_items)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
@ -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
|
||||||
|
|
||||||
|
@ -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():
|
||||||
|
@ -5,12 +5,12 @@ Revises:
|
|||||||
Create Date: 2022-11-15 14:11:47.309399
|
Create Date: 2022-11-15 14:11:47.309399
|
||||||
|
|
||||||
"""
|
"""
|
||||||
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 = 'b7790c9c8174'
|
revision = "b7790c9c8174"
|
||||||
down_revision = None
|
down_revision = None
|
||||||
branch_labels = None
|
branch_labels = None
|
||||||
depends_on = None
|
depends_on = None
|
||||||
@ -18,305 +18,562 @@ depends_on = None
|
|||||||
|
|
||||||
def upgrade():
|
def upgrade():
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
op.create_table('group',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"group",
|
||||||
sa.Column('name', sa.String(length=255), nullable=True),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('identifier', sa.String(length=255), 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_table('message_model',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"message_model",
|
||||||
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("identifier", sa.String(length=50), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id')
|
sa.Column("name", sa.String(length=50), nullable=True),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_message_model_identifier'), 'message_model', ['identifier'], unique=True)
|
op.create_index(
|
||||||
op.create_index(op.f('ix_message_model_name'), 'message_model', ['name'], unique=True)
|
op.f("ix_message_model_identifier"),
|
||||||
op.create_table('permission_target',
|
"message_model",
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
["identifier"],
|
||||||
sa.Column('uri', sa.String(length=255), nullable=False),
|
unique=True,
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('uri')
|
|
||||||
)
|
)
|
||||||
op.create_table('spec_reference_cache',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_message_model_name"), "message_model", ["name"], unique=True
|
||||||
sa.Column('identifier', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('display_name', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('process_model_id', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('type', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('file_name', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('relative_path', sa.String(length=255), nullable=True),
|
|
||||||
sa.Column('has_lanes', sa.Boolean(), nullable=True),
|
|
||||||
sa.Column('is_executable', sa.Boolean(), nullable=True),
|
|
||||||
sa.Column('is_primary', sa.Boolean(), nullable=True),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('identifier', 'type', name='_identifier_type_unique')
|
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_spec_reference_cache_display_name'), 'spec_reference_cache', ['display_name'], unique=False)
|
op.create_table(
|
||||||
op.create_index(op.f('ix_spec_reference_cache_identifier'), 'spec_reference_cache', ['identifier'], unique=False)
|
"permission_target",
|
||||||
op.create_index(op.f('ix_spec_reference_cache_type'), 'spec_reference_cache', ['type'], unique=False)
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
op.create_table('spiff_logging',
|
sa.Column("uri", sa.String(length=255), nullable=False),
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
sa.UniqueConstraint("uri"),
|
||||||
sa.Column('bpmn_process_identifier', sa.String(length=255), nullable=False),
|
|
||||||
sa.Column('bpmn_task_identifier', sa.String(length=255), nullable=False),
|
|
||||||
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('user',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"spec_reference_cache",
|
||||||
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("identifier", sa.String(length=255), nullable=True),
|
||||||
sa.Column('service', sa.String(length=50), nullable=False),
|
sa.Column("display_name", sa.String(length=255), nullable=True),
|
||||||
sa.Column('service_id', sa.String(length=255), nullable=False),
|
sa.Column("process_model_id", sa.String(length=255), nullable=True),
|
||||||
sa.Column('name', sa.String(length=255), nullable=True),
|
sa.Column("type", sa.String(length=255), nullable=True),
|
||||||
sa.Column('email', sa.String(length=255), nullable=True),
|
sa.Column("file_name", sa.String(length=255), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.Column("relative_path", sa.String(length=255), nullable=True),
|
||||||
sa.UniqueConstraint('service', 'service_id', name='service_key'),
|
sa.Column("has_lanes", sa.Boolean(), nullable=True),
|
||||||
sa.UniqueConstraint('uid'),
|
sa.Column("is_executable", sa.Boolean(), nullable=True),
|
||||||
sa.UniqueConstraint('username')
|
sa.Column("is_primary", sa.Boolean(), nullable=True),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint("identifier", "type", name="_identifier_type_unique"),
|
||||||
)
|
)
|
||||||
op.create_table('message_correlation_property',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_spec_reference_cache_display_name"),
|
||||||
sa.Column('identifier', sa.String(length=50), nullable=True),
|
"spec_reference_cache",
|
||||||
sa.Column('message_model_id', sa.Integer(), nullable=False),
|
["display_name"],
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
unique=False,
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(['message_model_id'], ['message_model.id'], ),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('identifier', 'message_model_id', name='message_correlation_property_unique')
|
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_message_correlation_property_identifier'), 'message_correlation_property', ['identifier'], unique=False)
|
op.create_index(
|
||||||
op.create_table('message_triggerable_process_model',
|
op.f("ix_spec_reference_cache_identifier"),
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"spec_reference_cache",
|
||||||
sa.Column('message_model_id', sa.Integer(), nullable=False),
|
["identifier"],
|
||||||
sa.Column('process_model_identifier', sa.String(length=50), nullable=False),
|
unique=False,
|
||||||
sa.Column('process_group_identifier', sa.String(length=50), 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_model_id'], ['message_model.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_index(
|
||||||
op.create_index(op.f('ix_message_triggerable_process_model_process_model_identifier'), 'message_triggerable_process_model', ['process_model_identifier'], unique=False)
|
op.f("ix_spec_reference_cache_type"),
|
||||||
op.create_table('principal',
|
"spec_reference_cache",
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
["type"],
|
||||||
sa.Column('user_id', sa.Integer(), nullable=True),
|
unique=False,
|
||||||
sa.Column('group_id', sa.Integer(), nullable=True),
|
|
||||||
sa.CheckConstraint('NOT(user_id IS NULL AND group_id IS NULL)'),
|
|
||||||
sa.ForeignKeyConstraint(['group_id'], ['group.id'], ),
|
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
sa.UniqueConstraint('group_id'),
|
|
||||||
sa.UniqueConstraint('user_id')
|
|
||||||
)
|
)
|
||||||
op.create_table('process_instance',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"spiff_logging",
|
||||||
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("process_instance_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('process_initiator_id', sa.Integer(), nullable=False),
|
sa.Column("bpmn_process_identifier", sa.String(length=255), nullable=False),
|
||||||
sa.Column('bpmn_json', sa.JSON(), nullable=True),
|
sa.Column("bpmn_task_identifier", sa.String(length=255), nullable=False),
|
||||||
sa.Column('start_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("bpmn_task_name", sa.String(length=255), nullable=True),
|
||||||
sa.Column('end_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("bpmn_task_type", sa.String(length=255), nullable=True),
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("spiff_task_guid", sa.String(length=50), nullable=False),
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("timestamp", sa.DECIMAL(precision=17, scale=6), nullable=False),
|
||||||
sa.Column('status', sa.String(length=50), nullable=True),
|
sa.Column("message", sa.String(length=255), nullable=True),
|
||||||
sa.Column('bpmn_version_control_type', sa.String(length=50), nullable=True),
|
sa.Column("current_user_id", sa.Integer(), nullable=True),
|
||||||
sa.Column('bpmn_version_control_identifier', sa.String(length=255), nullable=True),
|
sa.Column("spiff_step", sa.Integer(), nullable=False),
|
||||||
sa.Column('spiff_step', sa.Integer(), nullable=True),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
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_table(
|
||||||
op.create_index(op.f('ix_process_instance_process_model_identifier'), 'process_instance', ['process_model_identifier'], unique=False)
|
"user",
|
||||||
op.create_table('process_instance_report',
|
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('identifier', sa.String(length=50), nullable=False),
|
sa.Column("uid", sa.String(length=50), nullable=True),
|
||||||
sa.Column('report_metadata', sa.JSON(), nullable=True),
|
sa.Column("service", sa.String(length=50), nullable=False),
|
||||||
sa.Column('created_by_id', sa.Integer(), nullable=False),
|
sa.Column("service_id", sa.String(length=255), nullable=False),
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("name", sa.String(length=255), nullable=True),
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("email", sa.String(length=255), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['created_by_id'], ['user.id'], ),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.UniqueConstraint("service", "service_id", name="service_key"),
|
||||||
sa.UniqueConstraint('created_by_id', 'identifier', name='process_instance_report_unique')
|
sa.UniqueConstraint("uid"),
|
||||||
|
sa.UniqueConstraint("username"),
|
||||||
)
|
)
|
||||||
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_correlation_property",
|
||||||
op.create_table('refresh_token',
|
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('user_id', sa.Integer(), nullable=False),
|
sa.Column("message_model_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('token', sa.String(length=1024), nullable=False),
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.ForeignKeyConstraint(
|
||||||
sa.UniqueConstraint('user_id')
|
["message_model_id"],
|
||||||
|
["message_model.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint(
|
||||||
|
"identifier", "message_model_id", name="message_correlation_property_unique"
|
||||||
|
),
|
||||||
)
|
)
|
||||||
op.create_table('secret',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_message_correlation_property_identifier"),
|
||||||
sa.Column('key', sa.String(length=50), nullable=False),
|
"message_correlation_property",
|
||||||
sa.Column('value', sa.Text(), nullable=False),
|
["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('spiff_step_details',
|
op.create_table(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
"message_triggerable_process_model",
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('spiff_step', sa.Integer(), nullable=False),
|
sa.Column("message_model_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('task_json', sa.JSON(), nullable=False),
|
sa.Column("process_model_identifier", sa.String(length=50), nullable=False),
|
||||||
sa.Column('timestamp', sa.DECIMAL(precision=17, scale=6), nullable=False),
|
sa.Column("process_group_identifier", sa.String(length=50), nullable=False),
|
||||||
sa.Column('completed_by_user_id', sa.Integer(), nullable=True),
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.Column('lane_assignment_id', sa.Integer(), nullable=True),
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['lane_assignment_id'], ['group.id'], ),
|
sa.ForeignKeyConstraint(
|
||||||
sa.PrimaryKeyConstraint('id')
|
["message_model_id"],
|
||||||
|
["message_model.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint("message_model_id"),
|
||||||
)
|
)
|
||||||
op.create_table('user_group_assignment',
|
op.create_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_message_triggerable_process_model_process_group_identifier"),
|
||||||
sa.Column('user_id', sa.Integer(), nullable=False),
|
"message_triggerable_process_model",
|
||||||
sa.Column('group_id', sa.Integer(), nullable=False),
|
["process_group_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_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_message_triggerable_process_model_process_model_identifier"),
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
"message_triggerable_process_model",
|
||||||
sa.Column('actual_owner_id', sa.Integer(), nullable=True),
|
["process_model_identifier"],
|
||||||
sa.Column('lane_assignment_id', sa.Integer(), nullable=True),
|
unique=False,
|
||||||
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',
|
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('message_correlation_property_id', sa.Integer(), nullable=False),
|
sa.Column("user_id", sa.Integer(), nullable=True),
|
||||||
sa.Column('name', sa.String(length=255), nullable=False),
|
sa.Column("group_id", sa.Integer(), nullable=True),
|
||||||
sa.Column('value', sa.String(length=255), nullable=False),
|
sa.CheckConstraint("NOT(user_id IS NULL AND group_id IS NULL)"),
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
sa.ForeignKeyConstraint(
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
["group_id"],
|
||||||
sa.ForeignKeyConstraint(['message_correlation_property_id'], ['message_correlation_property.id'], ),
|
["group.id"],
|
||||||
sa.ForeignKeyConstraint(['process_instance_id'], ['process_instance.id'], ),
|
),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.ForeignKeyConstraint(
|
||||||
sa.UniqueConstraint('process_instance_id', 'message_correlation_property_id', 'name', name='message_instance_id_name_unique')
|
["user_id"],
|
||||||
|
["user.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
sa.UniqueConstraint("group_id"),
|
||||||
|
sa.UniqueConstraint("user_id"),
|
||||||
)
|
)
|
||||||
op.create_index(op.f('ix_message_correlation_message_correlation_property_id'), 'message_correlation', ['message_correlation_property_id'], unique=False)
|
op.create_table(
|
||||||
op.create_index(op.f('ix_message_correlation_name'), 'message_correlation', ['name'], unique=False)
|
"process_instance",
|
||||||
op.create_index(op.f('ix_message_correlation_process_instance_id'), 'message_correlation', ['process_instance_id'], unique=False)
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
op.create_index(op.f('ix_message_correlation_value'), 'message_correlation', ['value'], unique=False)
|
sa.Column("process_model_identifier", sa.String(length=255), nullable=False),
|
||||||
op.create_table('message_instance',
|
sa.Column("process_group_identifier", sa.String(length=50), nullable=False),
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
sa.Column("process_initiator_id", sa.Integer(), nullable=False),
|
||||||
sa.Column('process_instance_id', sa.Integer(), nullable=False),
|
sa.Column("bpmn_json", sa.JSON(), nullable=True),
|
||||||
sa.Column('message_model_id', sa.Integer(), nullable=False),
|
sa.Column("start_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.Column('message_type', sa.String(length=20), nullable=False),
|
sa.Column("end_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.Column('payload', sa.JSON(), nullable=True),
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.Column('status', sa.String(length=20), nullable=False),
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.Column('failure_cause', sa.Text(), nullable=True),
|
sa.Column("status", sa.String(length=50), nullable=True),
|
||||||
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column("bpmn_version_control_type", sa.String(length=50), nullable=True),
|
||||||
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
|
sa.Column(
|
||||||
sa.ForeignKeyConstraint(['message_model_id'], ['message_model.id'], ),
|
"bpmn_version_control_identifier", sa.String(length=255), nullable=True
|
||||||
sa.ForeignKeyConstraint(['process_instance_id'], ['process_instance.id'], ),
|
),
|
||||||
sa.PrimaryKeyConstraint('id')
|
sa.Column("spiff_step", sa.Integer(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["process_initiator_id"],
|
||||||
|
["user.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_group_identifier"),
|
||||||
sa.Column('principal_id', sa.Integer(), nullable=False),
|
"process_instance",
|
||||||
sa.Column('permission_target_id', sa.Integer(), nullable=False),
|
["process_group_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_index(
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
op.f("ix_process_instance_process_model_identifier"),
|
||||||
sa.Column('active_task_id', sa.Integer(), nullable=False),
|
"process_instance",
|
||||||
sa.Column('user_id', sa.Integer(), nullable=False),
|
["process_model_identifier"],
|
||||||
sa.ForeignKeyConstraint(['active_task_id'], ['active_task.id'], ),
|
unique=False,
|
||||||
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_table(
|
||||||
op.create_index(op.f('ix_active_task_user_user_id'), 'active_task_user', ['user_id'], unique=False)
|
"process_instance_report",
|
||||||
op.create_table('message_correlation_message_instance',
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
sa.Column("identifier", sa.String(length=50), nullable=False),
|
||||||
sa.Column('message_instance_id', sa.Integer(), nullable=False),
|
sa.Column("report_metadata", sa.JSON(), nullable=True),
|
||||||
sa.Column('message_correlation_id', sa.Integer(), nullable=False),
|
sa.Column("created_by_id", sa.Integer(), nullable=False),
|
||||||
sa.ForeignKeyConstraint(['message_correlation_id'], ['message_correlation.id'], ),
|
sa.Column("created_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.ForeignKeyConstraint(['message_instance_id'], ['message_instance.id'], ),
|
sa.Column("updated_at_in_seconds", sa.Integer(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.ForeignKeyConstraint(
|
||||||
sa.UniqueConstraint('message_instance_id', 'message_correlation_id', name='message_correlation_message_instance_unique')
|
["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_index(
|
||||||
|
op.f("ix_process_instance_report_identifier"),
|
||||||
|
"process_instance_report",
|
||||||
|
["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(
|
||||||
|
"spiff_step_details",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
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.Column("lane_assignment_id", sa.Integer(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["lane_assignment_id"],
|
||||||
|
["group.id"],
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
)
|
||||||
|
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('spiff_step_details')
|
op.drop_table("message_instance")
|
||||||
op.drop_table('secret')
|
op.drop_index(
|
||||||
op.drop_table('refresh_token')
|
op.f("ix_message_correlation_value"), table_name="message_correlation"
|
||||||
op.drop_index(op.f('ix_process_instance_report_identifier'), table_name='process_instance_report')
|
)
|
||||||
op.drop_index(op.f('ix_process_instance_report_created_by_id'), table_name='process_instance_report')
|
op.drop_index(
|
||||||
op.drop_table('process_instance_report')
|
op.f("ix_message_correlation_process_instance_id"),
|
||||||
op.drop_index(op.f('ix_process_instance_process_model_identifier'), table_name='process_instance')
|
table_name="message_correlation",
|
||||||
op.drop_index(op.f('ix_process_instance_process_group_identifier'), table_name='process_instance')
|
)
|
||||||
op.drop_table('process_instance')
|
op.drop_index(op.f("ix_message_correlation_name"), table_name="message_correlation")
|
||||||
op.drop_table('principal')
|
op.drop_index(
|
||||||
op.drop_index(op.f('ix_message_triggerable_process_model_process_model_identifier'), table_name='message_triggerable_process_model')
|
op.f("ix_message_correlation_message_correlation_property_id"),
|
||||||
op.drop_index(op.f('ix_message_triggerable_process_model_process_group_identifier'), table_name='message_triggerable_process_model')
|
table_name="message_correlation",
|
||||||
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")
|
||||||
op.drop_table('message_correlation_property')
|
op.drop_table("active_task")
|
||||||
op.drop_table('user')
|
op.drop_table("user_group_assignment")
|
||||||
op.drop_table('spiff_logging')
|
op.drop_table("spiff_step_details")
|
||||||
op.drop_index(op.f('ix_spec_reference_cache_type'), table_name='spec_reference_cache')
|
op.drop_table("secret")
|
||||||
op.drop_index(op.f('ix_spec_reference_cache_identifier'), table_name='spec_reference_cache')
|
op.drop_table("refresh_token")
|
||||||
op.drop_index(op.f('ix_spec_reference_cache_display_name'), table_name='spec_reference_cache')
|
op.drop_index(
|
||||||
op.drop_table('spec_reference_cache')
|
op.f("ix_process_instance_report_identifier"),
|
||||||
op.drop_table('permission_target')
|
table_name="process_instance_report",
|
||||||
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_index(
|
||||||
op.drop_table('message_model')
|
op.f("ix_process_instance_report_created_by_id"),
|
||||||
op.drop_table('group')
|
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_logging")
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_spec_reference_cache_type"), table_name="spec_reference_cache"
|
||||||
|
)
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_spec_reference_cache_identifier"), table_name="spec_reference_cache"
|
||||||
|
)
|
||||||
|
op.drop_index(
|
||||||
|
op.f("ix_spec_reference_cache_display_name"), table_name="spec_reference_cache"
|
||||||
|
)
|
||||||
|
op.drop_table("spec_reference_cache")
|
||||||
|
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")
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
@ -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):
|
||||||
|
@ -375,8 +375,9 @@ paths:
|
|||||||
/processes:
|
/processes:
|
||||||
get:
|
get:
|
||||||
operationId: spiffworkflow_backend.routes.process_api_blueprint.process_list
|
operationId: spiffworkflow_backend.routes.process_api_blueprint.process_list
|
||||||
summary: Return a list of all processes (not just primary process of a process model)
|
summary:
|
||||||
useful for finding processes for call activites.
|
Return a list of all processes (not just primary process of a process model)
|
||||||
|
useful for finding processes for call activites.
|
||||||
tags:
|
tags:
|
||||||
- Process Models
|
- Process Models
|
||||||
responses:
|
responses:
|
||||||
|
@ -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
|
||||||
from spiffworkflow_backend.models.spec_reference import SpecReference
|
from spiffworkflow_backend.models.spec_reference import SpecReference
|
||||||
|
|
||||||
|
@ -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]
|
||||||
|
@ -10,7 +10,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()
|
||||||
|
@ -4,11 +4,10 @@ from typing import Optional
|
|||||||
|
|
||||||
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 sqlalchemy import ForeignKey
|
from sqlalchemy import ForeignKey
|
||||||
from sqlalchemy.orm import deferred
|
from sqlalchemy.orm import deferred
|
||||||
|
|
||||||
from spiffworkflow_backend.models.group import GroupModel
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class SpiffStepDetailsModel(SpiffworkflowBaseDBModel):
|
class SpiffStepDetailsModel(SpiffworkflowBaseDBModel):
|
||||||
|
@ -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"
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""APIs for dealing with process groups, process models, and process instances."""
|
"""APIs for dealing with process groups, process models, and process instances."""
|
||||||
import json
|
import json
|
||||||
import os
|
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
import uuid
|
import uuid
|
||||||
@ -28,10 +27,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 and_
|
|
||||||
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,
|
||||||
)
|
)
|
||||||
@ -87,6 +82,9 @@ 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 and_
|
||||||
|
from sqlalchemy import asc
|
||||||
|
from sqlalchemy import desc
|
||||||
|
|
||||||
|
|
||||||
class TaskDataSelectOption(TypedDict):
|
class TaskDataSelectOption(TypedDict):
|
||||||
@ -253,16 +251,11 @@ def process_model_create(
|
|||||||
status_code=400,
|
status_code=400,
|
||||||
)
|
)
|
||||||
|
|
||||||
modified_process_model_id = process_model_info.id
|
unmodified_process_group_id = un_modify_modified_process_model_id(
|
||||||
unmodified_process_model_id = un_modify_modified_process_model_id(
|
modified_process_group_id
|
||||||
modified_process_model_id
|
|
||||||
)
|
)
|
||||||
process_model_info.id = unmodified_process_model_id
|
|
||||||
process_group_id, _ = os.path.split(process_model_info.id)
|
|
||||||
process_model_service = ProcessModelService()
|
process_model_service = ProcessModelService()
|
||||||
process_group = process_model_service.get_process_group(
|
process_group = process_model_service.get_process_group(unmodified_process_group_id)
|
||||||
un_modify_modified_process_model_id(process_group_id)
|
|
||||||
)
|
|
||||||
if process_group is None:
|
if process_group is None:
|
||||||
raise ApiError(
|
raise ApiError(
|
||||||
error_code="process_model_could_not_be_created",
|
error_code="process_model_could_not_be_created",
|
||||||
@ -270,7 +263,7 @@ def process_model_create(
|
|||||||
status_code=400,
|
status_code=400,
|
||||||
)
|
)
|
||||||
|
|
||||||
process_model_service.add_spec(process_model_info)
|
process_model_service.add_process_model(process_model_info)
|
||||||
return Response(
|
return Response(
|
||||||
json.dumps(ProcessModelInfoSchema().dump(process_model_info)),
|
json.dumps(ProcessModelInfoSchema().dump(process_model_info)),
|
||||||
status=201,
|
status=201,
|
||||||
@ -307,7 +300,7 @@ def process_model_update(
|
|||||||
|
|
||||||
# process_model_identifier = f"{process_group_id}/{process_model_id}"
|
# process_model_identifier = f"{process_group_id}/{process_model_id}"
|
||||||
process_model = get_process_model(process_model_identifier)
|
process_model = get_process_model(process_model_identifier)
|
||||||
ProcessModelService().update_spec(process_model, body_filtered)
|
ProcessModelService().update_process_model(process_model, body_filtered)
|
||||||
return ProcessModelInfoSchema().dump(process_model)
|
return ProcessModelInfoSchema().dump(process_model)
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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,9 +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 or_
|
|
||||||
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
|
||||||
@ -28,6 +25,8 @@ 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 or_
|
||||||
|
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,7 +1,6 @@
|
|||||||
"""Data_setup_service."""
|
"""Data_setup_service."""
|
||||||
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 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
|
||||||
@ -20,8 +19,8 @@ class FileSystemService:
|
|||||||
""" Simple Service meant for extension that provides some useful
|
""" Simple Service meant for extension that provides some useful
|
||||||
methods for dealing with the File system.
|
methods for dealing with the File system.
|
||||||
"""
|
"""
|
||||||
CAT_JSON_FILE = "process_group.json"
|
PROCESS_GROUP_JSON_FILE = "process_group.json"
|
||||||
WF_JSON_FILE = "workflow.json"
|
PROCESS_MODEL_JSON_FILE = "process_model.json"
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def root_path() -> str:
|
def root_path() -> str:
|
||||||
@ -135,7 +134,7 @@ class FileSystemService:
|
|||||||
if item.is_file():
|
if item.is_file():
|
||||||
if item.name.startswith("."):
|
if item.name.startswith("."):
|
||||||
continue # Ignore hidden files
|
continue # Ignore hidden files
|
||||||
if item.name == FileSystemService.WF_JSON_FILE:
|
if item.name == FileSystemService.PROCESS_MODEL_JSON_FILE:
|
||||||
continue # Ignore the json files.
|
continue # Ignore the json files.
|
||||||
if file_name is not None and item.name != file_name:
|
if file_name is not None and item.name != file_name:
|
||||||
continue
|
continue
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
@ -236,5 +235,5 @@ class DBHandler(logging.Handler):
|
|||||||
"spiff_step": spiff_step,
|
"spiff_step": spiff_step,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
if len(self.logs) % 1000 == 0:
|
if len(self.logs) % 1 == 0:
|
||||||
self.bulk_insert_logs()
|
self.bulk_insert_logs()
|
||||||
|
@ -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):
|
||||||
|
@ -64,7 +64,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.file import File
|
from spiffworkflow_backend.models.file import File
|
||||||
|
@ -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.active_task import ActiveTaskModel
|
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
||||||
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
|
||||||
@ -320,7 +319,7 @@ class ProcessInstanceService:
|
|||||||
def serialize_flat_with_task_data(
|
def serialize_flat_with_task_data(
|
||||||
process_instance: ProcessInstanceModel,
|
process_instance: ProcessInstanceModel,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""serialize_flat_with_task_data."""
|
"""Serialize_flat_with_task_data."""
|
||||||
results = {}
|
results = {}
|
||||||
try:
|
try:
|
||||||
original_status = process_instance.status
|
original_status = process_instance.status
|
||||||
|
@ -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,
|
||||||
)
|
)
|
||||||
@ -32,22 +31,30 @@ class ProcessModelService(FileSystemService):
|
|||||||
the workflow process_models at once, or manage those file in a git repository. """
|
the workflow process_models at once, or manage those file in a git repository. """
|
||||||
|
|
||||||
GROUP_SCHEMA = ProcessGroupSchema()
|
GROUP_SCHEMA = ProcessGroupSchema()
|
||||||
WF_SCHEMA = ProcessModelInfoSchema()
|
PROCESS_MODEL_SCHEMA = ProcessModelInfoSchema()
|
||||||
|
|
||||||
def is_group(self, path: str) -> bool:
|
def is_group(self, path: str) -> bool:
|
||||||
"""Is_group."""
|
"""Is_group."""
|
||||||
group_json_path = os.path.join(path, self.CAT_JSON_FILE)
|
group_json_path = os.path.join(path, self.PROCESS_GROUP_JSON_FILE)
|
||||||
if os.path.exists(group_json_path):
|
if os.path.exists(group_json_path):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def is_model(self, path: str) -> bool:
|
def is_model(self, path: str) -> bool:
|
||||||
"""Is_model."""
|
"""Is_model."""
|
||||||
model_json_path = os.path.join(path, self.WF_JSON_FILE)
|
model_json_path = os.path.join(path, self.PROCESS_MODEL_JSON_FILE)
|
||||||
if os.path.exists(model_json_path):
|
if os.path.exists(model_json_path):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def write_json_file(
|
||||||
|
file_path: str, json_data: dict, indent: int = 4, sort_keys: bool = True
|
||||||
|
) -> None:
|
||||||
|
"""Write json file."""
|
||||||
|
with open(file_path, "w") as h_open:
|
||||||
|
json.dump(json_data, h_open, indent=indent, sort_keys=sort_keys)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_batch(
|
def get_batch(
|
||||||
items: list[T],
|
items: list[T],
|
||||||
@ -59,13 +66,13 @@ class ProcessModelService(FileSystemService):
|
|||||||
end = start + per_page
|
end = start + per_page
|
||||||
return items[start:end]
|
return items[start:end]
|
||||||
|
|
||||||
def add_spec(self, process_model: ProcessModelInfo) -> None:
|
def add_process_model(self, process_model: ProcessModelInfo) -> None:
|
||||||
"""Add_spec."""
|
"""Add_spec."""
|
||||||
display_order = self.next_display_order(process_model)
|
display_order = self.next_display_order(process_model)
|
||||||
process_model.display_order = display_order
|
process_model.display_order = display_order
|
||||||
self.save_process_model(process_model)
|
self.save_process_model(process_model)
|
||||||
|
|
||||||
def update_spec(
|
def update_process_model(
|
||||||
self, process_model: ProcessModelInfo, attributes_to_update: dict
|
self, process_model: ProcessModelInfo, attributes_to_update: dict
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Update_spec."""
|
"""Update_spec."""
|
||||||
@ -76,13 +83,21 @@ class ProcessModelService(FileSystemService):
|
|||||||
|
|
||||||
def save_process_model(self, process_model: ProcessModelInfo) -> None:
|
def save_process_model(self, process_model: ProcessModelInfo) -> None:
|
||||||
"""Save_process_model."""
|
"""Save_process_model."""
|
||||||
spec_path = os.path.join(FileSystemService.root_path(), process_model.id)
|
process_model_path = os.path.abspath(
|
||||||
os.makedirs(spec_path, exist_ok=True)
|
os.path.join(FileSystemService.root_path(), process_model.id)
|
||||||
json_path = os.path.join(spec_path, self.WF_JSON_FILE)
|
)
|
||||||
with open(json_path, "w") as wf_json:
|
os.makedirs(process_model_path, exist_ok=True)
|
||||||
json.dump(
|
json_path = os.path.abspath(
|
||||||
self.WF_SCHEMA.dump(process_model), wf_json, indent=4, sort_keys=True
|
os.path.join(process_model_path, self.PROCESS_MODEL_JSON_FILE)
|
||||||
)
|
)
|
||||||
|
process_model_id = process_model.id
|
||||||
|
# we don't save id in the json file
|
||||||
|
# this allows us to move models around on the filesystem
|
||||||
|
# the id is determined by its location on the filesystem
|
||||||
|
delattr(process_model, "id")
|
||||||
|
json_data = self.PROCESS_MODEL_SCHEMA.dump(process_model)
|
||||||
|
self.write_json_file(json_path, json_data)
|
||||||
|
process_model.id = process_model_id
|
||||||
|
|
||||||
def process_model_delete(self, process_model_id: str) -> None:
|
def process_model_delete(self, process_model_id: str) -> None:
|
||||||
"""Delete Procecss Model."""
|
"""Delete Procecss Model."""
|
||||||
@ -107,7 +122,7 @@ class ProcessModelService(FileSystemService):
|
|||||||
process_group_identifier, _ = os.path.split(relative_path)
|
process_group_identifier, _ = os.path.split(relative_path)
|
||||||
process_group = cls().get_process_group(process_group_identifier)
|
process_group = cls().get_process_group(process_group_identifier)
|
||||||
path = os.path.join(FileSystemService.root_path(), relative_path)
|
path = os.path.join(FileSystemService.root_path(), relative_path)
|
||||||
return cls().__scan_spec(path, process_group=process_group)
|
return cls().__scan_process_model(path, process_group=process_group)
|
||||||
|
|
||||||
def get_process_model(self, process_model_id: str) -> ProcessModelInfo:
|
def get_process_model(self, process_model_id: str) -> ProcessModelInfo:
|
||||||
"""Get a process model from a model and group id.
|
"""Get a process model from a model and group id.
|
||||||
@ -117,7 +132,9 @@ class ProcessModelService(FileSystemService):
|
|||||||
if not os.path.exists(FileSystemService.root_path()):
|
if not os.path.exists(FileSystemService.root_path()):
|
||||||
raise ProcessEntityNotFoundError("process_model_root_not_found")
|
raise ProcessEntityNotFoundError("process_model_root_not_found")
|
||||||
|
|
||||||
model_path = os.path.join(FileSystemService.root_path(), process_model_id)
|
model_path = os.path.abspath(
|
||||||
|
os.path.join(FileSystemService.root_path(), process_model_id)
|
||||||
|
)
|
||||||
if self.is_model(model_path):
|
if self.is_model(model_path):
|
||||||
process_model = self.get_process_model_from_relative_path(process_model_id)
|
process_model = self.get_process_model_from_relative_path(process_model_id)
|
||||||
return process_model
|
return process_model
|
||||||
@ -140,7 +157,7 @@ class ProcessModelService(FileSystemService):
|
|||||||
# process_group = self.__scan_process_group(
|
# process_group = self.__scan_process_group(
|
||||||
# process_group_dir
|
# process_group_dir
|
||||||
# )
|
# )
|
||||||
# return self.__scan_spec(sd.path, sd.name, process_group)
|
# return self.__scan_process_model(sd.path, sd.name, process_group)
|
||||||
raise ProcessEntityNotFoundError("process_model_not_found")
|
raise ProcessEntityNotFoundError("process_model_not_found")
|
||||||
|
|
||||||
def get_process_models(
|
def get_process_models(
|
||||||
@ -172,8 +189,8 @@ class ProcessModelService(FileSystemService):
|
|||||||
def get_process_group(self, process_group_id: str) -> ProcessGroup:
|
def get_process_group(self, process_group_id: str) -> ProcessGroup:
|
||||||
"""Look for a given process_group, and return it."""
|
"""Look for a given process_group, and return it."""
|
||||||
if os.path.exists(FileSystemService.root_path()):
|
if os.path.exists(FileSystemService.root_path()):
|
||||||
process_group_path = os.path.join(
|
process_group_path = os.path.abspath(
|
||||||
FileSystemService.root_path(), process_group_id
|
os.path.join(FileSystemService.root_path(), process_group_id)
|
||||||
)
|
)
|
||||||
if self.is_group(process_group_path):
|
if self.is_group(process_group_path):
|
||||||
return self.__scan_process_group(process_group_path)
|
return self.__scan_process_group(process_group_path)
|
||||||
@ -205,14 +222,12 @@ class ProcessModelService(FileSystemService):
|
|||||||
"""Update_process_group."""
|
"""Update_process_group."""
|
||||||
cat_path = self.process_group_path(process_group.id)
|
cat_path = self.process_group_path(process_group.id)
|
||||||
os.makedirs(cat_path, exist_ok=True)
|
os.makedirs(cat_path, exist_ok=True)
|
||||||
json_path = os.path.join(cat_path, self.CAT_JSON_FILE)
|
json_path = os.path.join(cat_path, self.PROCESS_GROUP_JSON_FILE)
|
||||||
with open(json_path, "w") as cat_json:
|
serialized_process_group = process_group.serialized
|
||||||
json.dump(
|
# we don't store `id` in the json files
|
||||||
process_group.serialized,
|
# this allows us to move groups around on the filesystem
|
||||||
cat_json,
|
del serialized_process_group["id"]
|
||||||
indent=4,
|
self.write_json_file(json_path, serialized_process_group)
|
||||||
sort_keys=True,
|
|
||||||
)
|
|
||||||
return process_group
|
return process_group
|
||||||
|
|
||||||
def __get_all_nested_models(self, group_path: str) -> list:
|
def __get_all_nested_models(self, group_path: str) -> list:
|
||||||
@ -279,10 +294,13 @@ class ProcessModelService(FileSystemService):
|
|||||||
|
|
||||||
def __scan_process_group(self, dir_path: str) -> ProcessGroup:
|
def __scan_process_group(self, dir_path: str) -> ProcessGroup:
|
||||||
"""Reads the process_group.json file, and any nested directories."""
|
"""Reads the process_group.json file, and any nested directories."""
|
||||||
cat_path = os.path.join(dir_path, self.CAT_JSON_FILE)
|
cat_path = os.path.join(dir_path, self.PROCESS_GROUP_JSON_FILE)
|
||||||
if os.path.exists(cat_path):
|
if os.path.exists(cat_path):
|
||||||
with open(cat_path) as cat_json:
|
with open(cat_path) as cat_json:
|
||||||
data = json.load(cat_json)
|
data = json.load(cat_json)
|
||||||
|
# we don't store `id` in the json files, so we add it back in here
|
||||||
|
relative_path = os.path.relpath(dir_path, FileSystemService.root_path())
|
||||||
|
data["id"] = relative_path
|
||||||
process_group = ProcessGroup(**data)
|
process_group = ProcessGroup(**data)
|
||||||
if process_group is None:
|
if process_group is None:
|
||||||
raise ApiError(
|
raise ApiError(
|
||||||
@ -292,13 +310,14 @@ class ProcessModelService(FileSystemService):
|
|||||||
else:
|
else:
|
||||||
process_group_id = dir_path.replace(FileSystemService.root_path(), "")
|
process_group_id = dir_path.replace(FileSystemService.root_path(), "")
|
||||||
process_group = ProcessGroup(
|
process_group = ProcessGroup(
|
||||||
id=process_group_id,
|
id="",
|
||||||
display_name=process_group_id,
|
display_name=process_group_id,
|
||||||
display_order=10000,
|
display_order=10000,
|
||||||
admin=False,
|
admin=False,
|
||||||
)
|
)
|
||||||
with open(cat_path, "w") as wf_json:
|
self.write_json_file(cat_path, self.GROUP_SCHEMA.dump(process_group))
|
||||||
json.dump(self.GROUP_SCHEMA.dump(process_group), wf_json, indent=4)
|
# we don't store `id` in the json files, so we add it in here
|
||||||
|
process_group.id = process_group_id
|
||||||
with os.scandir(dir_path) as nested_items:
|
with os.scandir(dir_path) as nested_items:
|
||||||
process_group.process_models = []
|
process_group.process_models = []
|
||||||
process_group.process_groups = []
|
process_group.process_groups = []
|
||||||
@ -312,7 +331,7 @@ class ProcessModelService(FileSystemService):
|
|||||||
)
|
)
|
||||||
elif self.is_model(nested_item.path):
|
elif self.is_model(nested_item.path):
|
||||||
process_group.process_models.append(
|
process_group.process_models.append(
|
||||||
self.__scan_spec(
|
self.__scan_process_model(
|
||||||
nested_item.path,
|
nested_item.path,
|
||||||
nested_item.name,
|
nested_item.name,
|
||||||
process_group=process_group,
|
process_group=process_group,
|
||||||
@ -322,22 +341,25 @@ class ProcessModelService(FileSystemService):
|
|||||||
# process_group.process_groups.sort()
|
# process_group.process_groups.sort()
|
||||||
return process_group
|
return process_group
|
||||||
|
|
||||||
def __scan_spec(
|
def __scan_process_model(
|
||||||
self,
|
self,
|
||||||
path: str,
|
path: str,
|
||||||
name: Optional[str] = None,
|
name: Optional[str] = None,
|
||||||
process_group: Optional[ProcessGroup] = None,
|
process_group: Optional[ProcessGroup] = None,
|
||||||
) -> ProcessModelInfo:
|
) -> ProcessModelInfo:
|
||||||
"""__scan_spec."""
|
"""__scan_process_model."""
|
||||||
spec_path = os.path.join(path, self.WF_JSON_FILE)
|
json_file_path = os.path.join(path, self.PROCESS_MODEL_JSON_FILE)
|
||||||
|
|
||||||
if os.path.exists(spec_path):
|
if os.path.exists(json_file_path):
|
||||||
with open(spec_path) as wf_json:
|
with open(json_file_path) as wf_json:
|
||||||
data = json.load(wf_json)
|
data = json.load(wf_json)
|
||||||
if "process_group_id" in data:
|
if "process_group_id" in data:
|
||||||
data.pop("process_group_id")
|
data.pop("process_group_id")
|
||||||
spec = ProcessModelInfo(**data)
|
# we don't save `id` in the json file, so we add it back in here.
|
||||||
if spec is None:
|
relative_path = os.path.relpath(path, FileSystemService.root_path())
|
||||||
|
data["id"] = relative_path
|
||||||
|
process_model_info = ProcessModelInfo(**data)
|
||||||
|
if process_model_info is None:
|
||||||
raise ApiError(
|
raise ApiError(
|
||||||
error_code="process_model_could_not_be_loaded_from_disk",
|
error_code="process_model_could_not_be_loaded_from_disk",
|
||||||
message=f"We could not load the process_model from disk with data: {data}",
|
message=f"We could not load the process_model from disk with data: {data}",
|
||||||
@ -349,15 +371,18 @@ class ProcessModelService(FileSystemService):
|
|||||||
message="Missing name of process model. It should be given",
|
message="Missing name of process model. It should be given",
|
||||||
)
|
)
|
||||||
|
|
||||||
spec = ProcessModelInfo(
|
process_model_info = ProcessModelInfo(
|
||||||
id=name,
|
id="",
|
||||||
display_name=name,
|
display_name=name,
|
||||||
description="",
|
description="",
|
||||||
display_order=0,
|
display_order=0,
|
||||||
is_review=False,
|
is_review=False,
|
||||||
)
|
)
|
||||||
with open(spec_path, "w") as wf_json:
|
self.write_json_file(
|
||||||
json.dump(self.WF_SCHEMA.dump(spec), wf_json, indent=4)
|
json_file_path, self.PROCESS_MODEL_SCHEMA.dump(process_model_info)
|
||||||
|
)
|
||||||
|
# we don't store `id` in the json files, so we add it in here
|
||||||
|
process_model_info.id = name
|
||||||
if process_group:
|
if process_group:
|
||||||
spec.process_group = process_group.id
|
process_model_info.process_group = process_group.id
|
||||||
return spec
|
return process_model_info
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ from typing import Optional
|
|||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException # type: ignore
|
from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException # type: ignore
|
||||||
|
|
||||||
from spiffworkflow_backend.models.file import File
|
from spiffworkflow_backend.models.file import File
|
||||||
from spiffworkflow_backend.models.file import FileType
|
from spiffworkflow_backend.models.file import FileType
|
||||||
from spiffworkflow_backend.models.file import SpecReference
|
from spiffworkflow_backend.models.file import SpecReference
|
||||||
@ -171,7 +170,7 @@ class SpecFileService(FileSystemService):
|
|||||||
ref.is_primary = True
|
ref.is_primary = True
|
||||||
|
|
||||||
if ref.is_primary:
|
if ref.is_primary:
|
||||||
ProcessModelService().update_spec(
|
ProcessModelService().update_process_model(
|
||||||
process_model_info,
|
process_model_info,
|
||||||
{
|
{
|
||||||
"primary_process_id": ref.identifier,
|
"primary_process_id": ref.identifier,
|
||||||
@ -197,7 +196,9 @@ class SpecFileService(FileSystemService):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def full_file_path(spec: ProcessModelInfo, file_name: str) -> str:
|
def full_file_path(spec: ProcessModelInfo, file_name: str) -> str:
|
||||||
"""File_path."""
|
"""File_path."""
|
||||||
return os.path.join(SpecFileService.workflow_path(spec), file_name)
|
return os.path.abspath(
|
||||||
|
os.path.join(SpecFileService.workflow_path(spec), file_name)
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def last_modified(spec: ProcessModelInfo, file_name: str) -> datetime:
|
def last_modified(spec: ProcessModelInfo, file_name: str) -> datetime:
|
||||||
|
@ -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
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
"title": "Simple form",
|
"title": "Simple form",
|
||||||
"description": "A simple form example.",
|
"description": "A simple form example.",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": ["name"],
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"properties": {
|
"properties": {
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -14,11 +12,7 @@
|
|||||||
"department": {
|
"department": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"title": "Department",
|
"title": "Department",
|
||||||
"enum": [
|
"enum": ["Finance", "HR", "IT"]
|
||||||
"Finance",
|
|
||||||
"HR",
|
|
||||||
"IT"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": {
|
"name": {
|
||||||
"ui:title": "Name",
|
"ui:title": "Name",
|
||||||
"ui:description": "(Your name)"
|
"ui:description": "(Your name)"
|
||||||
},
|
},
|
||||||
"department": {
|
"department": {
|
||||||
"ui:title": "Department",
|
"ui:title": "Department",
|
||||||
"ui:description": "(Your department)"
|
"ui:description": "(Your department)"
|
||||||
},
|
},
|
||||||
|
@ -11,9 +11,6 @@ from flask import current_app
|
|||||||
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
|
||||||
@ -27,6 +24,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
|
||||||
|
|
||||||
@ -137,7 +136,9 @@ class BaseTest:
|
|||||||
# make sure we have a group
|
# make sure we have a group
|
||||||
process_group_id, _ = os.path.split(process_model_id)
|
process_group_id, _ = os.path.split(process_model_id)
|
||||||
modified_process_group_id = process_group_id.replace("/", ":")
|
modified_process_group_id = process_group_id.replace("/", ":")
|
||||||
process_group_path = f"{FileSystemService.root_path()}/{process_group_id}"
|
process_group_path = os.path.abspath(
|
||||||
|
os.path.join(FileSystemService.root_path(), process_group_id)
|
||||||
|
)
|
||||||
if ProcessModelService().is_group(process_group_path):
|
if ProcessModelService().is_group(process_group_path):
|
||||||
|
|
||||||
if exception_notification_addresses is None:
|
if exception_notification_addresses is None:
|
||||||
|
@ -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
|
||||||
@ -39,7 +38,7 @@ class ExampleDataLoader:
|
|||||||
is_review=False,
|
is_review=False,
|
||||||
)
|
)
|
||||||
workflow_spec_service = ProcessModelService()
|
workflow_spec_service = ProcessModelService()
|
||||||
workflow_spec_service.add_spec(spec)
|
workflow_spec_service.add_process_model(spec)
|
||||||
|
|
||||||
bpmn_file_name_with_extension = bpmn_file_name
|
bpmn_file_name_with_extension = bpmn_file_name
|
||||||
if not bpmn_file_name_with_extension:
|
if not bpmn_file_name_with_extension:
|
||||||
|
@ -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):
|
||||||
|
@ -3,8 +3,6 @@ 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
|
||||||
@ -13,6 +11,7 @@ from spiffworkflow_backend.models.user import UserModel
|
|||||||
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 TestNestedGroups(BaseTest):
|
class TestNestedGroups(BaseTest):
|
||||||
|
@ -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,
|
||||||
)
|
)
|
||||||
@ -36,6 +33,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
|
||||||
|
|
||||||
@ -1830,7 +1829,7 @@ class TestProcessApi(BaseTest):
|
|||||||
process_model = ProcessModelService().get_process_model(
|
process_model = ProcessModelService().get_process_model(
|
||||||
process_model_identifier
|
process_model_identifier
|
||||||
)
|
)
|
||||||
ProcessModelService().update_spec(
|
ProcessModelService().update_process_model(
|
||||||
process_model,
|
process_model,
|
||||||
{"fault_or_suspend_on_exception": NotificationType.suspend.value},
|
{"fault_or_suspend_on_exception": NotificationType.suspend.value},
|
||||||
)
|
)
|
||||||
@ -1885,7 +1884,7 @@ class TestProcessApi(BaseTest):
|
|||||||
process_model = ProcessModelService().get_process_model(
|
process_model = ProcessModelService().get_process_model(
|
||||||
process_model_identifier
|
process_model_identifier
|
||||||
)
|
)
|
||||||
ProcessModelService().update_spec(
|
ProcessModelService().update_process_model(
|
||||||
process_model,
|
process_model,
|
||||||
{"exception_notification_addresses": ["with_super_admin_user@example.com"]},
|
{"exception_notification_addresses": ["with_super_admin_user@example.com"]},
|
||||||
)
|
)
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
@ -3,8 +3,6 @@ from typing import Optional
|
|||||||
|
|
||||||
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.process_instance_report import (
|
from spiffworkflow_backend.models.process_instance_report import (
|
||||||
ProcessInstanceReportModel,
|
ProcessInstanceReportModel,
|
||||||
)
|
)
|
||||||
@ -15,6 +13,7 @@ from spiffworkflow_backend.services.process_instance_report_service import (
|
|||||||
from spiffworkflow_backend.services.process_instance_report_service import (
|
from spiffworkflow_backend.services.process_instance_report_service import (
|
||||||
ProcessInstanceReportService,
|
ProcessInstanceReportService,
|
||||||
)
|
)
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
|
||||||
|
|
||||||
class TestProcessInstanceReportFilter(BaseTest):
|
class TestProcessInstanceReportFilter(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.process_model import ProcessModelInfo
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||||
from spiffworkflow_backend.models.spec_reference import SpecReferenceCache
|
from spiffworkflow_backend.models.spec_reference import SpecReferenceCache
|
||||||
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):
|
||||||
@ -32,7 +31,9 @@ class TestProcessModelService(BaseTest):
|
|||||||
primary_process_id = process_model.primary_process_id
|
primary_process_id = process_model.primary_process_id
|
||||||
assert primary_process_id == "Process_HelloWorld"
|
assert primary_process_id == "Process_HelloWorld"
|
||||||
|
|
||||||
ProcessModelService().update_spec(process_model, {"display_name": "new_name"})
|
ProcessModelService().update_process_model(
|
||||||
|
process_model, {"display_name": "new_name"}
|
||||||
|
)
|
||||||
|
|
||||||
assert process_model.display_name == "new_name"
|
assert process_model.display_name == "new_name"
|
||||||
assert process_model.primary_process_id == primary_process_id
|
assert process_model.primary_process_id == primary_process_id
|
||||||
|
@ -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):
|
||||||
|
@ -6,13 +6,12 @@ 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 SpiffWorkflow.bpmn.parser.ValidationException import ValidationException # type: ignore
|
from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException # 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.spec_reference import SpecReferenceCache
|
from spiffworkflow_backend.models.spec_reference import SpecReferenceCache
|
||||||
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):
|
||||||
|
@ -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):
|
||||||
|
@ -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__
|
||||||
|
|
||||||
|
|
||||||
|
@ -837,11 +837,7 @@ export default function ProcessModelEditDiagram() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// if a file name is not given then this is a new model and the ReactDiagramEditor component will handle it
|
// if a file name is not given then this is a new model and the ReactDiagramEditor component will handle it
|
||||||
if (
|
if ((bpmnXmlForDiagramRendering || !params.file_name) && processModel) {
|
||||||
(bpmnXmlForDiagramRendering || !params.file_name) &&
|
|
||||||
processModel &&
|
|
||||||
processes.length > 0
|
|
||||||
) {
|
|
||||||
const processModelFileName = processModelFile ? processModelFile.name : '';
|
const processModelFileName = processModelFile ? processModelFile.name : '';
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user