diff --git a/spiffworkflow-backend/bin/python_comment_cleanup.sh b/spiffworkflow-backend/bin/python_comment_cleanup.sh new file mode 100755 index 000000000..94a0f694f --- /dev/null +++ b/spiffworkflow-backend/bin/python_comment_cleanup.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +function error_handler() { + >&2 echo "Exited with BAD EXIT CODE '${2}' in ${0} script at line: ${1}." + exit "$2" +} +trap 'error_handler ${LINENO} $?' ERR +set -o errtrace -o errexit -o nounset -o pipefail + +# Function to check if a string matches the file name pattern +matches_filename_pattern() { + local file_name="$1" + local comment_line="$2" + + # Remove file extension and capitalize the first letter + local expected_comment=$(basename "$file_name" .py) + + expected_comment_with_first_letter_capitalized="${expected_comment^}" + + if grep -Eq "\"\"\"${expected_comment}\.\"\"\"" <<< "$comment_line"; then + return 0 + else + if grep -Eq "\"\"\"${expected_comment_with_first_letter_capitalized}\.\"\"\"" <<< "$comment_line"; then + return 0 + else + return 1 + fi + fi +} + +# Process each Python file in the "src" and "tests" directories +for file in $(find src tests -type f -name '*.py'); do + # Read the first line of the file + read -r first_line < "$file" + + # Check if the first line matches the expected comment pattern + if matches_filename_pattern "$file" "$first_line"; then + # Remove the comment from the file + hot_sed -i '1d' "$file" + fi +done diff --git a/spiffworkflow-backend/migrations/versions/e4b6bbf83a3e_.py b/spiffworkflow-backend/migrations/versions/e4b6bbf83a3e_.py new file mode 100644 index 000000000..82cb312d9 --- /dev/null +++ b/spiffworkflow-backend/migrations/versions/e4b6bbf83a3e_.py @@ -0,0 +1,42 @@ +"""empty message + +Revision ID: e4b6bbf83a3e +Revises: 6aa02463da9c +Create Date: 2023-05-30 10:17:10.595965 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = 'e4b6bbf83a3e' +down_revision = '6aa02463da9c' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('process_model_cycle', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('process_model_identifier', sa.String(length=255), nullable=False), + sa.Column('cycle_count', sa.Integer(), nullable=True), + sa.Column('duration_in_seconds', sa.Integer(), nullable=True), + sa.Column('current_cycle', sa.Integer(), nullable=True), + sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True), + sa.Column('created_at_in_seconds', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + with op.batch_alter_table('process_model_cycle', schema=None) as batch_op: + batch_op.create_index(batch_op.f('ix_process_model_cycle_process_model_identifier'), ['process_model_identifier'], unique=False) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('process_model_cycle', schema=None) as batch_op: + batch_op.drop_index(batch_op.f('ix_process_model_cycle_process_model_identifier')) + + op.drop_table('process_model_cycle') + # ### end Alembic commands ### diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py b/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py index e0d7cacf6..5ea32a4e3 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py @@ -1,4 +1,3 @@ -"""__init__.""" import base64 import faulthandler import json diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/config/default.py b/spiffworkflow-backend/src/spiffworkflow_backend/config/default.py index 59bb742d3..cc44f62b5 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/config/default.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/config/default.py @@ -1,4 +1,3 @@ -"""Default.""" import re from os import environ diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/helpers/api_version.py b/spiffworkflow-backend/src/spiffworkflow_backend/helpers/api_version.py index 607b6c16b..5935aa878 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/helpers/api_version.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/helpers/api_version.py @@ -1,2 +1 @@ -"""Api_version.""" V1_API_PATH_PREFIX = "/v1.0" diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/helpers/db_helper.py b/spiffworkflow-backend/src/spiffworkflow_backend/helpers/db_helper.py index ac21ebab2..db556cb00 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/helpers/db_helper.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/helpers/db_helper.py @@ -1,4 +1,3 @@ -"""Db_helper.""" import time import sqlalchemy diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/interfaces.py b/spiffworkflow-backend/src/spiffworkflow_backend/interfaces.py index 6f0d5c566..6bfc5e06c 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/interfaces.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/interfaces.py @@ -1,4 +1,3 @@ -"""Interfaces.""" from typing import TYPE_CHECKING from typing import NewType from typing import TypedDict diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/load_database_models.py b/spiffworkflow-backend/src/spiffworkflow_backend/load_database_models.py index ed5427615..22e570e11 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/load_database_models.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/load_database_models.py @@ -76,5 +76,8 @@ from spiffworkflow_backend.models.process_instance_queue import ( from spiffworkflow_backend.models.active_user import ( ActiveUserModel, ) # noqa: F401 +from spiffworkflow_backend.models.process_model_cycle import ( + ProcessModelCycleModel, +) # noqa: F401 add_listeners() diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/__init__.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/__init__.py index f520b09de..e69de29bb 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/__init__.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/__init__.py @@ -1 +0,0 @@ -"""__init__.""" diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/db.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/db.py index a91ab83ec..67a2df80c 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/db.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/db.py @@ -1,4 +1,3 @@ -"""Db.""" from __future__ import annotations import enum diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/group.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/group.py index 79f6934e8..1fd41580e 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/group.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/group.py @@ -1,4 +1,3 @@ -"""Group.""" from __future__ import annotations from typing import TYPE_CHECKING diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/human_task.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/human_task.py index 71dc778f9..a7e70b715 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/human_task.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/human_task.py @@ -1,4 +1,3 @@ -"""Human_task.""" from __future__ import annotations from dataclasses import dataclass diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/human_task_user.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/human_task_user.py index 83ac34c6f..58acffe30 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/human_task_user.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/human_task_user.py @@ -1,4 +1,3 @@ -"""Human_task_user.""" from __future__ import annotations from dataclasses import dataclass diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/message_instance.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/message_instance.py index 5eef83246..203c02e6e 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/message_instance.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/message_instance.py @@ -1,4 +1,3 @@ -"""Message_instance.""" import enum from dataclasses import dataclass from typing import TYPE_CHECKING diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/principal.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/principal.py index 87801289c..82dd14573 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/principal.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/principal.py @@ -1,4 +1,3 @@ -"""Principal.""" from dataclasses import dataclass from sqlalchemy import ForeignKey diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_group.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_group.py index d3748e584..fa0aa3e73 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_group.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_group.py @@ -1,4 +1,3 @@ -"""Process_group.""" from __future__ import annotations import dataclasses diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py index 50dc2f1bc..782db23cb 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py @@ -1,4 +1,3 @@ -"""Process_instance.""" from __future__ import annotations from typing import Any diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance_file_data.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance_file_data.py index 90c072e85..e2d0fcb42 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance_file_data.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance_file_data.py @@ -1,4 +1,3 @@ -"""Process_instance_file_data.""" from dataclasses import dataclass from sqlalchemy import ForeignKey diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance_queue.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance_queue.py index d37ce9a63..11b41293c 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance_queue.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance_queue.py @@ -1,4 +1,3 @@ -"""Process_instance_queue.""" from dataclasses import dataclass from sqlalchemy import ForeignKey diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_model.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_model.py index a5a6a9240..f0ce47cd5 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_model.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_model.py @@ -1,4 +1,3 @@ -"""Process_model.""" from __future__ import annotations import enum diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_model_cycle.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_model_cycle.py new file mode 100644 index 000000000..bc745590d --- /dev/null +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_model_cycle.py @@ -0,0 +1,19 @@ +from dataclasses import dataclass + +from spiffworkflow_backend.models.db import SpiffworkflowBaseDBModel +from spiffworkflow_backend.models.db import db + + +@dataclass +class ProcessModelCycleModel(SpiffworkflowBaseDBModel): + """ProcessInstanceQueueModel.""" + + __tablename__ = "process_model_cycle" + + id: int = db.Column(db.Integer, primary_key=True) + process_model_identifier: str = db.Column(db.String(255), nullable=False, index=True) + cycle_count: int = db.Column(db.Integer) + duration_in_seconds: int = db.Column(db.Integer) + current_cycle: int = db.Column(db.Integer) + updated_at_in_seconds: int = db.Column(db.Integer) + created_at_in_seconds: int = db.Column(db.Integer) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/refresh_token.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/refresh_token.py index 326ecabdb..b2ac40aa8 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/refresh_token.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/refresh_token.py @@ -1,4 +1,3 @@ -"""Refresh_token.""" from dataclasses import dataclass from sqlalchemy import ForeignKey diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/secret_model.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/secret_model.py index e5b55c4b4..8170c1471 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/secret_model.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/secret_model.py @@ -1,4 +1,3 @@ -"""Secret_model.""" from dataclasses import dataclass from typing import Any diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py index 23a3b7292..618c677f3 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py @@ -1,4 +1,3 @@ -"""Task.""" import enum from dataclasses import dataclass from typing import TYPE_CHECKING diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/user.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/user.py index 7474993e6..a3ed42002 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/user.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/user.py @@ -1,4 +1,3 @@ -"""User.""" from __future__ import annotations from dataclasses import dataclass diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/__init__.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/__init__.py index f520b09de..e69de29bb 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/__init__.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/__init__.py @@ -1 +0,0 @@ -"""__init__.""" diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/openid_blueprint/__init__.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/openid_blueprint/__init__.py index f520b09de..e69de29bb 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/openid_blueprint/__init__.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/openid_blueprint/__init__.py @@ -1 +0,0 @@ -"""__init__.""" diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/user.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/user.py index 521f92af8..3e451882c 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/user.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/user.py @@ -1,4 +1,3 @@ -"""User.""" import ast import base64 import json diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/users_controller.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/users_controller.py index b772aa334..d0592931a 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/users_controller.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/users_controller.py @@ -1,4 +1,3 @@ -"""Users_controller.""" from typing import Any import flask diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/delete_process_instances_with_criteria.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/delete_process_instances_with_criteria.py index 823d67c34..83cb46973 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/delete_process_instances_with_criteria.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/delete_process_instances_with_criteria.py @@ -1,4 +1,3 @@ -"""Delete_process_instances_with_criteria.""" from time import time from typing import Any diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/fact_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/fact_service.py index 3bf8c1d5a..022779837 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/fact_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/fact_service.py @@ -1,4 +1,3 @@ -"""Fact_service.""" from typing import Any from spiffworkflow_backend.models.script_attributes_context import ScriptAttributesContext diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_data_sizes.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_data_sizes.py index 7199613a6..c21f7961d 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_data_sizes.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_data_sizes.py @@ -1,4 +1,3 @@ -"""Get_data_sizes.""" from typing import Any from spiffworkflow_backend.models.script_attributes_context import ScriptAttributesContext diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_encoded_file_data.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_encoded_file_data.py index 21cc71b0a..d5ee4db81 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_encoded_file_data.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_encoded_file_data.py @@ -1,4 +1,3 @@ -"""Get_encoded_file_data.""" import base64 from typing import Any diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_env.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_env.py index 7015239ec..954a8388b 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_env.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_env.py @@ -1,4 +1,3 @@ -"""Get_env.""" from typing import Any from spiffworkflow_backend.models.script_attributes_context import ScriptAttributesContext diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_localtime.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_localtime.py index 80edf59a6..7a1891872 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_localtime.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_localtime.py @@ -1,4 +1,3 @@ -"""Get_localtime.""" from datetime import datetime from typing import Any diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_secret.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_secret.py index ed85d258b..c5b87f0c8 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_secret.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_secret.py @@ -1,4 +1,3 @@ -"""Get_secret.""" from typing import Any from spiffworkflow_backend.models.script_attributes_context import ScriptAttributesContext diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/markdown_file_download_link.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/markdown_file_download_link.py index e470ced55..18b27b132 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/markdown_file_download_link.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/markdown_file_download_link.py @@ -1,4 +1,3 @@ -"""Markdown_file_download_link.""" from typing import Any from flask import current_app diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/script.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/script.py index 3f3a94bbc..5992bff0c 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/script.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/script.py @@ -1,4 +1,3 @@ -"""Script.""" from __future__ import annotations import importlib diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/acceptance_test_fixtures.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/acceptance_test_fixtures.py index 7c9cfb793..c91177e92 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/acceptance_test_fixtures.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/acceptance_test_fixtures.py @@ -1,4 +1,3 @@ -"""Acceptance_test_fixtures.""" import time from flask import current_app diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/assertion_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/assertion_service.py index 27a1564e7..76d50de0d 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/assertion_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/assertion_service.py @@ -1,4 +1,3 @@ -"""Assertion_service.""" import contextlib from collections.abc import Generator diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/background_processing_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/background_processing_service.py index 58e8c2e43..d59221588 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/background_processing_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/background_processing_service.py @@ -1,4 +1,3 @@ -"""Background_processing_service.""" import flask from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus from spiffworkflow_backend.services.message_service import MessageService diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/custom_parser.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/custom_parser.py index b632b1cfc..a65482f7e 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/custom_parser.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/custom_parser.py @@ -1,4 +1,3 @@ -"""Custom_parser.""" from SpiffWorkflow.dmn.parser.BpmnDmnParser import BpmnDmnParser # type: ignore from SpiffWorkflow.spiff.parser.process import SpiffBpmnParser # type: ignore from spiffworkflow_backend.specs.start_event import StartEvent diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/data_setup_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/data_setup_service.py index bcd5e238f..09aee73db 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/data_setup_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/data_setup_service.py @@ -1,4 +1,3 @@ -"""Data_setup_service.""" from flask import current_app from spiffworkflow_backend.models.db import db from spiffworkflow_backend.services.process_model_service import ProcessModelService diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/email_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/email_service.py index 89eb7efa3..0d6da09e7 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/email_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/email_service.py @@ -1,5 +1,3 @@ -"""Email_service.""" - from flask import current_app from flask_mail import Message # type: ignore diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/file_system_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/file_system_service.py index 8d2a9135a..16f0875e6 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/file_system_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/file_system_service.py @@ -1,4 +1,3 @@ -"""File_system_service.""" import os from collections.abc import Generator from contextlib import contextmanager diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/git_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/git_service.py index d2dba3321..d173eefb5 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/git_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/git_service.py @@ -1,4 +1,3 @@ -"""Git_service.""" import os import re import shutil diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/logging_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/logging_service.py index 3c8845c3a..182eb0a41 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/logging_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/logging_service.py @@ -1,4 +1,3 @@ -"""Logging_service.""" import json import logging import re diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/message_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/message_service.py index 709480424..d26aa8b0f 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/message_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/message_service.py @@ -1,5 +1,3 @@ -"""Message_service.""" - from spiffworkflow_backend.models.db import db from spiffworkflow_backend.models.message_instance import MessageInstanceModel from spiffworkflow_backend.models.message_instance import MessageStatuses diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py index 06156baa9..cd0ddaad5 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py @@ -1,4 +1,3 @@ -"""Process_instance_processor.""" # TODO: clean up this service for a clear distinction between it and the process_instance_service # where this points to the pi service import decimal diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_report_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_report_service.py index a6d78caa2..f64a4d329 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_report_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_report_service.py @@ -1,4 +1,3 @@ -"""Process_instance_report_service.""" import copy import re from collections.abc import Generator diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_service.py index d9a81e165..f342f5f0a 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_service.py @@ -1,4 +1,3 @@ -"""Process_instance_service.""" import base64 import hashlib import time @@ -22,6 +21,7 @@ from spiffworkflow_backend.models.process_instance import ProcessInstanceModel from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus from spiffworkflow_backend.models.process_instance_file_data import ProcessInstanceFileDataModel from spiffworkflow_backend.models.process_model import ProcessModelInfo +from spiffworkflow_backend.models.process_model_cycle import ProcessModelCycleModel from spiffworkflow_backend.models.task import Task from spiffworkflow_backend.models.user import UserModel from spiffworkflow_backend.services.authorization_service import AuthorizationService @@ -34,6 +34,7 @@ from spiffworkflow_backend.services.process_instance_queue_service import Proces from spiffworkflow_backend.services.process_instance_queue_service import ProcessInstanceQueueService from spiffworkflow_backend.services.process_model_service import ProcessModelService from spiffworkflow_backend.services.workflow_service import WorkflowService +from spiffworkflow_backend.specs.start_event import StartConfiguration class ProcessInstanceService: @@ -43,22 +44,27 @@ class ProcessInstanceService: TASK_STATE_LOCKED = "locked" @staticmethod - def calculate_start_delay_in_seconds(process_instance_model: ProcessInstanceModel) -> int: + def next_start_event_configuration(process_instance_model: ProcessInstanceModel) -> StartConfiguration: try: processor = ProcessInstanceProcessor(process_instance_model) - delay_in_seconds = WorkflowService.calculate_run_at_delay_in_seconds( + start_configuration = WorkflowService.next_start_event_configuration( processor.bpmn_process_instance, datetime.now(timezone.utc) ) except Exception: - delay_in_seconds = 0 - return delay_in_seconds + start_configuration = None + + if start_configuration is None: + start_configuration = (0, 0, 0) + + return start_configuration @classmethod def create_process_instance( cls, process_model: ProcessModelInfo, user: UserModel, - ) -> ProcessInstanceModel: + start_configuration: StartConfiguration | None = None, + ) -> tuple[ProcessInstanceModel, StartConfiguration]: """Get_process_instance_from_spec.""" db.session.commit() try: @@ -76,10 +82,13 @@ class ProcessInstanceService: ) db.session.add(process_instance_model) db.session.commit() - delay_in_seconds = cls.calculate_start_delay_in_seconds(process_instance_model) + + if start_configuration is None: + start_configuration = cls.next_start_event_configuration(process_instance_model) + _, delay_in_seconds, _ = start_configuration run_at_in_seconds = round(time.time()) + delay_in_seconds ProcessInstanceQueueService.enqueue_new_process_instance(process_instance_model, run_at_in_seconds) - return process_instance_model + return (process_instance_model, start_configuration) @classmethod def create_process_instance_from_process_model_identifier( @@ -89,7 +98,52 @@ class ProcessInstanceService: ) -> ProcessInstanceModel: """Create_process_instance_from_process_model_identifier.""" process_model = ProcessModelService.get_process_model(process_model_identifier) - return cls.create_process_instance(process_model, user) + process_instance_model, (cycle_count, _, duration_in_seconds) = cls.create_process_instance( + process_model, user + ) + cls.register_process_model_cycles(process_model_identifier, cycle_count, duration_in_seconds) + return process_instance_model + + @classmethod + def register_process_model_cycles( + cls, process_model_identifier: str, cycle_count: int, duration_in_seconds: int + ) -> None: + # clean up old cycle record if it exists. event if the given cycle_count is 0 the previous version + # of the model could have included a cycle timer start event + cycles = ProcessModelCycleModel.query.filter( + ProcessModelCycleModel.process_model_identifier == process_model_identifier, + ).all() + + for cycle in cycles: + db.session.delete(cycle) + + if cycle_count != 0: + cycle = ProcessModelCycleModel( + process_model_identifier=process_model_identifier, + cycle_count=cycle_count, + duration_in_seconds=duration_in_seconds, + current_cycle=0, + ) + db.session.add(cycle) + + db.session.commit() + + @classmethod + def schedule_next_process_model_cycle(cls, process_instance_model: ProcessInstanceModel) -> None: + cycle = ProcessModelCycleModel.query.filter( + ProcessModelCycleModel.process_model_identifier == process_instance_model.process_model_identifier + ).first() + + if cycle is None or cycle.cycle_count == 0: + return + + if cycle.cycle_count == -1 or cycle.current_cycle < cycle.cycle_count: + process_model = ProcessModelService.get_process_model(process_instance_model.process_model_identifier) + start_configuration = (cycle.cycle_count, cycle.duration_in_seconds, cycle.duration_in_seconds) + cls.create_process_instance(process_model, process_instance_model.process_initiator, start_configuration) + cycle.current_cycle += 1 + db.session.add(cycle) + db.session.commit() @classmethod def waiting_event_can_be_skipped(cls, waiting_event: dict[str, Any], now_in_utc: datetime) -> bool: @@ -156,6 +210,8 @@ class ProcessInstanceService: cls.run_process_instance_with_processor( process_instance, status_value=status_value, execution_strategy_name=execution_strategy_name ) + if process_instance.status == "complete": + cls.schedule_next_process_model_cycle(process_instance) except ProcessInstanceIsAlreadyLockedError: continue except Exception as e: diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_model_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_model_service.py index 37a9433c8..6cdcaa83b 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_model_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_model_service.py @@ -1,4 +1,3 @@ -"""Process_model_service.""" import json import os import shutil diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/secret_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/secret_service.py index bac2cb235..6edeb3644 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/secret_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/secret_service.py @@ -1,5 +1,3 @@ -"""Secret_service.""" - from flask import current_app from spiffworkflow_backend.exceptions.api_error import ApiError from spiffworkflow_backend.models.db import db diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/spec_file_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/spec_file_service.py index 6086161b4..c311ce30b 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/spec_file_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/spec_file_service.py @@ -1,4 +1,3 @@ -"""Spec_file_service.""" import os import shutil from datetime import datetime diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/user_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/user_service.py index 848e7ee12..ffc7519b9 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/user_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/user_service.py @@ -1,4 +1,3 @@ -"""User_service.""" from typing import Any from flask import current_app diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/workflow_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/workflow_service.py index 5b8a97148..83acc4e2a 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/workflow_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/workflow_service.py @@ -1,9 +1,9 @@ -"""workflow_service.""" from datetime import datetime from SpiffWorkflow.bpmn.workflow import BpmnWorkflow # type: ignore from SpiffWorkflow.task import Task as SpiffTask # type: ignore from SpiffWorkflow.task import TaskState +from spiffworkflow_backend.specs.start_event import StartConfiguration from spiffworkflow_backend.specs.start_event import StartEvent @@ -15,24 +15,13 @@ class WorkflowService: return [t for t in workflow.get_tasks(TaskState.FUTURE) if isinstance(t.task_spec, StartEvent)] @classmethod - def next_start_event_delay_in_seconds(cls, workflow: BpmnWorkflow, now_in_utc: datetime) -> int: + def next_start_event_configuration(cls, workflow: BpmnWorkflow, now_in_utc: datetime) -> StartConfiguration | None: start_events = cls.future_start_events(workflow) - start_delays: list[int] = [] - for start_event in start_events: - start_delay = start_event.task_spec.start_delay_in_seconds(start_event, now_in_utc) - start_delays.append(start_delay) - start_delays.sort() - return start_delays[0] if len(start_delays) > 0 else 0 - - @classmethod - def calculate_run_at_delay_in_seconds(cls, workflow: BpmnWorkflow, now_in_utc: datetime) -> int: - # TODO: for now we are using the first start time because I am not sure how multiple - # start events should work. I think the right answer is to take the earliest start - # time and have later start events stay FUTURE/WAITING?, then we need to be able - # to respect the other start events when enqueue'ing. - # - # TODO: this method should also expand to include other FUTURE/WAITING timers when - # enqueue'ing so that we don't have to check timers every 10 or whatever seconds - # right now we assume that this is being called to create a process - - return cls.next_start_event_delay_in_seconds(workflow, now_in_utc) + configurations = list( + map( + lambda start_event: start_event.task_spec.configuration(start_event, now_in_utc), # type: ignore + start_events, + ) + ) + configurations.sort(key=lambda configuration: configuration[1]) # type: ignore + return configurations[0] if len(configurations) > 0 else None diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/specs/start_event.py b/spiffworkflow-backend/src/spiffworkflow_backend/specs/start_event.py index 56e238f3d..5cb929e4e 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/specs/start_event.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/specs/start_event.py @@ -13,8 +13,11 @@ from SpiffWorkflow.bpmn.specs.event_definitions import TimerEventDefinition from SpiffWorkflow.spiff.parser.event_parsers import SpiffStartEventParser # type: ignore from SpiffWorkflow.task import Task as SpiffTask # type: ignore +StartConfiguration = tuple[int, int, int] # TODO: cylce timers and repeat counts? + + class StartEvent(DefaultStartEvent): # type: ignore def __init__(self, wf_spec, bpmn_id, event_definition, **kwargs): # type: ignore if isinstance(event_definition, TimerEventDefinition): @@ -33,27 +36,36 @@ class StartEvent(DefaultStartEvent): # type: ignore def register_parser_class(parser_config: dict[str, Any]) -> None: parser_config[full_tag("startEvent")] = (SpiffStartEventParser, StartEvent) - def start_delay_in_seconds(self, my_task: SpiffTask, now_in_utc: datetime) -> int: - script_engine = my_task.workflow.script_engine - evaluated_expression = None - parsed_duration = None - - if isinstance(self.timer_definition, TimerEventDefinition) and script_engine is not None: - evaluated_expression = script_engine.evaluate(my_task, self.timer_definition.expression) + def configuration(self, my_task: SpiffTask, now_in_utc: datetime) -> StartConfiguration: + evaluated_expression = self.evaluated_timer_expression(my_task) + cycles = 0 + start_delay_in_seconds = 0 + duration = 0 if evaluated_expression is not None: if isinstance(self.timer_definition, TimeDateEventDefinition): parsed_duration = TimerEventDefinition.parse_time_or_duration(evaluated_expression) time_delta = parsed_duration - now_in_utc - return time_delta.seconds # type: ignore + start_delay_in_seconds = time_delta.seconds elif isinstance(self.timer_definition, DurationTimerEventDefinition): parsed_duration = TimerEventDefinition.parse_iso_duration(evaluated_expression) time_delta = TimerEventDefinition.get_timedelta_from_start(parsed_duration, now_in_utc) - return time_delta.seconds # type: ignore + start_delay_in_seconds = time_delta.seconds elif isinstance(self.timer_definition, CycleTimerEventDefinition): - return 0 + cycles, start, cycle_duration = TimerEventDefinition.parse_iso_recurring_interval(evaluated_expression) + time_delta = start - now_in_utc + cycle_duration + start_delay_in_seconds = time_delta.seconds + duration = cycle_duration.seconds - return 0 + return (cycles, start_delay_in_seconds, duration) + + def evaluated_timer_expression(self, my_task: SpiffTask) -> Any: + script_engine = my_task.workflow.script_engine + evaluated_expression = None + + if isinstance(self.timer_definition, TimerEventDefinition) and script_engine is not None: + evaluated_expression = script_engine.evaluate(my_task, self.timer_definition.expression) + return evaluated_expression class StartEventConverter(EventConverter): # type: ignore diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/__init__.py b/spiffworkflow-backend/tests/spiffworkflow_backend/__init__.py index f520b09de..e69de29bb 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/__init__.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/__init__.py @@ -1 +0,0 @@ -"""__init__.""" diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/helpers/base_test.py b/spiffworkflow-backend/tests/spiffworkflow_backend/helpers/base_test.py index 2fb346fe3..faec5c1b7 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/helpers/base_test.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/helpers/base_test.py @@ -1,4 +1,3 @@ -"""Base_test.""" import io import json import os diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/helpers/example_data.py b/spiffworkflow-backend/tests/spiffworkflow_backend/helpers/example_data.py index 4941a2d38..c0ce8af72 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/helpers/example_data.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/helpers/example_data.py @@ -1,4 +1,3 @@ -"""Example_data.""" import glob import os diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/__init__.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/__init__.py index f520b09de..e69de29bb 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/__init__.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/__init__.py @@ -1 +0,0 @@ -"""__init__.""" diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_authentication.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_authentication.py index 7fddd735a..fde21c7b0 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_authentication.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_authentication.py @@ -1,4 +1,3 @@ -"""Test_authentication.""" import ast import base64 diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_authorization.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_authorization.py index 51eae72e7..7f211a675 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_authorization.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_authorization.py @@ -1,4 +1,3 @@ -"""Test_authorization.""" from tests.spiffworkflow_backend.helpers.base_test import BaseTest diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_logging_service.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_logging_service.py index 44c1fbf1a..04874d512 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_logging_service.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_logging_service.py @@ -1,4 +1,3 @@ -"""Test_logging_service.""" from uuid import UUID from flask.app import Flask diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_nested_groups.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_nested_groups.py index 001d4b12a..177db5d79 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_nested_groups.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_nested_groups.py @@ -1,4 +1,3 @@ -"""Test_nested_groups.""" import json from flask.app import Flask diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_secret_service.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_secret_service.py index b4216c10c..20e48b808 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_secret_service.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_secret_service.py @@ -1,4 +1,4 @@ -"""Test_secret_service.""" +import json import pytest from flask.app import Flask diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_user_blueprint.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_user_blueprint.py index ce142f1c3..2aad2f403 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_user_blueprint.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_user_blueprint.py @@ -1,4 +1,3 @@ -"""Test_user_blueprint.""" # TODO: fix these tests for new authing system # """Test User Blueprint.""" # import json diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_users_controller.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_users_controller.py index 588e43e12..a3186c205 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_users_controller.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_users_controller.py @@ -1,4 +1,3 @@ -"""Test_users_controller.""" from flask.app import Flask from flask.testing import FlaskClient from spiffworkflow_backend.models.user import UserModel diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_acceptance_test_fixtures.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_acceptance_test_fixtures.py index 94bf70d1e..04dd29f9e 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_acceptance_test_fixtures.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_acceptance_test_fixtures.py @@ -1,4 +1,3 @@ -"""Test_acceptance_test_fixtures.""" import os from flask.app import Flask diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_file.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_file.py index c8b350f4c..f4696631f 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_file.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_file.py @@ -1,4 +1,3 @@ -"""Test_file.""" from datetime import datetime from spiffworkflow_backend.models.file import File diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_message_instance.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_message_instance.py index 3d512b912..c49675886 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_message_instance.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_message_instance.py @@ -1,4 +1,3 @@ -"""Test_message_instance.""" import pytest from flask import Flask from flask.testing import FlaskClient diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_processor.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_processor.py index d3d14d5fd..0487c755f 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_processor.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_processor.py @@ -1,4 +1,3 @@ -"""Test_process_instance_processor.""" from uuid import UUID import pytest diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_queue_service.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_queue_service.py index ec5e8dca4..61a434e7a 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_queue_service.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_queue_service.py @@ -1,4 +1,3 @@ -"""Test_process_instance_queue_service.""" import time from contextlib import suppress diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_report_service.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_report_service.py index b1aca3443..737b1614d 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_report_service.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_instance_report_service.py @@ -1,4 +1,3 @@ -"""Test_process_instance_report_service.""" import pytest from flask import Flask from flask.testing import FlaskClient diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_model_service.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_model_service.py index f7f29b881..62613438f 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_model_service.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_process_model_service.py @@ -1,4 +1,3 @@ -"""Test_process_model_service.""" from flask import Flask from spiffworkflow_backend.services.process_model_service import ProcessModelService diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_various_bpmn_constructs.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_various_bpmn_constructs.py index 077c89046..0011a7cd4 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_various_bpmn_constructs.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_various_bpmn_constructs.py @@ -1,4 +1,3 @@ -"""Test_various_bpmn_constructs.""" from flask.app import Flask from flask.testing import FlaskClient from spiffworkflow_backend.services.process_instance_processor import ProcessInstanceProcessor diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_workflow_service.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_workflow_service.py index 10bcd95d3..26537d928 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_workflow_service.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_workflow_service.py @@ -1,4 +1,3 @@ -"""Test_workflow_service.""" from collections.abc import Generator from datetime import datetime from datetime import timedelta @@ -85,7 +84,7 @@ class TestWorkflowService(BaseTest): """, "no_tasks", ) - delay = WorkflowService.calculate_run_at_delay_in_seconds(workflow, now_in_utc) + _, delay, _ = WorkflowService.next_start_event_configuration(workflow, now_in_utc) # type: ignore assert delay == 0 def test_run_at_delay_is_30_for_30_second_duration_start_timer_event(self, now_in_utc: datetime) -> None: @@ -106,7 +105,7 @@ class TestWorkflowService(BaseTest): """, "Process_aldvgey", ) - delay = WorkflowService.calculate_run_at_delay_in_seconds(workflow, now_in_utc) + _, delay, _ = WorkflowService.next_start_event_configuration(workflow, now_in_utc) # type: ignore assert delay == 30 def test_run_at_delay_is_300_if_5_mins_before_date_start_timer_event( @@ -129,5 +128,7 @@ class TestWorkflowService(BaseTest): """, "Process_aldvgey", ) - delay = WorkflowService.calculate_run_at_delay_in_seconds(workflow, example_start_datetime_minus_5_mins_in_utc) + _, delay, _ = WorkflowService.next_start_event_configuration( + workflow, example_start_datetime_minus_5_mins_in_utc + ) # type: ignore assert delay == 300