From c8d2b64ce135fa3e86c44b0399821d3e96fe8807 Mon Sep 17 00:00:00 2001 From: burnettk Date: Wed, 26 Oct 2022 22:34:28 -0400 Subject: [PATCH] wildcard environment support --- src/spiffworkflow_backend/config/__init__.py | 15 +++++--- src/spiffworkflow_backend/config/demo.py | 5 +-- ...yml => terraform_deployed_environment.yml} | 0 .../config/terraform_deployed_environment.rb | 17 ++++++++++ .../scripts/get_localtime.py | 34 +++++++++++-------- tests/data/get_localtime/get_localtime.json | 13 ++----- .../scripts/test_get_localtime.py | 30 ++++++++++------ 7 files changed, 73 insertions(+), 41 deletions(-) rename src/spiffworkflow_backend/config/permissions/{demo.yml => terraform_deployed_environment.yml} (100%) create mode 100644 src/spiffworkflow_backend/config/terraform_deployed_environment.rb diff --git a/src/spiffworkflow_backend/config/__init__.py b/src/spiffworkflow_backend/config/__init__.py index 0383f995..ffefd9ce 100644 --- a/src/spiffworkflow_backend/config/__init__.py +++ b/src/spiffworkflow_backend/config/__init__.py @@ -54,13 +54,20 @@ def setup_config(app: Flask) -> None: else: app.config.from_pyfile(f"{app.instance_path}/config.py", silent=True) - env_config_module = "spiffworkflow_backend.config." + app.config["ENV_IDENTIFIER"] + env_config_prefix = "spiffworkflow_backend.config." + env_config_module = env_config_prefix + app.config["ENV_IDENTIFIER"] try: app.config.from_object(env_config_module) except ImportStringError as exception: - raise ModuleNotFoundError( - f"Cannot find config module: {env_config_module}" - ) from exception + if ( + os.environ.get("TERRAFORM_DEPLOYED_ENVIRONMENT") == "true" + and os.environment.get("SPIFFWORKFLOW_BACKEND_ENV") is not None + ): + app.config.from_object("{env_config_prefix}terraform_deployed_environment") + else: + raise ModuleNotFoundError( + f"Cannot find config module: {env_config_module}" + ) from exception setup_database_uri(app) setup_logger(app) diff --git a/src/spiffworkflow_backend/config/demo.py b/src/spiffworkflow_backend/config/demo.py index a09262a6..db5abf0e 100644 --- a/src/spiffworkflow_backend/config/demo.py +++ b/src/spiffworkflow_backend/config/demo.py @@ -1,11 +1,12 @@ -"""Staging.""" +"""Demo environment.""" from os import environ GIT_COMMIT_ON_SAVE = True GIT_COMMIT_USERNAME = "demo" GIT_COMMIT_EMAIL = "demo@example.com" SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME = environ.get( - "SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME", default="demo.yml" + "SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME", + default="terraform_deployed_environment.yml", ) RUN_BACKGROUND_SCHEDULER = ( diff --git a/src/spiffworkflow_backend/config/permissions/demo.yml b/src/spiffworkflow_backend/config/permissions/terraform_deployed_environment.yml similarity index 100% rename from src/spiffworkflow_backend/config/permissions/demo.yml rename to src/spiffworkflow_backend/config/permissions/terraform_deployed_environment.yml diff --git a/src/spiffworkflow_backend/config/terraform_deployed_environment.rb b/src/spiffworkflow_backend/config/terraform_deployed_environment.rb new file mode 100644 index 00000000..aba29684 --- /dev/null +++ b/src/spiffworkflow_backend/config/terraform_deployed_environment.rb @@ -0,0 +1,17 @@ +"""Terraform-deployed environment.""" +from os import environ + +# default.py already ensured that this key existed as was not None +environment_identifier_for_this_config_file_only = environ["SPIFFWORKFLOW_BACKEND_ENV"] + +GIT_COMMIT_ON_SAVE = True +GIT_COMMIT_USERNAME = environment_identifier_for_this_config_file_only +GIT_COMMIT_EMAIL = f"{environment_identifier_for_this_config_file_only}@example.com" +SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME = environ.get( + "SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME", default="terraform_deployed_environment.yml" +) + +RUN_BACKGROUND_SCHEDULER = ( + environ.get("RUN_BACKGROUND_SCHEDULER", default="false") == "true" +) + diff --git a/src/spiffworkflow_backend/scripts/get_localtime.py b/src/spiffworkflow_backend/scripts/get_localtime.py index 0c7a3064..7dada59c 100644 --- a/src/spiffworkflow_backend/scripts/get_localtime.py +++ b/src/spiffworkflow_backend/scripts/get_localtime.py @@ -1,21 +1,22 @@ -from flask_bpmn.api.api_error import ApiError - -from spiffworkflow_backend.scripts.script import Script - +"""Get_localtime.""" from datetime import datetime -import pytz - from typing import Any from typing import Optional +import pytz +from flask_bpmn.api.api_error import ApiError from SpiffWorkflow.task import Task as SpiffTask # type: ignore +from spiffworkflow_backend.scripts.script import Script + class GetLocaltime(Script): + """GetLocaltime.""" def get_description(self) -> str: + """Get_description.""" return """Converts a Datetime object into a Datetime object for a specific timezone. - Defaults to US/Eastern""" + Defaults to US/Eastern.""" def run( self, @@ -24,20 +25,23 @@ class GetLocaltime(Script): *args: Any, **kwargs: Any ) -> datetime: - if len(args) > 0 or 'datetime' in kwargs: - if 'datetime' in kwargs: - date_time = kwargs['datetime'] + """Run.""" + if len(args) > 0 or "datetime" in kwargs: + if "datetime" in kwargs: + date_time = kwargs["datetime"] else: date_time = args[0] - if 'timezone' in kwargs: - timezone = kwargs['timezone'] + if "timezone" in kwargs: + timezone = kwargs["timezone"] elif len(args) > 1: timezone = args[1] else: - timezone = 'US/Eastern' + timezone = "US/Eastern" localtime: datetime = date_time.astimezone(pytz.timezone(timezone)) return localtime else: - raise ApiError(error_code='missing_datetime', - message='You must include a datetime to convert.') + raise ApiError( + error_code="missing_datetime", + message="You must include a datetime to convert.", + ) diff --git a/tests/data/get_localtime/get_localtime.json b/tests/data/get_localtime/get_localtime.json index e451f3ce..8e5297db 100644 --- a/tests/data/get_localtime/get_localtime.json +++ b/tests/data/get_localtime/get_localtime.json @@ -2,19 +2,12 @@ "title": "Get Timezone", "description": "Form to select a timezone.", "type": "object", - "required": [ - "timezone" - ], + "required": ["timezone"], "properties": { "timezone": { "type": "string", "title": "Timezone", - "enum": [ - "US/Eastern", - "US/Pacific", - "Europe/Berlin", - "Australia/ACT" - ] + "enum": ["US/Eastern", "US/Pacific", "Europe/Berlin", "Australia/ACT"] } } -} \ No newline at end of file +} diff --git a/tests/spiffworkflow_backend/scripts/test_get_localtime.py b/tests/spiffworkflow_backend/scripts/test_get_localtime.py index 9110f736..03ef995e 100644 --- a/tests/spiffworkflow_backend/scripts/test_get_localtime.py +++ b/tests/spiffworkflow_backend/scripts/test_get_localtime.py @@ -1,24 +1,34 @@ +"""Test_get_localtime.""" import datetime -import pytz +import pytz from flask.app import Flask from flask.testing import FlaskClient - -from spiffworkflow_backend.scripts.get_localtime import GetLocaltime -from spiffworkflow_backend.services.process_instance_processor import ProcessInstanceProcessor -from spiffworkflow_backend.services.process_instance_service import ProcessInstanceService - from tests.spiffworkflow_backend.helpers.base_test import BaseTest from tests.spiffworkflow_backend.helpers.test_data import load_test_spec +from spiffworkflow_backend.scripts.get_localtime import GetLocaltime +from spiffworkflow_backend.services.process_instance_processor import ( + ProcessInstanceProcessor, +) +from spiffworkflow_backend.services.process_instance_service import ( + ProcessInstanceService, +) + class TestGetLocaltime(BaseTest): """TestProcessAPi.""" def test_get_localtime_script_directly(self) -> None: + """Test_get_localtime_script_directly.""" current_time = datetime.datetime.now() timezone = "US/Pacific" - result = GetLocaltime().run(task=None, environment_identifier='testing', datetime=current_time, timezone=timezone) + result = GetLocaltime().run( + task=None, + environment_identifier="testing", + datetime=current_time, + timezone=timezone, + ) assert result == current_time.astimezone(pytz.timezone(timezone)) def test_get_localtime_script_through_bpmn( @@ -54,8 +64,8 @@ class TestGetLocaltime(BaseTest): assert spiff_task data = spiff_task.data - some_time = data['some_time'] - localtime = data['localtime'] - timezone = data['timezone'] + some_time = data["some_time"] + localtime = data["localtime"] + timezone = data["timezone"] assert localtime == some_time.astimezone(pytz.timezone(timezone))