From 1f454536e3a47f5208f6258716ad5c7ea44c9009 Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Fri, 10 Jul 2020 11:26:15 -0400 Subject: [PATCH 01/13] Renames TOKEN_AUTH_SECRET_KEY to SECRET_KEY --- config/default.py | 2 +- config/testing.py | 2 +- crc/models/user.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/default.py b/config/default.py index ed44e6fe..5c8f8c51 100644 --- a/config/default.py +++ b/config/default.py @@ -30,7 +30,7 @@ SQLALCHEMY_DATABASE_URI = environ.get( default="postgresql://%s:%s@%s:%s/%s" % (DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME) ) TOKEN_AUTH_TTL_HOURS = float(environ.get('TOKEN_AUTH_TTL_HOURS', default=24)) -TOKEN_AUTH_SECRET_KEY = environ.get('TOKEN_AUTH_SECRET_KEY', default="Shhhh!!! This is secret! And better darn well not show up in prod.") +SECRET_KEY = environ.get('SECRET_KEY', default="Shhhh!!! This is secret! And better darn well not show up in prod.") FRONTEND_AUTH_CALLBACK = environ.get('FRONTEND_AUTH_CALLBACK', default="http://localhost:4200/session") SWAGGER_AUTH_KEY = environ.get('SWAGGER_AUTH_KEY', default="SWAGGER") diff --git a/config/testing.py b/config/testing.py index c7a777ad..5b03cc41 100644 --- a/config/testing.py +++ b/config/testing.py @@ -5,7 +5,7 @@ basedir = os.path.abspath(os.path.dirname(__file__)) NAME = "CR Connect Workflow" TESTING = True -TOKEN_AUTH_SECRET_KEY = "Shhhh!!! This is secret! And better darn well not show up in prod." +SECRET_KEY = "Shhhh!!! This is secret! And better darn well not show up in prod." # This is here, for when we are running the E2E Tests in the frontend code bases. # which will set the TESTING envronment to true, causing this to execute, but we need diff --git a/crc/models/user.py b/crc/models/user.py index 55bba35f..221176bc 100644 --- a/crc/models/user.py +++ b/crc/models/user.py @@ -35,7 +35,7 @@ class UserModel(db.Model): } return jwt.encode( payload, - app.config.get('TOKEN_AUTH_SECRET_KEY'), + app.config.get('SECRET_KEY'), algorithm='HS256', ) @@ -47,7 +47,7 @@ class UserModel(db.Model): :return: integer|string """ try: - payload = jwt.decode(auth_token, app.config.get('TOKEN_AUTH_SECRET_KEY'), algorithms='HS256') + payload = jwt.decode(auth_token, app.config.get('SECRET_KEY'), algorithms='HS256') return payload except jwt.ExpiredSignatureError: raise ApiError('token_expired', 'The Authentication token you provided expired and must be renewed.') From b7920989edba70eeeb8f5587dcdb472d75f5b90e Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Fri, 10 Jul 2020 14:48:38 -0400 Subject: [PATCH 02/13] WIP: Adds Camunda property for retrieving enum field options from task data. --- crc/models/api_models.py | 29 ++++++++++++++++--- crc/services/lookup_service.py | 49 +++++++++++++++++++++----------- crc/services/workflow_service.py | 4 +-- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/crc/models/api_models.py b/crc/models/api_models.py index bb99eebb..4dec1a74 100644 --- a/crc/models/api_models.py +++ b/crc/models/api_models.py @@ -32,15 +32,36 @@ class NavigationItem(object): class Task(object): + ########################################################################## + # Custom properties and validations defined in Camunda form fields # + ########################################################################## + + # Repeating form section PROP_OPTIONS_REPEAT = "repeat" - PROP_OPTIONS_FILE = "spreadsheet.name" - PROP_OPTIONS_VALUE_COLUMN = "spreadsheet.value.column" - PROP_OPTIONS_LABEL_COL = "spreadsheet.label.column" + + # Read-only field PROP_OPTIONS_READ_ONLY = "read_only" + + # LDAP lookup PROP_LDAP_LOOKUP = "ldap.lookup" - VALIDATION_REQUIRED = "required" + + # Autocomplete field FIELD_TYPE_AUTO_COMPLETE = "autocomplete" + # Required field + VALIDATION_REQUIRED = "required" + + # Enum field options values pulled from a spreadsheet + PROP_OPTIONS_FILE_NAME = "spreadsheet.name" + PROP_OPTIONS_FILE_VALUE_COLUMN = "spreadsheet.value.column" + PROP_OPTIONS_FILE_LABEL_COLUMN = "spreadsheet.label.column" + + # Enum field options values pulled from task data + PROP_OPTIONS_DATA_NAME = "data.name" + PROP_OPTIONS_DATA_VALUE_COLUMN = "data.value.column" + PROP_OPTIONS_DATA_LABEL_COLUMN = "data.label.column" + + ########################################################################## def __init__(self, id, name, title, type, state, form, documentation, data, multi_instance_type, multi_instance_count, multi_instance_index, process_name, properties): diff --git a/crc/services/lookup_service.py b/crc/services/lookup_service.py index 47424ae8..7681c81f 100644 --- a/crc/services/lookup_service.py +++ b/crc/services/lookup_service.py @@ -76,29 +76,30 @@ class LookupService(object): @staticmethod def create_lookup_model(workflow_model, field_id): """ - This is all really expensive, but should happen just once (per file change). - Checks to see if the options are provided in a separate lookup table associated with the - workflow, and if so, assures that data exists in the database, and return a model than can be used - to locate that data. - Returns: an array of LookupData, suitable for returning to the api. + This is all really expensive, but should happen just once (per file change). + + Checks to see if the options are provided in a separate lookup table associated with the workflow, and if so, + assures that data exists in the database, and return a model than can be used to locate that data. + + Returns: an array of LookupData, suitable for returning to the API. """ processor = WorkflowProcessor(workflow_model) # VERY expensive, Ludicrous for lookup / type ahead spiff_task, field = processor.find_task_and_field_by_field_id(field_id) - if field.has_property(Task.PROP_OPTIONS_FILE): - if not field.has_property(Task.PROP_OPTIONS_VALUE_COLUMN) or \ - not field.has_property(Task.PROP_OPTIONS_LABEL_COL): + if field.has_property(Task.PROP_OPTIONS_FILE_NAME): + if not (field.has_property(Task.PROP_OPTIONS_FILE_VALUE_COLUMN) or + field.has_property(Task.PROP_OPTIONS_FILE_LABEL_COLUMN)): raise ApiError.from_task("invalid_emum", "For enumerations based on an xls file, you must include 3 properties: %s, " - "%s, and %s" % (Task.PROP_OPTIONS_FILE, - Task.PROP_OPTIONS_VALUE_COLUMN, - Task.PROP_OPTIONS_LABEL_COL), + "%s, and %s" % (Task.PROP_OPTIONS_FILE_NAME, + Task.PROP_OPTIONS_FILE_VALUE_COLUMN, + Task.PROP_OPTIONS_FILE_LABEL_COLUMN), task=spiff_task) # Get the file data from the File Service - file_name = field.get_property(Task.PROP_OPTIONS_FILE) - value_column = field.get_property(Task.PROP_OPTIONS_VALUE_COLUMN) - label_column = field.get_property(Task.PROP_OPTIONS_LABEL_COL) + file_name = field.get_property(Task.PROP_OPTIONS_FILE_NAME) + value_column = field.get_property(Task.PROP_OPTIONS_FILE_VALUE_COLUMN) + label_column = field.get_property(Task.PROP_OPTIONS_FILE_LABEL_COLUMN) latest_files = FileService.get_spec_data_files(workflow_spec_id=workflow_model.workflow_spec_id, workflow_id=workflow_model.id, name=file_name) @@ -110,14 +111,30 @@ class LookupService(object): lookup_model = LookupService.build_lookup_table(data_model, value_column, label_column, workflow_model.workflow_spec_id, field_id) + elif field.has_property(Task.PROP_OPTIONS_DATA_NAME): + if not (field.has_property(Task.PROP_OPTIONS_DATA_VALUE_COLUMN) or + field.has_property(Task.PROP_OPTIONS_DATA_LABEL_COLUMN)): + raise ApiError.from_task("invalid_emum", + "For enumerations based on task data, you must include 3 properties: %s, " + "%s, and %s" % (Task.PROP_OPTIONS_DATA_NAME, + Task.PROP_OPTIONS_DATA_VALUE_COLUMN, + Task.PROP_OPTIONS_DATA_LABEL_COLUMN), + task=spiff_task) + + # Get the enum options from the task data + data_model = spiff_task.data.__getattribute__(Task.PROP_OPTIONS_DATA_NAME) + value_column = field.get_property(Task.PROP_OPTIONS_DATA_VALUE_COLUMN) + label_column = field.get_property(Task.PROP_OPTIONS_DATA_LABEL_COLUMN) + lookup_model = LookupService.build_lookup_table(data_model, value_column, label_column, + workflow_model.workflow_spec_id, field_id) + elif field.has_property(Task.PROP_LDAP_LOOKUP): lookup_model = LookupFileModel(workflow_spec_id=workflow_model.workflow_spec_id, field_id=field_id, is_ldap=True) else: raise ApiError("unknown_lookup_option", - "Lookup supports using spreadsheet options or ldap options, and neither " - "was provided.") + "Lookup supports using spreadsheet options or ldap options, and neither was provided.") db.session.add(lookup_model) db.session.commit() return lookup_model diff --git a/crc/services/workflow_service.py b/crc/services/workflow_service.py index 157c4c13..04781f52 100644 --- a/crc/services/workflow_service.py +++ b/crc/services/workflow_service.py @@ -394,7 +394,7 @@ class WorkflowService(object): # If this is an auto-complete field, do not populate options, a lookup will happen later. if field.type == Task.FIELD_TYPE_AUTO_COMPLETE: pass - elif field.has_property(Task.PROP_OPTIONS_FILE): + elif field.has_property(Task.PROP_OPTIONS_FILE_NAME): lookup_model = LookupService.get_lookup_model(spiff_task, field) data = db.session.query(LookupDataModel).filter(LookupDataModel.lookup_file_model == lookup_model).all() if not hasattr(field, 'options'): @@ -467,7 +467,7 @@ class WorkflowService(object): @staticmethod def extract_form_data(latest_data, task): - """Removes data from latest_data that would be added by the child task or any of it's children.""" + """Removes data from latest_data that would be added by the child task or any of its children.""" data = {} if hasattr(task.task_spec, 'form'): From 07066b8a165c409d8b33dedba1a0cce5963cbda4 Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Mon, 13 Jul 2020 17:46:28 -0400 Subject: [PATCH 03/13] Looks up enum options from task data --- crc/services/lookup_service.py | 36 +++++-- crc/services/workflow_service.py | 2 +- .../enum_options_from_task_data.bpmn | 100 ++++++++++++++++++ tests/test_tasks_api.py | 36 +++++++ 4 files changed, 165 insertions(+), 9 deletions(-) create mode 100644 tests/data/enum_options_from_task_data/enum_options_from_task_data.bpmn diff --git a/crc/services/lookup_service.py b/crc/services/lookup_service.py index 7681c81f..067a26a2 100644 --- a/crc/services/lookup_service.py +++ b/crc/services/lookup_service.py @@ -86,10 +86,11 @@ class LookupService(object): processor = WorkflowProcessor(workflow_model) # VERY expensive, Ludicrous for lookup / type ahead spiff_task, field = processor.find_task_and_field_by_field_id(field_id) + # Use the contents of a file to populate enum field options if field.has_property(Task.PROP_OPTIONS_FILE_NAME): if not (field.has_property(Task.PROP_OPTIONS_FILE_VALUE_COLUMN) or field.has_property(Task.PROP_OPTIONS_FILE_LABEL_COLUMN)): - raise ApiError.from_task("invalid_emum", + raise ApiError.from_task("invalid_enum", "For enumerations based on an xls file, you must include 3 properties: %s, " "%s, and %s" % (Task.PROP_OPTIONS_FILE_NAME, Task.PROP_OPTIONS_FILE_VALUE_COLUMN, @@ -111,30 +112,49 @@ class LookupService(object): lookup_model = LookupService.build_lookup_table(data_model, value_column, label_column, workflow_model.workflow_spec_id, field_id) + # Use the value of some other task data field to populate enum field options elif field.has_property(Task.PROP_OPTIONS_DATA_NAME): if not (field.has_property(Task.PROP_OPTIONS_DATA_VALUE_COLUMN) or field.has_property(Task.PROP_OPTIONS_DATA_LABEL_COLUMN)): - raise ApiError.from_task("invalid_emum", + raise ApiError.from_task("invalid_enum", "For enumerations based on task data, you must include 3 properties: %s, " "%s, and %s" % (Task.PROP_OPTIONS_DATA_NAME, Task.PROP_OPTIONS_DATA_VALUE_COLUMN, Task.PROP_OPTIONS_DATA_LABEL_COLUMN), task=spiff_task) + prop = field.get_property(Task.PROP_OPTIONS_DATA_NAME) + if prop not in spiff_task.data: + raise ApiError.from_task("invalid_enum", "For enumerations based on task data, task data must have " + "a property called '%s'" % prop, + task=spiff_task) + # Get the enum options from the task data - data_model = spiff_task.data.__getattribute__(Task.PROP_OPTIONS_DATA_NAME) + data_model = spiff_task.data[prop] value_column = field.get_property(Task.PROP_OPTIONS_DATA_VALUE_COLUMN) label_column = field.get_property(Task.PROP_OPTIONS_DATA_LABEL_COLUMN) - lookup_model = LookupService.build_lookup_table(data_model, value_column, label_column, - workflow_model.workflow_spec_id, field_id) + lookup_model = LookupFileModel(workflow_spec_id=workflow_model.workflow_spec_id, + field_id=field_id, + is_ldap=False) + db.session.add(lookup_model) + items = data_model.items() if isinstance(data_model, dict) else data_model + for item in items: + lookup_data = LookupDataModel(lookup_file_model=lookup_model, + value=item[value_column], + label=item[label_column], + data=item) + db.session.add(lookup_data) + db.session.commit() + # Use the results of an LDAP request to populate enum field options elif field.has_property(Task.PROP_LDAP_LOOKUP): lookup_model = LookupFileModel(workflow_spec_id=workflow_model.workflow_spec_id, field_id=field_id, is_ldap=True) else: raise ApiError("unknown_lookup_option", - "Lookup supports using spreadsheet options or ldap options, and neither was provided.") + "Lookup supports using spreadsheet, task data, or LDAP options, " + "and none of those was provided.") db.session.add(lookup_model) db.session.commit() return lookup_model @@ -149,11 +169,11 @@ class LookupService(object): df = xls.parse(xls.sheet_names[0]) # Currently we only look at the fist sheet. df = pd.DataFrame(df).replace({np.nan: None}) if value_column not in df: - raise ApiError("invalid_emum", + raise ApiError("invalid_enum", "The file %s does not contain a column named % s" % (data_model.file_model.name, value_column)) if label_column not in df: - raise ApiError("invalid_emum", + raise ApiError("invalid_enum", "The file %s does not contain a column named % s" % (data_model.file_model.name, label_column)) diff --git a/crc/services/workflow_service.py b/crc/services/workflow_service.py index 04781f52..3a82aa24 100644 --- a/crc/services/workflow_service.py +++ b/crc/services/workflow_service.py @@ -394,7 +394,7 @@ class WorkflowService(object): # If this is an auto-complete field, do not populate options, a lookup will happen later. if field.type == Task.FIELD_TYPE_AUTO_COMPLETE: pass - elif field.has_property(Task.PROP_OPTIONS_FILE_NAME): + elif field.has_property(Task.PROP_OPTIONS_FILE_NAME) or field.has_property(Task.PROP_OPTIONS_DATA_NAME): lookup_model = LookupService.get_lookup_model(spiff_task, field) data = db.session.query(LookupDataModel).filter(LookupDataModel.lookup_file_model == lookup_model).all() if not hasattr(field, 'options'): diff --git a/tests/data/enum_options_from_task_data/enum_options_from_task_data.bpmn b/tests/data/enum_options_from_task_data/enum_options_from_task_data.bpmn new file mode 100644 index 00000000..5be4401a --- /dev/null +++ b/tests/data/enum_options_from_task_data/enum_options_from_task_data.bpmn @@ -0,0 +1,100 @@ + + + + + SequenceFlow_0lvudp8 + + + + SequenceFlow_02vev7n + + + + + + + + + + + + + + + Flow_1yet4a9 + SequenceFlow_02vev7n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SequenceFlow_0lvudp8 + Flow_1yet4a9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/test_tasks_api.py b/tests/test_tasks_api.py index ebe99d93..7f5cc4da 100644 --- a/tests/test_tasks_api.py +++ b/tests/test_tasks_api.py @@ -403,6 +403,42 @@ class TestTasksApi(BaseTest): self.assert_options_populated(results, ['CUSTOMER_NUMBER', 'CUSTOMER_NAME', 'CUSTOMER_CLASS_MEANING']) self.assertIsInstance(results[0]['data'], dict) + def test_lookup_endpoint_enum_in_task_data(self): + self.load_example_data() + workflow = self.create_workflow('enum_options_from_task_data') + # get the first form in the two form workflow. + workflow_api = self.get_workflow_api(workflow) + task = workflow_api.next_task + + workflow_api = self.complete_form(workflow, task, {'invitees': [ + {'first_name': 'Alistair', 'last_name': 'Aardvark', 'age': 43, 'likes_pie': True, 'num_lumps': 21, 'secret_id': 'Antimony', 'display_name': 'Professor Alistair A. Aardvark'}, + {'first_name': 'Berthilda', 'last_name': 'Binturong', 'age': 12, 'likes_pie': False, 'num_lumps': 34, 'secret_id': 'Beryllium', 'display_name': 'Dr. Berthilda B. Binturong'}, + {'first_name': 'Chesterfield', 'last_name': 'Capybara', 'age': 32, 'likes_pie': True, 'num_lumps': 1, 'secret_id': 'Cadmium', 'display_name': 'The Honorable C. C. Capybara'}, + ]}) + task = workflow_api.next_task + + field_id = task.form['fields'][0]['id'] + options = task.form['fields'][0]['options'] + self.assertEqual(3, len(options)) + option_id = options[0]['id'] + self.assertEqual('Professor Alistair A. Aardvark', options[0]['name']) + self.assertEqual('Dr. Berthilda B. Binturong', options[1]['name']) + self.assertEqual('The Honorable C. C. Capybara', options[2]['name']) + self.assertEqual('Alistair', options[0]['data']['first_name']) + self.assertEqual('Berthilda', options[1]['data']['first_name']) + self.assertEqual('Chesterfield', options[2]['data']['first_name']) + + rv = self.app.get('/v1.0/workflow/%i/lookup/%s?value=%s' % + (workflow.id, field_id, option_id), + headers=self.logged_in_headers(), + content_type="application/json") + self.assert_success(rv) + results = json.loads(rv.get_data(as_text=True)) + self.assertEqual(1, len(results)) + self.assert_options_populated(results, ['first_name', 'last_name', 'age', 'likes_pie', 'num_lumps', + 'secret_id', 'display_name']) + self.assertIsInstance(results[0]['data'], dict) + def test_lookup_endpoint_for_task_ldap_field_lookup(self): self.load_example_data() workflow = self.create_workflow('ldap_lookup') From 9077ff3ebfe26601bec8bdaaf5af47ca4790313d Mon Sep 17 00:00:00 2001 From: Dan Funk Date: Tue, 14 Jul 2020 11:38:48 -0400 Subject: [PATCH 04/13] It is not possible to use task_data for an auto-complete field. It's too expensive an operation to provide that feature on the backend, and the data already fully resides on the front end anyway. Task-data can be used to populate enum fields if needed, so it can populate dropdowns, radios and checkboxes, just not auto-complete. --- crc/models/file.py | 1 - crc/services/lookup_service.py | 41 ++++---------------------------- crc/services/workflow_service.py | 27 +++++++++++++++++++-- tests/test_tasks_api.py | 13 +--------- 4 files changed, 30 insertions(+), 52 deletions(-) diff --git a/crc/models/file.py b/crc/models/file.py index 5eb50d4e..8afed6cd 100644 --- a/crc/models/file.py +++ b/crc/models/file.py @@ -144,7 +144,6 @@ class LookupFileModel(db.Model): """Gives us a quick way to tell what kind of lookup is set on a form field. Connected to the file data model, so that if a new version of the same file is created, we can update the listing.""" - #fixme: What happens if they change the file associated with a lookup field? __tablename__ = 'lookup_file' id = db.Column(db.Integer, primary_key=True) workflow_spec_id = db.Column(db.String) diff --git a/crc/services/lookup_service.py b/crc/services/lookup_service.py index 65680f34..c9eb1dd8 100644 --- a/crc/services/lookup_service.py +++ b/crc/services/lookup_service.py @@ -4,7 +4,7 @@ from collections import OrderedDict import pandas as pd from pandas import ExcelFile, np -from sqlalchemy import func, desc +from sqlalchemy import desc from sqlalchemy.sql.functions import GenericFunction from crc import db @@ -119,40 +119,6 @@ class LookupService(object): lookup_model = LookupService.build_lookup_table(data_model, value_column, label_column, workflow_model.workflow_spec_id, field_id) - # Use the value of some other task data field to populate enum field options - elif field.has_property(Task.PROP_OPTIONS_DATA_NAME): - if not (field.has_property(Task.PROP_OPTIONS_DATA_VALUE_COLUMN) or - field.has_property(Task.PROP_OPTIONS_DATA_LABEL_COLUMN)): - raise ApiError.from_task("invalid_enum", - "For enumerations based on task data, you must include 3 properties: %s, " - "%s, and %s" % (Task.PROP_OPTIONS_DATA_NAME, - Task.PROP_OPTIONS_DATA_VALUE_COLUMN, - Task.PROP_OPTIONS_DATA_LABEL_COLUMN), - task=spiff_task) - - prop = field.get_property(Task.PROP_OPTIONS_DATA_NAME) - if prop not in spiff_task.data: - raise ApiError.from_task("invalid_enum", "For enumerations based on task data, task data must have " - "a property called '%s'" % prop, - task=spiff_task) - - # Get the enum options from the task data - data_model = spiff_task.data[prop] - value_column = field.get_property(Task.PROP_OPTIONS_DATA_VALUE_COLUMN) - label_column = field.get_property(Task.PROP_OPTIONS_DATA_LABEL_COLUMN) - lookup_model = LookupFileModel(workflow_spec_id=workflow_model.workflow_spec_id, - field_id=field_id, - is_ldap=False) - db.session.add(lookup_model) - items = data_model.items() if isinstance(data_model, dict) else data_model - for item in items: - lookup_data = LookupDataModel(lookup_file_model=lookup_model, - value=item[value_column], - label=item[label_column], - data=item) - db.session.add(lookup_data) - db.session.commit() - # Use the results of an LDAP request to populate enum field options elif field.has_property(Task.PROP_LDAP_LOOKUP): lookup_model = LookupFileModel(workflow_spec_id=workflow_model.workflow_spec_id, @@ -160,8 +126,8 @@ class LookupService(object): is_ldap=True) else: raise ApiError("unknown_lookup_option", - "Lookup supports using spreadsheet, task data, or LDAP options, " - "and none of those was provided.") + "Lookup supports using spreadsheet or LDAP options, " + "and neither of those was provided.") db.session.add(lookup_model) db.session.commit() return lookup_model @@ -247,3 +213,4 @@ class LookupService(object): "data": user }) return user_list + diff --git a/crc/services/workflow_service.py b/crc/services/workflow_service.py index 3a82aa24..e212179b 100644 --- a/crc/services/workflow_service.py +++ b/crc/services/workflow_service.py @@ -394,16 +394,39 @@ class WorkflowService(object): # If this is an auto-complete field, do not populate options, a lookup will happen later. if field.type == Task.FIELD_TYPE_AUTO_COMPLETE: pass - elif field.has_property(Task.PROP_OPTIONS_FILE_NAME) or field.has_property(Task.PROP_OPTIONS_DATA_NAME): + elif field.has_property(Task.PROP_OPTIONS_FILE_NAME): lookup_model = LookupService.get_lookup_model(spiff_task, field) data = db.session.query(LookupDataModel).filter(LookupDataModel.lookup_file_model == lookup_model).all() if not hasattr(field, 'options'): field.options = [] for d in data: field.options.append({"id": d.value, "name": d.label, "data": d.data}) - + elif field.has_property(Task.PROP_OPTIONS_DATA_NAME): + field.options = WorkflowService.get_options_from_task_data(spiff_task, field) return field + @staticmethod + def get_options_from_task_data(spiff_task, field): + if not (field.has_property(Task.PROP_OPTIONS_DATA_VALUE_COLUMN) or + field.has_property(Task.PROP_OPTIONS_DATA_LABEL_COLUMN)): + raise ApiError.from_task("invalid_enum", + f"For enumerations based on task data, you must include 3 properties: " + f"{Task.PROP_OPTIONS_DATA_NAME}, {Task.PROP_OPTIONS_DATA_VALUE_COLUMN}, " + f"{Task.PROP_OPTIONS_DATA_LABEL_COLUMN}", task=spiff_task) + prop = field.get_property(Task.PROP_OPTIONS_DATA_NAME) + if prop not in spiff_task.data: + raise ApiError.from_task("invalid_enum", f"For enumerations based on task data, task data must have " + f"a property called {prop}", task=spiff_task) + # Get the enum options from the task data + data_model = spiff_task.data[prop] + value_column = field.get_property(Task.PROP_OPTIONS_DATA_VALUE_COLUMN) + label_column = field.get_property(Task.PROP_OPTIONS_DATA_LABEL_COLUMN) + items = data_model.items() if isinstance(data_model, dict) else data_model + options = [] + for item in items: + options.append({"id": item[value_column], "name": item[label_column], "data": item}) + return options + @staticmethod def log_task_action(user_uid, workflow_model, spiff_task, action, version): task = WorkflowService.spiff_task_to_api_task(spiff_task) diff --git a/tests/test_tasks_api.py b/tests/test_tasks_api.py index 7f5cc4da..09690058 100644 --- a/tests/test_tasks_api.py +++ b/tests/test_tasks_api.py @@ -403,7 +403,7 @@ class TestTasksApi(BaseTest): self.assert_options_populated(results, ['CUSTOMER_NUMBER', 'CUSTOMER_NAME', 'CUSTOMER_CLASS_MEANING']) self.assertIsInstance(results[0]['data'], dict) - def test_lookup_endpoint_enum_in_task_data(self): + def test_enum_from_task_data(self): self.load_example_data() workflow = self.create_workflow('enum_options_from_task_data') # get the first form in the two form workflow. @@ -428,17 +428,6 @@ class TestTasksApi(BaseTest): self.assertEqual('Berthilda', options[1]['data']['first_name']) self.assertEqual('Chesterfield', options[2]['data']['first_name']) - rv = self.app.get('/v1.0/workflow/%i/lookup/%s?value=%s' % - (workflow.id, field_id, option_id), - headers=self.logged_in_headers(), - content_type="application/json") - self.assert_success(rv) - results = json.loads(rv.get_data(as_text=True)) - self.assertEqual(1, len(results)) - self.assert_options_populated(results, ['first_name', 'last_name', 'age', 'likes_pie', 'num_lumps', - 'secret_id', 'display_name']) - self.assertIsInstance(results[0]['data'], dict) - def test_lookup_endpoint_for_task_ldap_field_lookup(self): self.load_example_data() workflow = self.create_workflow('ldap_lookup') From d71ff80eac435dee3e03c8bdfa445e7029689e21 Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Tue, 14 Jul 2020 13:42:52 -0400 Subject: [PATCH 05/13] Adds end and start events --- crc/services/workflow_service.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/crc/services/workflow_service.py b/crc/services/workflow_service.py index e212179b..7e869fae 100644 --- a/crc/services/workflow_service.py +++ b/crc/services/workflow_service.py @@ -6,9 +6,11 @@ import random import jinja2 from SpiffWorkflow import Task as SpiffTask, WorkflowException +from SpiffWorkflow.bpmn.specs.EndEvent import EndEvent from SpiffWorkflow.bpmn.specs.ManualTask import ManualTask from SpiffWorkflow.bpmn.specs.MultiInstanceTask import MultiInstanceTask from SpiffWorkflow.bpmn.specs.ScriptTask import ScriptTask +from SpiffWorkflow.bpmn.specs.StartEvent import StartEvent from SpiffWorkflow.bpmn.specs.UserTask import UserTask from SpiffWorkflow.dmn.specs.BusinessRuleTask import BusinessRuleTask from SpiffWorkflow.specs import CancelTask, StartTask @@ -273,20 +275,14 @@ class WorkflowService(object): def spiff_task_to_api_task(spiff_task, add_docs_and_forms=False): task_type = spiff_task.task_spec.__class__.__name__ - if isinstance(spiff_task.task_spec, UserTask): - task_type = "UserTask" - elif isinstance(spiff_task.task_spec, ManualTask): - task_type = "ManualTask" - elif isinstance(spiff_task.task_spec, BusinessRuleTask): - task_type = "BusinessRuleTask" - elif isinstance(spiff_task.task_spec, CancelTask): - task_type = "CancelTask" - elif isinstance(spiff_task.task_spec, ScriptTask): - task_type = "ScriptTask" - elif isinstance(spiff_task.task_spec, StartTask): - task_type = "StartTask" - else: - task_type = "NoneTask" + task_types = [UserTask, ManualTask, BusinessRuleTask, CancelTask, ScriptTask, StartTask, EndEvent, StartEvent] + + for t in task_types: + if isinstance(spiff_task.task_spec, t): + task_type = t.__name__ + break + else: + task_type = "NoneTask" info = spiff_task.task_info() if info["is_looping"]: From c8214a4cc444504b9019634f41aa9faf6f444bc8 Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Tue, 14 Jul 2020 14:49:04 -0400 Subject: [PATCH 06/13] Updates DSP --- .../bpmn/data_security_plan/HIPAA_Ids.xls | Bin 0 -> 34304 bytes .../data_security_plan/NEW_DSP_template.docx | Bin 72003 -> 53777 bytes .../data_security_plan.bpmn | 546 ++++++------------ 3 files changed, 167 insertions(+), 379 deletions(-) create mode 100644 crc/static/bpmn/data_security_plan/HIPAA_Ids.xls diff --git a/crc/static/bpmn/data_security_plan/HIPAA_Ids.xls b/crc/static/bpmn/data_security_plan/HIPAA_Ids.xls new file mode 100644 index 0000000000000000000000000000000000000000..2d703832f8222f97a9e1f71a6da40f3adec54bfd GIT binary patch literal 34304 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 DG@_-2 literal 0 HcmV?d00001 diff --git a/crc/static/bpmn/data_security_plan/NEW_DSP_template.docx b/crc/static/bpmn/data_security_plan/NEW_DSP_template.docx index 9c282eaa850a4441f6ed9b19f8775bf3cf688698..b4925d1ffcb05e5c845230a5c0082ed6a513dc45 100644 GIT binary patch delta 22364 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 delta 40716 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 - + SequenceFlow_100w7co @@ -10,45 +10,27 @@ - + + + + - - - - - - - - - - - - - - - - - - - - - + - - + - + @@ -162,28 +144,10 @@ + + + - - - - - - - - - - - - - - - - - - - - - @@ -202,31 +166,14 @@ - + + + + - - - - - - - - - - - - - - - - - - - - @@ -253,9 +200,8 @@ Answer the questions for each of the Individual Use Devices that you use to collect or store your data onto your individual use device during the course of your research. Do not select these items if they are only to be used to connect elsewhere (to the items you identified in Electronic Medical Record, UVA approved eCRF or clinical trials management system, UVA servers & websites, and Web-based server, cloud server, or any non-centrally managed server): - + - @@ -276,95 +222,75 @@ - + - - + - + - - + - + - - + + + + - - - - - - - - - - - - - - - - - - - - - + - - + - + - + - + - + + + + + + + + + + + + + - - + - + - - + - + - - - - - - - - - - + @@ -372,7 +298,7 @@ SequenceFlow_0nc6lcs SequenceFlow_0gp2pjm - + @@ -389,7 +315,7 @@ Indicate all the possible formats in which you will transmit your data outside o - Flow_0cpwkms + SequenceFlow_0gp2pjm SequenceFlow_0mgwas4 @@ -415,7 +341,6 @@ Indicate all the possible formats in which you will transmit your data outside o - @@ -424,48 +349,27 @@ Indicate all the possible formats in which you will transmit your data outside o - + + + - - - - - - - - - - - - - - - - - - - - - - - @@ -498,7 +402,7 @@ Indicate all the possible formats in which you will transmit your data outside o - + @@ -506,7 +410,7 @@ Indicate all the possible formats in which you will transmit your data outside o - + @@ -518,6 +422,7 @@ Indicate all the possible formats in which you will transmit your data outside o SequenceFlow_0lere0k + Done message SequenceFlow_16kyite @@ -623,339 +528,222 @@ Indicate all the possible formats in which you will collect or receive your orig SequenceFlow_0blyor8 SequenceFlow_1oq4w2h - - SequenceFlow_0gp2pjm - Flow_0cpwkms - - - - - > Instructions -o Hippa Instructions -o Hippa Indentifiers -o Vuew Definitions and Instructions -o Paper Documents -o Emailed to UVA Personnel -o EMC (EPIC) -o UVA Approvled eCRF -o UVA Servers -o Web or Cloud Server -o Individual Use Devices -o Device Details -0 Outside of UVA - -o Outside of UVA? -     o Yes  -           o Email Methods -           o Data Management -           o Transmission Method -           o Generate DSP  -    o No -           o Generate DSP - - - - *  Instructions -* Hippa Instructions -* Hippa Indentifiers -o Vuew Definitions and Instructions ->> Paper Documents -> Emailed to UVA Personnel -> EMC (EPIC) -> UVA Approvled eCRF -> UVA Servers -> Web or Cloud Server -o Individual Use Devices -o Device Details -o Outside of UVA - -o Outside of UVA? -     o Yes  -           o Email Methods -           o Data Management -           o Transmission Method -           o Generate DSP  -    o No -           o Generate DSP - - - - * Instructions -* Hippa Instructions -* Hippa Indentifiers -* View Definitions and Instructions - - -* Paper Documents (Parallel creates spaces) -* Emailed to UVA Personnel -* EMC (EPIC) -* UVA Approvled eCRF -* UVA Servers -* Web or Cloud Server -* Individual Use Devices - -o Device Details (MultiInstance Indents, Parallel creates spaces)) - > Desktop - >> Laptop - > Cell Phone - > Other - -o Outside of UVA - -o Outside of UVA? -     o Yes  -           o Email Methods -           o Data Management -           o Transmission Method -           o Generate DSP  -    o No -           o Generate DSP - - - - - - - - - - - - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - + + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - + + + - + - + - + - + - + - + - + + + + + + + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - From c7662315aaa594bea79f355c3c22e2173989f7d2 Mon Sep 17 00:00:00 2001 From: Dan Funk Date: Wed, 15 Jul 2020 11:16:35 -0400 Subject: [PATCH 07/13] Assure that any errors that occur during the do_engine_steps is correctly captured and returned to the end user or configurator with enough information for them to act on. --- Pipfile.lock | 136 +++++------------- crc/services/workflow_processor.py | 10 +- tests/data/decision_table_invalid/bad_dmn.dmn | 50 +++++++ .../decision_table_invalid.bpmn | 56 ++++++++ tests/workflow/test_workflow_processor.py | 5 +- tests/workflow/test_workflow_service.py | 5 + 6 files changed, 160 insertions(+), 102 deletions(-) create mode 100644 tests/data/decision_table_invalid/bad_dmn.dmn create mode 100644 tests/data/decision_table_invalid/decision_table_invalid.bpmn diff --git a/Pipfile.lock b/Pipfile.lock index cd2c1370..a7f9a933 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -35,7 +35,6 @@ "sha256:24dbaff8ce4f30566bb88976b398e8c4e77637171af3af6f1b9650f48890e60b", "sha256:bb68f8d2bced8f93ccfd07d96c689b716b3227720add971be980accfc2952139" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.6.0" }, "aniso8601": { @@ -50,7 +49,6 @@ "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==19.3.0" }, "babel": { @@ -58,7 +56,6 @@ "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38", "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.0" }, "bcrypt": { @@ -82,7 +79,6 @@ "sha256:d7bdc26475679dd073ba0ed2766445bb5b20ca4793ca0db32b399dccc6bc84b7", "sha256:ff032765bb8716d9387fd5376d987a937254b0619eff0972779515b5c98820bc" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==3.1.7" }, "beautifulsoup4": { @@ -111,7 +107,6 @@ "sha256:ef17d7dffde7fc73ecab3a3b6389d93d3213bac53fa7f28e68e33647ad50b916", "sha256:fd77e4248bb1b7af5f7922dd8e81156f540306e3a5c4b1c24167c1f5f06025da" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.4.6" }, "certifi": { @@ -166,7 +161,6 @@ "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==7.1.2" }, "clickclick": { @@ -188,7 +182,6 @@ "sha256:2ca44140ee259b5e3d8aaf47c79c36a7ab0d5e94d70bd4105c03ede7a20ea5a1", "sha256:cffc044844040c7ce04e9acd1838b5f2e5fa3170182f6fda4d2ea8b0099dbadd" ], - "markers": "python_version >= '3.6'", "version": "==5.0.0" }, "connexion": { @@ -247,7 +240,6 @@ "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af", "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==0.16" }, "docxtpl": { @@ -327,17 +319,15 @@ }, "flask-sqlalchemy": { "hashes": [ - "sha256:0b656fbf87c5f24109d859bafa791d29751fabbda2302b606881ae5485b557a5", - "sha256:fcfe6df52cd2ed8a63008ca36b86a51fa7a4b70cef1c39e5625f722fca32308e" + "sha256:05b31d2034dd3f2a685cbbae4cfc4ed906b2a733cff7964ada450fd5e462b84e", + "sha256:bfc7150eaf809b1c283879302f04c42791136060c6eeb12c0c6674fb1291fae5" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.4.3" + "version": "==2.4.4" }, "future": { "hashes": [ "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.18.2" }, "gunicorn": { @@ -360,7 +350,6 @@ "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.10" }, "imagesize": { @@ -368,7 +357,6 @@ "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1", "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.0" }, "importlib-metadata": { @@ -384,7 +372,6 @@ "sha256:88b101b2668a1d81d6d72d4c2018e53bc6c7fc544c987849da1c7f77545c3bc9", "sha256:f576e85132d34f5bf7df5183c2c6f94cfb32e528f53065345cf71329ba0b8924" ], - "markers": "python_version >= '3.5'", "version": "==0.5.0" }, "itsdangerous": { @@ -392,7 +379,6 @@ "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.0" }, "jdcal": { @@ -407,7 +393,6 @@ "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0", "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.11.2" }, "jsonschema": { @@ -422,16 +407,11 @@ "sha256:be48cdffb54a2194d93ad6533d73f69408486483d189fe9f5990ee24255b0e0a", "sha256:ca1b45faac8c0b18493d02a8571792f3c40291cf2bcf1f55afed3d8f3aa7ba74" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.6.11" }, "ldap3": { "hashes": [ "sha256:17f04298b70bf7ecaa5db8a7d8622b5a962ef7fc2b245b2eea705ac1c24338c0", - "sha256:298769ab0232b3a3efa1e84881096c24526fe37911c83a11285f222fe4975efd", - "sha256:4fd2db72d0412cc16ee86be01332095e86e361329c3579b314231eb2e56c7871", - "sha256:52ab557b3c4908db4a90bea16731aa714b1b54e039b54fd4c4b83994c6c48c0c", - "sha256:53aaae5bf14f3827c69600ddf4d61b88f49c055bb93060e9702c5bafd206c744", "sha256:81df4ac8b6df10fb1f05b17c18d0cb8c4c344d5a03083c382824960ed959cf5b" ], "index": "pypi", @@ -439,43 +419,42 @@ }, "lxml": { "hashes": [ - "sha256:06748c7192eab0f48e3d35a7adae609a329c6257495d5e53878003660dc0fec6", - "sha256:0790ddca3f825dd914978c94c2545dbea5f56f008b050e835403714babe62a5f", - "sha256:1aa7a6197c1cdd65d974f3e4953764eee3d9c7b67e3966616b41fab7f8f516b7", - "sha256:22c6d34fdb0e65d5f782a4d1a1edb52e0a8365858dafb1c08cb1d16546cf0786", - "sha256:2754d4406438c83144f9ffd3628bbe2dcc6d62b20dbc5c1ec4bc4385e5d44b42", - "sha256:27ee0faf8077c7c1a589573b1450743011117f1aa1a91d5ae776bbc5ca6070f2", - "sha256:2b02c106709466a93ed424454ce4c970791c486d5fcdf52b0d822a7e29789626", - "sha256:2d1ddce96cf15f1254a68dba6935e6e0f1fe39247de631c115e84dd404a6f031", - "sha256:4f282737d187ae723b2633856085c31ae5d4d432968b7f3f478a48a54835f5c4", - "sha256:51bb4edeb36d24ec97eb3e6a6007be128b720114f9a875d6b370317d62ac80b9", - "sha256:7eee37c1b9815e6505847aa5e68f192e8a1b730c5c7ead39ff317fde9ce29448", - "sha256:7fd88cb91a470b383aafad554c3fe1ccf6dfb2456ff0e84b95335d582a799804", - "sha256:9144ce36ca0824b29ebc2e02ca186e54040ebb224292072250467190fb613b96", - "sha256:925baf6ff1ef2c45169f548cc85204433e061360bfa7d01e1be7ae38bef73194", - "sha256:a636346c6c0e1092ffc202d97ec1843a75937d8c98aaf6771348ad6422e44bb0", - "sha256:a87dbee7ad9dce3aaefada2081843caf08a44a8f52e03e0a4cc5819f8398f2f4", - "sha256:a9e3b8011388e7e373565daa5e92f6c9cb844790dc18e43073212bb3e76f7007", - "sha256:afb53edf1046599991fb4a7d03e601ab5f5422a5435c47ee6ba91ec3b61416a6", - "sha256:b26719890c79a1dae7d53acac5f089d66fd8cc68a81f4e4bd355e45470dc25e1", - "sha256:b7462cdab6fffcda853338e1741ce99706cdf880d921b5a769202ea7b94e8528", - "sha256:b77975465234ff49fdad871c08aa747aae06f5e5be62866595057c43f8d2f62c", - "sha256:c47a8a5d00060122ca5908909478abce7bbf62d812e3fc35c6c802df8fb01fe7", - "sha256:c79e5debbe092e3c93ca4aee44c9a7631bdd407b2871cb541b979fd350bbbc29", - "sha256:d8d40e0121ca1606aa9e78c28a3a7d88a05c06b3ca61630242cded87d8ce55fa", - "sha256:ee2be8b8f72a2772e72ab926a3bccebf47bb727bda41ae070dc91d1fb759b726", - "sha256:f95d28193c3863132b1f55c1056036bf580b5a488d908f7d22a04ace8935a3a9", - "sha256:fadd2a63a2bfd7fb604508e553d1cf68eca250b2fbdbd81213b5f6f2fbf23529" + "sha256:05a444b207901a68a6526948c7cc8f9fe6d6f24c70781488e32fd74ff5996e3f", + "sha256:08fc93257dcfe9542c0a6883a25ba4971d78297f63d7a5a26ffa34861ca78730", + "sha256:107781b213cf7201ec3806555657ccda67b1fccc4261fb889ef7fc56976db81f", + "sha256:121b665b04083a1e85ff1f5243d4a93aa1aaba281bc12ea334d5a187278ceaf1", + "sha256:2b30aa2bcff8e958cd85d907d5109820b01ac511eae5b460803430a7404e34d7", + "sha256:4b4a111bcf4b9c948e020fd207f915c24a6de3f1adc7682a2d92660eb4e84f1a", + "sha256:5591c4164755778e29e69b86e425880f852464a21c7bb53c7ea453bbe2633bbe", + "sha256:59daa84aef650b11bccd18f99f64bfe44b9f14a08a28259959d33676554065a1", + "sha256:5a9c8d11aa2c8f8b6043d845927a51eb9102eb558e3f936df494e96393f5fd3e", + "sha256:5dd20538a60c4cc9a077d3b715bb42307239fcd25ef1ca7286775f95e9e9a46d", + "sha256:74f48ec98430e06c1fa8949b49ebdd8d27ceb9df8d3d1c92e1fdc2773f003f20", + "sha256:786aad2aa20de3dbff21aab86b2fb6a7be68064cbbc0219bde414d3a30aa47ae", + "sha256:7ad7906e098ccd30d8f7068030a0b16668ab8aa5cda6fcd5146d8d20cbaa71b5", + "sha256:80a38b188d20c0524fe8959c8ce770a8fdf0e617c6912d23fc97c68301bb9aba", + "sha256:92282c83547a9add85ad658143c76a64a8d339028926d7dc1998ca029c88ea6a", + "sha256:94150231f1e90c9595ccc80d7d2006c61f90a5995db82bccbca7944fd457f0f6", + "sha256:9dc9006dcc47e00a8a6a029eb035c8f696ad38e40a27d073a003d7d1443f5d88", + "sha256:a76979f728dd845655026ab991df25d26379a1a8fc1e9e68e25c7eda43004bed", + "sha256:aa8eba3db3d8761db161003e2d0586608092e217151d7458206e243be5a43843", + "sha256:bea760a63ce9bba566c23f726d72b3c0250e2fa2569909e2d83cda1534c79443", + "sha256:c3f511a3c58676147c277eff0224c061dd5a6a8e1373572ac817ac6324f1b1e0", + "sha256:cc411ad324a4486b142c41d9b2b6a722c534096963688d879ea6fa8a35028258", + "sha256:cdc13a1682b2a6241080745b1953719e7fe0850b40a5c71ca574f090a1391df6", + "sha256:e1cacf4796b20865789083252186ce9dc6cc59eca0c2e79cca332bdff24ac481", + "sha256:e70d4e467e243455492f5de463b72151cc400710ac03a0678206a5f27e79ddef", + "sha256:ecc930ae559ea8a43377e8b60ca6f8d61ac532fc57efb915d899de4a67928efd", + "sha256:f161af26f596131b63b236372e4ce40f3167c1b5b5d459b29d2514bd8c9dc9ee" ], "index": "pypi", - "version": "==4.5.1" + "version": "==4.5.2" }, "mako": { "hashes": [ "sha256:8195c8c1400ceb53496064314c6736719c6f25e7479cd24c77be3d9361cddc27", "sha256:93729a258e4ff0747c876bd9e20df1b9758028946e976324ccd2d68245c7b6a9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.3" }, "markdown": { @@ -522,16 +501,15 @@ "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.1" }, "marshmallow": { "hashes": [ - "sha256:35ee2fb188f0bd9fc1cf9ac35e45fd394bd1c153cee430745a465ea435514bd5", - "sha256:9aa20f9b71c992b4782dad07c51d92884fd0f7c5cb9d3c737bea17ec1bad765f" + "sha256:0f3a630f6a2fd124929f1bdcb5df65bd14cc8f49f52a18d0bdcfa0c42414e4a7", + "sha256:ba949379cb6ef73655f72075e82b31cf57012a5557ede642fc8614ab0354f869" ], "index": "pypi", - "version": "==3.6.1" + "version": "==3.7.0" }, "marshmallow-enum": { "hashes": [ @@ -578,7 +556,6 @@ "sha256:df1889701e2dfd8ba4dc9b1a010f0a60950077fb5242bb92c8b5c7f1a6f2668a", "sha256:fa1fe75b4a9e18b66ae7f0b122543c42debcf800aaafa0212aaff3ad273c2596" ], - "markers": "python_version >= '3.6'", "version": "==1.19.0" }, "openapi-spec-validator": { @@ -602,7 +579,6 @@ "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8", "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.4" }, "pandas": { @@ -665,19 +641,8 @@ }, "pyasn1": { "hashes": [ - "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", - "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", - "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", - "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", - "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", - "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", - "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", - "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", - "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", - "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", - "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba" ], "version": "==0.4.8" }, @@ -686,7 +651,6 @@ "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.20" }, "pygments": { @@ -694,7 +658,6 @@ "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44", "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324" ], - "markers": "python_version >= '3.5'", "version": "==2.6.1" }, "pyjwt": { @@ -710,7 +673,6 @@ "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.7" }, "pyrsistent": { @@ -737,9 +699,7 @@ "hashes": [ "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d", "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b", - "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8", - "sha256:c3da2053dbab6b29c94e43c486ff67206eafbe7eb52dbec7390b5e2fb05aac77", - "sha256:ea87e17f6ec459e780e4221f295411462e0d0810858e055fc514684350a2f522" + "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8" ], "version": "==1.0.4" }, @@ -853,7 +813,6 @@ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.15.0" }, "snowballstemmer": { @@ -868,7 +827,6 @@ "sha256:1634eea42ab371d3d346309b93df7870a88610f0725d47528be902a0d95ecc55", "sha256:a59dc181727e95d25f781f0eb4fd1825ff45590ec8ff49eadfd7f1a537cc0232" ], - "markers": "python_version >= '3.5'", "version": "==2.0.1" }, "sphinx": { @@ -884,7 +842,6 @@ "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a", "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58" ], - "markers": "python_version >= '3.5'", "version": "==1.0.2" }, "sphinxcontrib-devhelp": { @@ -892,7 +849,6 @@ "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e", "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" ], - "markers": "python_version >= '3.5'", "version": "==1.0.2" }, "sphinxcontrib-htmlhelp": { @@ -900,7 +856,6 @@ "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f", "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b" ], - "markers": "python_version >= '3.5'", "version": "==1.0.3" }, "sphinxcontrib-jsmath": { @@ -908,7 +863,6 @@ "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" ], - "markers": "python_version >= '3.5'", "version": "==1.0.1" }, "sphinxcontrib-qthelp": { @@ -916,7 +870,6 @@ "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72", "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6" ], - "markers": "python_version >= '3.5'", "version": "==1.0.3" }, "sphinxcontrib-serializinghtml": { @@ -924,13 +877,12 @@ "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc", "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a" ], - "markers": "python_version >= '3.5'", "version": "==1.1.4" }, "spiffworkflow": { "editable": true, "git": "https://github.com/sartography/SpiffWorkflow.git", - "ref": "e47dbce4147f2475f50ef705eab32a1426540613" + "ref": "c72ced41e323aa69fcb6f7708e1869e98add716d" }, "sqlalchemy": { "hashes": [ @@ -963,7 +915,6 @@ "sha256:f57be5673e12763dd400fea568608700a63ce1c6bd5bdbc3cc3a2c5fdb045274", "sha256:fc728ece3d5c772c196fd338a99798e7efac7a04f9cb6416299a3638ee9a94cd" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.3.18" }, "swagger-ui-bundle": { @@ -980,7 +931,6 @@ "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527", "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.25.9" }, "vine": { @@ -988,7 +938,6 @@ "sha256:133ee6d7a9016f177ddeaf191c1f58421a1dcc6ee9a42c58b34bed40e1d2cd87", "sha256:ea4947cc56d1fd6f2095c8d543ee25dad966f78692528e68b4fada11ba3f98af" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.3.0" }, "waitress": { @@ -996,7 +945,6 @@ "sha256:1bb436508a7487ac6cb097ae7a7fe5413aefca610550baf58f0940e51ecfb261", "sha256:3d633e78149eb83b60a07dfabb35579c29aac2d24bb803c18b26fb2ab1a584db" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.4.4" }, "webob": { @@ -1004,7 +952,6 @@ "sha256:a3c89a8e9ba0aeb17382836cdb73c516d0ecf6630ec40ec28288f3ed459ce87b", "sha256:aa3a917ed752ba3e0b242234b2a373f9c4e2a75d35291dcbe977649bd21fd108" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.8.6" }, "webtest": { @@ -1051,7 +998,6 @@ "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b", "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96" ], - "markers": "python_version >= '3.6'", "version": "==3.1.0" } }, @@ -1061,7 +1007,6 @@ "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==19.3.0" }, "coverage": { @@ -1117,7 +1062,6 @@ "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5", "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2" ], - "markers": "python_version >= '3.5'", "version": "==8.4.0" }, "packaging": { @@ -1125,7 +1069,6 @@ "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8", "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.4" }, "pbr": { @@ -1141,7 +1084,6 @@ "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.13.1" }, "py": { @@ -1149,7 +1091,6 @@ "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2", "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.9.0" }, "pyparsing": { @@ -1157,7 +1098,6 @@ "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.7" }, "pytest": { @@ -1173,7 +1113,6 @@ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.15.0" }, "wcwidth": { @@ -1188,7 +1127,6 @@ "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b", "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96" ], - "markers": "python_version >= '3.6'", "version": "==3.1.0" } } diff --git a/crc/services/workflow_processor.py b/crc/services/workflow_processor.py index 50736e5f..60040a95 100644 --- a/crc/services/workflow_processor.py +++ b/crc/services/workflow_processor.py @@ -167,7 +167,10 @@ class WorkflowProcessor(object): bpmn_workflow = BpmnWorkflow(spec, script_engine=self._script_engine) bpmn_workflow.data[WorkflowProcessor.STUDY_ID_KEY] = workflow_model.study_id bpmn_workflow.data[WorkflowProcessor.VALIDATION_PROCESS_KEY] = validate_only - bpmn_workflow.do_engine_steps() + try: + bpmn_workflow.do_engine_steps() + except WorkflowException as we: + raise ApiError.from_task_spec("error_loading_workflow", str(we), we.sender) return bpmn_workflow def save(self): @@ -308,7 +311,10 @@ class WorkflowProcessor(object): new_spec = WorkflowProcessor.get_spec(self.spec_data_files, self.workflow_spec_id) new_bpmn_workflow = BpmnWorkflow(new_spec, script_engine=self._script_engine) new_bpmn_workflow.data = self.bpmn_workflow.data - new_bpmn_workflow.do_engine_steps() + try: + new_bpmn_workflow.do_engine_steps() + except WorkflowException as we: + raise ApiError.from_task_spec("hard_reset_engine_steps_error", str(we), we.sender) self.bpmn_workflow = new_bpmn_workflow def get_status(self): diff --git a/tests/data/decision_table_invalid/bad_dmn.dmn b/tests/data/decision_table_invalid/bad_dmn.dmn new file mode 100644 index 00000000..fc846175 --- /dev/null +++ b/tests/data/decision_table_invalid/bad_dmn.dmn @@ -0,0 +1,50 @@ + + + + + + + + + + 1 + + + + + + + 0 + + + 0 + + + + 'one' can't be evaluated, it must be quoted + + 1 + + + one + + + + + 2 + + + 2 + + + + + > 2 + + + 3 + + + + + diff --git a/tests/data/decision_table_invalid/decision_table_invalid.bpmn b/tests/data/decision_table_invalid/decision_table_invalid.bpmn new file mode 100644 index 00000000..bbf0473a --- /dev/null +++ b/tests/data/decision_table_invalid/decision_table_invalid.bpmn @@ -0,0 +1,56 @@ + + + + + SequenceFlow_1ma1wxb + + + + SequenceFlow_1ma1wxb + SequenceFlow_0grui6f + + + # Great Work! + +Based on the information you provided (Ginger left {{num_presents}}, we recommend the following statement be provided to Ginger: + +## {{message}} + +We hope you both have an excellent day! + SequenceFlow_0grui6f + + + + This DMN isn't provided enough information to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/workflow/test_workflow_processor.py b/tests/workflow/test_workflow_processor.py index 44d90cf3..d30f9cd1 100644 --- a/tests/workflow/test_workflow_processor.py +++ b/tests/workflow/test_workflow_processor.py @@ -368,4 +368,7 @@ class TestWorkflowProcessor(BaseTest): task.task_spec.form.fields.append(field) with self.assertRaises(ApiError): - self._populate_form_with_random_data(task) \ No newline at end of file + self._populate_form_with_random_data(task) + + + diff --git a/tests/workflow/test_workflow_service.py b/tests/workflow/test_workflow_service.py index 6b1b5c58..753d29d7 100644 --- a/tests/workflow/test_workflow_service.py +++ b/tests/workflow/test_workflow_service.py @@ -9,6 +9,7 @@ from example_data import ExampleDataLoader from crc import db from crc.models.stats import TaskEventModel from crc.models.api_models import Task +from crc.api.common import ApiError class TestWorkflowService(BaseTest): @@ -132,3 +133,7 @@ class TestWorkflowService(BaseTest): self.assertEqual({}, task_logs[0].form_data) + def test_dmn_evaluation_errors_in_oncomplete_raise_api_errors_during_validation(self): + workflow_spec_model = self.load_test_spec("decision_table_invalid") + with self.assertRaises(ApiError): + WorkflowService.test_spec(workflow_spec_model.id) \ No newline at end of file From 77948c7828bb232b3069bd88ab0e9b90e8fb9abc Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Wed, 15 Jul 2020 14:28:55 -0400 Subject: [PATCH 08/13] Updates Personnel workflow --- .../irb_api_personnel/irb_api_personnel.bpmn | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/crc/static/bpmn/irb_api_personnel/irb_api_personnel.bpmn b/crc/static/bpmn/irb_api_personnel/irb_api_personnel.bpmn index ba522b78..99edb961 100644 --- a/crc/static/bpmn/irb_api_personnel/irb_api_personnel.bpmn +++ b/crc/static/bpmn/irb_api_personnel/irb_api_personnel.bpmn @@ -10,27 +10,38 @@ StudyInfo investigators + ## The following information was gathered: +{% for type, investigator in StudyInfo.investigators.items() %} +### {{investigator.label}}: {{investigator.display_name}} + * Edit Acess? {{investigator.edit_access}} + * Send Emails? {{investigator.emails}} +{% if investigator.label == "Primary Investigator" %} + * Experience: {{investigator.experience}} +{% endif %} +{% endfor %} Flow_1mplloa - + ### Please provide supplemental information for: -#### Investigator : {{investigator.display_name}} -##### Role: {{investigator.type_full}} +#### {{investigator.display_name}} ##### Title: {{investigator.title}} ##### Department: {{investigator.department}} ##### Affiliation: {{investigator.affiliation}} - - - + + + - + + + + Flow_1dcsioh Flow_1mplloa @@ -43,28 +54,28 @@ - - + + - - + + - - + + - + - - - - + - + + + + From 3fe9662f266db1faa72eae7e9e4b86ca499d9f91 Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Wed, 15 Jul 2020 16:48:32 -0400 Subject: [PATCH 09/13] Updates DSP workflow --- .../data_security_plan/NEW_DSP_template.docx | Bin 53777 -> 71844 bytes .../data_security_plan.bpmn | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/crc/static/bpmn/data_security_plan/NEW_DSP_template.docx b/crc/static/bpmn/data_security_plan/NEW_DSP_template.docx index b4925d1ffcb05e5c845230a5c0082ed6a513dc45..b698c8b23c7618aab7ec99c47e85c73f86704251 100644 GIT binary patch delta 40563 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%0D2_h}f9(U;4%UHsoO{&_Zn2OpxD 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¹ZUDR~ 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 diff --git a/crc/static/bpmn/data_security_plan/data_security_plan.bpmn b/crc/static/bpmn/data_security_plan/data_security_plan.bpmn index 9824a50c..0bf95e18 100644 --- a/crc/static/bpmn/data_security_plan/data_security_plan.bpmn +++ b/crc/static/bpmn/data_security_plan/data_security_plan.bpmn @@ -473,7 +473,10 @@ Process: The Study Team will answer the questions in this section to create the How to The Data Security Plan is auto-generated based on your answers on this Step. You can save your information here and check the outcomes on the Data Security Plan Upload Step at any time. -Submit the step only when you are ready. After you "Submit" the step, the information will not be available for editing. +Submit the step only when you are ready. After you "Submit" the step, the information will not be available for editing. + + +# test From 040a95281e7bceb6c3f5e6ed5032bc5de31a7d3c Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Wed, 15 Jul 2020 17:09:34 -0400 Subject: [PATCH 10/13] Updates package hashes --- Pipfile.lock | 72 +++++++++++++++++++++++-- tests/workflow/test_workflow_service.py | 1 - 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index a7f9a933..6d0f9167 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -35,6 +35,7 @@ "sha256:24dbaff8ce4f30566bb88976b398e8c4e77637171af3af6f1b9650f48890e60b", "sha256:bb68f8d2bced8f93ccfd07d96c689b716b3227720add971be980accfc2952139" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.6.0" }, "aniso8601": { @@ -49,6 +50,7 @@ "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==19.3.0" }, "babel": { @@ -56,6 +58,7 @@ "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38", "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.0" }, "bcrypt": { @@ -79,6 +82,7 @@ "sha256:d7bdc26475679dd073ba0ed2766445bb5b20ca4793ca0db32b399dccc6bc84b7", "sha256:ff032765bb8716d9387fd5376d987a937254b0619eff0972779515b5c98820bc" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==3.1.7" }, "beautifulsoup4": { @@ -107,6 +111,7 @@ "sha256:ef17d7dffde7fc73ecab3a3b6389d93d3213bac53fa7f28e68e33647ad50b916", "sha256:fd77e4248bb1b7af5f7922dd8e81156f540306e3a5c4b1c24167c1f5f06025da" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.4.6" }, "certifi": { @@ -161,6 +166,7 @@ "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==7.1.2" }, "clickclick": { @@ -182,6 +188,7 @@ "sha256:2ca44140ee259b5e3d8aaf47c79c36a7ab0d5e94d70bd4105c03ede7a20ea5a1", "sha256:cffc044844040c7ce04e9acd1838b5f2e5fa3170182f6fda4d2ea8b0099dbadd" ], + "markers": "python_version >= '3.6'", "version": "==5.0.0" }, "connexion": { @@ -240,6 +247,7 @@ "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af", "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==0.16" }, "docxtpl": { @@ -322,12 +330,14 @@ "sha256:05b31d2034dd3f2a685cbbae4cfc4ed906b2a733cff7964ada450fd5e462b84e", "sha256:bfc7150eaf809b1c283879302f04c42791136060c6eeb12c0c6674fb1291fae5" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.4" }, "future": { "hashes": [ "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.18.2" }, "gunicorn": { @@ -350,6 +360,7 @@ "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.10" }, "imagesize": { @@ -357,6 +368,7 @@ "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1", "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.0" }, "importlib-metadata": { @@ -372,6 +384,7 @@ "sha256:88b101b2668a1d81d6d72d4c2018e53bc6c7fc544c987849da1c7f77545c3bc9", "sha256:f576e85132d34f5bf7df5183c2c6f94cfb32e528f53065345cf71329ba0b8924" ], + "markers": "python_version >= '3.5'", "version": "==0.5.0" }, "itsdangerous": { @@ -379,6 +392,7 @@ "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.0" }, "jdcal": { @@ -393,6 +407,7 @@ "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0", "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.11.2" }, "jsonschema": { @@ -407,12 +422,17 @@ "sha256:be48cdffb54a2194d93ad6533d73f69408486483d189fe9f5990ee24255b0e0a", "sha256:ca1b45faac8c0b18493d02a8571792f3c40291cf2bcf1f55afed3d8f3aa7ba74" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.6.11" }, "ldap3": { "hashes": [ - "sha256:17f04298b70bf7ecaa5db8a7d8622b5a962ef7fc2b245b2eea705ac1c24338c0", - "sha256:81df4ac8b6df10fb1f05b17c18d0cb8c4c344d5a03083c382824960ed959cf5b" + "sha256:298769ab0232b3a3efa1e84881096c24526fe37911c83a11285f222fe4975efd", + "sha256:81df4ac8b6df10fb1f05b17c18d0cb8c4c344d5a03083c382824960ed959cf5b", + "sha256:53aaae5bf14f3827c69600ddf4d61b88f49c055bb93060e9702c5bafd206c744", + "sha256:4fd2db72d0412cc16ee86be01332095e86e361329c3579b314231eb2e56c7871", + "sha256:52ab557b3c4908db4a90bea16731aa714b1b54e039b54fd4c4b83994c6c48c0c", + "sha256:17f04298b70bf7ecaa5db8a7d8622b5a962ef7fc2b245b2eea705ac1c24338c0" ], "index": "pypi", "version": "==2.7" @@ -455,6 +475,7 @@ "sha256:8195c8c1400ceb53496064314c6736719c6f25e7479cd24c77be3d9361cddc27", "sha256:93729a258e4ff0747c876bd9e20df1b9758028946e976324ccd2d68245c7b6a9" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.3" }, "markdown": { @@ -501,6 +522,7 @@ "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.1" }, "marshmallow": { @@ -556,6 +578,7 @@ "sha256:df1889701e2dfd8ba4dc9b1a010f0a60950077fb5242bb92c8b5c7f1a6f2668a", "sha256:fa1fe75b4a9e18b66ae7f0b122543c42debcf800aaafa0212aaff3ad273c2596" ], + "markers": "python_version >= '3.6'", "version": "==1.19.0" }, "openapi-spec-validator": { @@ -579,6 +602,7 @@ "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8", "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.4" }, "pandas": { @@ -641,8 +665,19 @@ }, "pyasn1": { "hashes": [ + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba" + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12" ], "version": "==0.4.8" }, @@ -651,6 +686,7 @@ "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.20" }, "pygments": { @@ -658,6 +694,7 @@ "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44", "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324" ], + "markers": "python_version >= '3.5'", "version": "==2.6.1" }, "pyjwt": { @@ -673,6 +710,7 @@ "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.7" }, "pyrsistent": { @@ -697,9 +735,11 @@ }, "python-editor": { "hashes": [ - "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d", + "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8", "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b", - "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8" + "sha256:c3da2053dbab6b29c94e43c486ff67206eafbe7eb52dbec7390b5e2fb05aac77", + "sha256:ea87e17f6ec459e780e4221f295411462e0d0810858e055fc514684350a2f522", + "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d" ], "version": "==1.0.4" }, @@ -813,6 +853,7 @@ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.15.0" }, "snowballstemmer": { @@ -827,6 +868,7 @@ "sha256:1634eea42ab371d3d346309b93df7870a88610f0725d47528be902a0d95ecc55", "sha256:a59dc181727e95d25f781f0eb4fd1825ff45590ec8ff49eadfd7f1a537cc0232" ], + "markers": "python_version >= '3.5'", "version": "==2.0.1" }, "sphinx": { @@ -842,6 +884,7 @@ "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a", "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58" ], + "markers": "python_version >= '3.5'", "version": "==1.0.2" }, "sphinxcontrib-devhelp": { @@ -849,6 +892,7 @@ "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e", "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" ], + "markers": "python_version >= '3.5'", "version": "==1.0.2" }, "sphinxcontrib-htmlhelp": { @@ -856,6 +900,7 @@ "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f", "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b" ], + "markers": "python_version >= '3.5'", "version": "==1.0.3" }, "sphinxcontrib-jsmath": { @@ -863,6 +908,7 @@ "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" ], + "markers": "python_version >= '3.5'", "version": "==1.0.1" }, "sphinxcontrib-qthelp": { @@ -870,6 +916,7 @@ "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72", "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6" ], + "markers": "python_version >= '3.5'", "version": "==1.0.3" }, "sphinxcontrib-serializinghtml": { @@ -877,6 +924,7 @@ "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc", "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a" ], + "markers": "python_version >= '3.5'", "version": "==1.1.4" }, "spiffworkflow": { @@ -915,6 +963,7 @@ "sha256:f57be5673e12763dd400fea568608700a63ce1c6bd5bdbc3cc3a2c5fdb045274", "sha256:fc728ece3d5c772c196fd338a99798e7efac7a04f9cb6416299a3638ee9a94cd" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.3.18" }, "swagger-ui-bundle": { @@ -931,6 +980,7 @@ "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527", "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.25.9" }, "vine": { @@ -938,6 +988,7 @@ "sha256:133ee6d7a9016f177ddeaf191c1f58421a1dcc6ee9a42c58b34bed40e1d2cd87", "sha256:ea4947cc56d1fd6f2095c8d543ee25dad966f78692528e68b4fada11ba3f98af" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.3.0" }, "waitress": { @@ -945,6 +996,7 @@ "sha256:1bb436508a7487ac6cb097ae7a7fe5413aefca610550baf58f0940e51ecfb261", "sha256:3d633e78149eb83b60a07dfabb35579c29aac2d24bb803c18b26fb2ab1a584db" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.4.4" }, "webob": { @@ -952,6 +1004,7 @@ "sha256:a3c89a8e9ba0aeb17382836cdb73c516d0ecf6630ec40ec28288f3ed459ce87b", "sha256:aa3a917ed752ba3e0b242234b2a373f9c4e2a75d35291dcbe977649bd21fd108" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.8.6" }, "webtest": { @@ -998,6 +1051,7 @@ "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b", "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96" ], + "markers": "python_version >= '3.6'", "version": "==3.1.0" } }, @@ -1007,6 +1061,7 @@ "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==19.3.0" }, "coverage": { @@ -1062,6 +1117,7 @@ "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5", "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2" ], + "markers": "python_version >= '3.5'", "version": "==8.4.0" }, "packaging": { @@ -1069,6 +1125,7 @@ "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8", "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.4" }, "pbr": { @@ -1084,6 +1141,7 @@ "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.13.1" }, "py": { @@ -1091,6 +1149,7 @@ "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2", "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.9.0" }, "pyparsing": { @@ -1098,6 +1157,7 @@ "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.7" }, "pytest": { @@ -1113,6 +1173,7 @@ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.15.0" }, "wcwidth": { @@ -1127,6 +1188,7 @@ "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b", "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96" ], + "markers": "python_version >= '3.6'", "version": "==3.1.0" } } diff --git a/tests/workflow/test_workflow_service.py b/tests/workflow/test_workflow_service.py index 753d29d7..3fbd3a23 100644 --- a/tests/workflow/test_workflow_service.py +++ b/tests/workflow/test_workflow_service.py @@ -132,7 +132,6 @@ class TestWorkflowService(BaseTest): # The first task should be empty, with all the data removed. self.assertEqual({}, task_logs[0].form_data) - def test_dmn_evaluation_errors_in_oncomplete_raise_api_errors_during_validation(self): workflow_spec_model = self.load_test_spec("decision_table_invalid") with self.assertRaises(ApiError): From d0279a11e5f1eeb83b26c092c02575345cd3f5b6 Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Wed, 15 Jul 2020 17:44:46 -0400 Subject: [PATCH 11/13] Fixes failing unit test --- crc/services/workflow_service.py | 2 +- tests/workflow/test_workflow_spec_validation_api.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crc/services/workflow_service.py b/crc/services/workflow_service.py index 7e869fae..de6cf1c7 100644 --- a/crc/services/workflow_service.py +++ b/crc/services/workflow_service.py @@ -96,7 +96,7 @@ class WorkflowService(object): for task in tasks: task_api = WorkflowService.spiff_task_to_api_task( task, - add_docs_and_forms=True) # Assure we try to process the documenation, and raise those errors. + add_docs_and_forms=True) # Assure we try to process the documentation, and raise those errors. WorkflowService.populate_form_with_random_data(task, task_api, required_only) task.complete() except WorkflowException as we: diff --git a/tests/workflow/test_workflow_spec_validation_api.py b/tests/workflow/test_workflow_spec_validation_api.py index cb9b6b77..d79986cf 100644 --- a/tests/workflow/test_workflow_spec_validation_api.py +++ b/tests/workflow/test_workflow_spec_validation_api.py @@ -92,7 +92,7 @@ class TestWorkflowSpecValidation(BaseTest): self.load_example_data() errors = self.validate_workflow("invalid_script") self.assertEqual(2, len(errors)) - self.assertEqual("workflow_validation_exception", errors[0]['code']) + self.assertEqual("error_loading_workflow", errors[0]['code']) self.assertTrue("NoSuchScript" in errors[0]['message']) self.assertEqual("Invalid_Script_Task", errors[0]['task_id']) self.assertEqual("An Invalid Script Reference", errors[0]['task_name']) From 6a24bcbf6fe228681c77c2dd383c3dd47739ad74 Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Thu, 16 Jul 2020 09:45:11 -0400 Subject: [PATCH 12/13] Clears out Jinja statements to get test to pass for now --- .../data_security_plan/NEW_DSP_template.docx | Bin 71844 -> 51176 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/crc/static/bpmn/data_security_plan/NEW_DSP_template.docx b/crc/static/bpmn/data_security_plan/NEW_DSP_template.docx index b698c8b23c7618aab7ec99c47e85c73f86704251..f6faeb28d092ff1218b745716da02d8609c1508b 100644 GIT binary patch delta 19694 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 NirizIzHeYZ{S8J4a!mjL delta 40411 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%0D2_h}f9(U;4%UHsoO{&_Zn2OpxD zd3JSmfG)C!DQrBC=Lvl*BwK0l1hqlN9x5@eFQPI_6L-n@)ww zoow3#y?PpY9`~~LPhE}%Gy5ITlQl@+yJq^U{8n{T-ZZgJ)}DOR#RoSH8y7>uP0G!b zRs5eh5O%b0<#y6(D!1LMx`-6hEN3*38qQ zJDJqFoO*WH$+YrT9vqz&UyYrzo;hIXu7W?O2ku$(Y`h|wbm%@PHw_URj|;)#^y4H8 zom4;fUrpt7oZvm8lk3uxWF4KJ0%|R}f}6L!c>pYf)52*?-vxpj8| zfXm#(K0a1?EmH@59@5OJ81#;5VX358{_U1F$N6qFiB6bsX_g?0)cmrG<(TMNzTyo!P;ET}RXZE`*2%UaN!S=Q5{mN%j7ji79;ZVEv5U-(MB}1C#DNwmDWTop8oH8vuAk zb$2yUz150q_JWvd-rmYKo=*8iv{CR*e}oCT-(L2q!>>r0h4!yyZ4b!x7Ra-9fNHS% zO{c50XtG)J>t762W-rwq+W5{!E3EdL?D_qI^6WEEk7%PR`Nx%70yYArS%f=5LpZ-- z4+qRR1dvpXsAfq9oWEk|`86L)*Ws^9HtDXbrPfSxx<1Ui zs}W8+Gdsyno0L(Vbsm{?+r8b0dvcGx#MNymn%JxFafR6j!iu>fi&a?FO5Cupkgk=Js)n zXdctHULmi*aIwO_oFX48W1e#_=bGsxuVR)S9O$5&THhY-Ukon6JZ6HmH4!i^kC}^} z#)K?#pk$S_n;OeAm)gaT0T396BW+)zs+ZqYHIvC!kD%eZQuex>VrQW{)o;EK?!|=Q zROiB@WhX^2mG&4qBMVx+sJBrQ{$kLG-vo+L+~99|o_QKO|JEqcDpPLQ3oDwO&T9$f z^>u1XE@HoIcg|uR+^;*Mp;$(TRPy_qRWMg#n_f)^gTeP~H1g;37?3}roKr&Bmv7K* zPD$EnK%@N?R+P=Y(4xEbC}$Q4cjW5FthtO^wbFm_+7_?CvP)8Fq_QgCq{#>nR|_Pq z(Mc%;?uj%WIS1G*pyWOC){lN#z~I+pWR=czL$t_Vj~p8_Dz?)fq2v* zGhIw$D;Ap2YviTd2MB()#)LobwI}JOmHvK+{<34g`s*+uTLA#i>hmfQVT zD^|7ym&?OJw}T?nuaA&>xHielh{1!bs)cRON51f)UWJ`A3NR{JK2zxesx|uF9;w1U z8jl7xv)dA2M&aFZlVyZIEQ z)ba(U?lrl94QQsgff6ClRz{m^MV88LP@rrzPNEs98{nBHPrBM{`F)UWnCpNtOFL%r zOS5g8#KBD5RcHhF6o*KU4sv;9+lQa4>OO%TM>zeM89dz5IT!+%&E8)W5aOCt42e_X zFb|)t=fq!H3{-^dIcNdV7JR~hBZm$5tFUMDH@36jCLkI(Vi~~me7akXeqHQ-y@>Oy z>~oT3G;5kMgf_hBlwY6d$8@NMymt$fiEwJ^`}-$_ho27zc8GYF$!1L7BYM2wMa_ zgxB;U0ni{ivOLzl7GEFR_2iwPd{y|9EG9@AJtanX8Zo9%veQ22)guM*+PWBy3f=njGJe2?w` zt~Bbv+iE$fz!@U+Fa@H3PI~XM+Sjb2pGqIqi>$n4+ruI)_|jeX$@1Y%l4R=MW2GK& z*sDON^G*xOw%g1+KECwDZd@-Sj*XMa>#kfrL((mf^gwf~T%9JCW3z2drdcdorp>5K zG!t{#bp`_FkW)Q25Hjc{n{LhC$o&WaD&7L$N}=`ASzDeQevr}?QB0+zG(SkaGU>ef z$^uTzbO#GJ5{_%5*Q#;2gT`%%aI?wG!ofz&ATzz!$+E$9(zHZ^#$r>s!u*|XKfWvV zZlkY4>b8t4l=@;yE41TL!Cx!7+bSy$WM>6U!84ekxqALn|Ejs3@gFEkk^)>&fyfXt z2|TkQl8JXuxY|oYqnRTJl`>+0n_eAL2Ctw3vK34>8@e~vIexg=a?g+^IXUWV=$L!# zx{tZDZcBT9r)6Y4S+Sj2Z{#dKLn*GIor`ni_zs7|+h<5Ky3k^PiOg){1pZ1KhnyKk zLTQ3BFgl>-gNmW{Sh}=d06>R(YmVCyjQ%VBFCAWw&Qp zcF|tGSgdr5rrPvQ{|bj0y^AEziu(}7(boDyzKr{&v+c6Fp%Uc<8L+Kb*z&MK7ONLe zeBY_CL{DNRK8!)!D3u=yFYWCB-vyT|m8Vv{$%x5$LYzs0B)SNvOB?Fgm4DTZe><~@ zm$nEeFF{m27hrCL^KkkGp0EY^brQ92T(tZw`G~jN5Ti}JS6g`qYi)g+M)rg7_y*&W zdzv17dXZiFx5zWUIKWq+$@`?kK{|=z)^qg-yjvLEUA#ee6PU{cx%bk~gK}&1UrTh< zXP}gg7P3Pa+`I<83_1biY`zu&8nLcjx;$fM+Yg2W6?*ot<{vq6NB zKYdWz(>xfc&2=^$ASy?k=w7gokF2s-0;46A(?snKJG{qL835d#CpuhUvmZ41ewQ7x znk?<^UdJ-Yj*lR`;u00|D}i%nS>= z_H|>97EOT2df6UVCozh`_Qvov_AKIjwl5d{(@v2v&UWPe_y5WzRs5R7`FdWadI*uY z`ly6l7dq{-TLBcgY?r(YRIPtGH4J;#NTbSeDftb`Wc+56p}%L1rdiR;Va#^_7h~@L z9b4D5i^ke9c5K_`j&0kv-LbJ_+upIA?AW$#JGpuP?|lFL{&UY6byj9^B(CBL3^ zXt0!$W#B4&W%`wI;k1e$j!{F@IE(Y+#Q@7~w7T!F^(8vv*Uat+;KfDhZN^sR;=fOB zqqREfjUn_IKx8($5o}X;?*L8?hRhL$rXr&qcobjPCR~Q-0T$Ub>I3bLj^fgRi9TLG zr1>UZEV&+~g*L+L&rlC5R%56rdFl>S#?=^g1|5eh^2|mUXhc|b;dCjB_dSiVac^0U zq*!D~+vGu(B2#PVq+-b5w9I43x%7ftU>KY1O*1LJUaM)&Zhsz5hXXEa3e3qiCw5jT z$JHK5mXcxJH_oQXc?Yj~^7=IC4ZF%Ix#QKzM#g%m`x`I~ZFX|GXFgoC$JAKjK25%x zk!!;b&$PVCjYWE6JwVCpp-c#%-b&n&-;8?m`g9(}*eI zJ<@xLayp06?%i2*X!GR19vCL(SNwYU8z5{Ju&Bte=x+Z31L&g#K_1&eN1zjJ#rU0C zf^XhB>^<>E6?xt@E+Ul@NG1pbr8^zWA=>h8`Y`4o3Ls9lU<37rt>7;Eh%Q9-DTZXy zi$4ikdf1vzQc&f)CU?t&Y4>&(A=v!PSb6yV9y;U4Bp6bP=Ubt^iY4COUk*M{ zLiN2i67dCQ_cCMe8VeHBlxO|&=wIQZ{_w%HD|*9}I_56GmteS;0v@r>6AA!4=G`sz zi3|!n@f#MB+o}QO7viydXLLt3M*NjlTUekziY`D8&vE#21@tp(&?O?lolSwSbpfRc zuMZVyTAy#zzk@op5K}E3#H1o8alE-FDSd*)iEr)Y_X+{nF0CG82|l#I;O^Sb)Mxx- zv8&w*YGf1YzNUDy(GZdv#{9?8rs%j!TrawDer&-A<=O^ftip#Jf@y3qftfBt#7}40 z2tGi!y8JG&f8Rod0fRn0yQJsO9RSf=SM1aHS7Yf~QbbQC7z-8&L3dO7jAb9%r<&QG zFQRX^Oo9cEd*A5U77Wg*o;&^qwXsh<9iQf-m>uVqD~%)6&p5Od6&r`T6z?T=Z_x82 z*WVu@(74zVC2Y*INl!CQ)t$xe^Aq4Xww{0xqhqW1S*~6;>Z;;?0`!U%noc{INZm#W;cR(P^8Zr7}-xLLm3~??> z$0P=3P~Eu6b}76X>2P5yZ~(`;^`r;CwBCspy9p#q$b9l1(6&mC?3%09xMt`uT>zb_ z3}}9_c{~~6Kw!XLgbd1cQq>^l=q*X`UIYPNX1$gN*1!tK=nfecn1^3(161HL>50}4 zbKJo&%Bb%UN;G*+B4qPA_vIXR<2sQ%`=OtYlkN>+qJMJ@zAE-O$WGftMuHPY9FxoEjr~6_E~5NR?C44L^lvGUuY%`hi9t zYNylRL>U!^i16q5*i>4;@^N}CvGEc5IH3Ic@fo1R-Rfr_BXzfVo;;zzKOF`W6A!ZEN zx)tYs+9du!+P@m+09~Y*a@$_gLic1lB_}THonsG8`EH-@&?PSa9XRoUpky$*J0E&( z4^ohXWTfrrIbA%+M@*2L9>CE+*?7;{c%LIL#Rq#U7B8_o)3106L{$zY3}wg@Ep7;@ zi0gw>{5lt+TmUpf!D}2X8kV+a1QRG@D^OrGa2xUobwVPBFwO%Q(*YWMNEED)7DyY6 z&kLS)3t69fT$2&Y?-QTLYcuWNJ_IZv2#YVTG@V;u(P)c>+lW!Y0bDiD2>G9De@&rp z3{bJL<{9Y1(B!_C&Rf}#<`%F$Gpx- zLDS;*5g~JlltiRI!vui+$90>T4dhZFV853thWZwOve6u;Lj|)ANC@;6n`lXzrDxJX zrwV|WBKYL?Qs4_d0Uj_OETrv-AbwbYLkcqedUDoKL)9F`urQ$U^N$XM|P$*69nLKQ*gVz^@K%#x;e zQvB_8jEyV0W3E&4^7813)+^nEQVXpvUTlQ8a&lbE>s(K{0F4Zdc-uKX z&w(Kq5%#wlVYbP-8Rn`UnCGK>8oPW*>a`ZJe3QS}rxZi>yV?NB6$56X1Ng5v8hfER zy4$<3o3Y~Jw>o*H9;KLF$o0^e5`jr>nB657l^b4*Xh72v@D((JKUGD{sTQPh09F!= z{Qw9(3;4}Zx3~Bu=C0rchj|36&{<*(XmMSl`A2DXN5+}`Vu|#WKcEM!+&<0Vz1wZt zo25KaS?Nipc5j@w43zoYxbOjq!b%NVzF6?jQC0Zn$)7v0Qe{`?02Mt7L@PBIus8K{ zx#^lNV89uiTs8?T7vo}uX3C&i4q_8{BdZjTcf)nQHQpN{uE~A2hW~w~z&w!#Yi6zss@5bRyY8BF~ho2-U(RE`yFN9-X`hu_@n7Kkh~y4z4L+ zyVfppC*tI^dW?G36~lK|G`D~&JqqF2-JLJw3Lt2roAmU`P2h{jZ=Zwz1b*0`E1y^I z&E+n@3HNs!Zk$Xalk}wZ?tmE!!cCeah)0b_F8$VkJI-GC3+sjz4F>OTR~%nu#xRt!f{OWIwgF_%*?xmDUTyfy^-mg+ai;zJt zMnDso;FoN@4yUt@R=hW4a+Q*~+`5aYSDW!~P)#M9-qHMO9Gq!JpP%5wQ2sEEr5P$D zep}2s=)uxP(JhNwsL=Xcv~%9fu4tdW0`|JR(N_ug+|spyYXvj4hE!y#uvhlZ9U!(x z78YW^D^M`cCfhcBwN9(r^3gLE4Q?1M)B&XFC&P!posLsOyYDGhA>m(~6QcvD_V7Y0 zfiP;3`cNEv8O_&6Fa+bcRU#VbTlVtoe=aea&X+HDplmtKKbygkk#E7I>Zr<=dGxdH zET7l%TlU|YN<4>@GuyM7y_(*%#S*|#jMxZ9Ni#YnY3VX#G=8sw(o?oePVfb;Y6HBt z&l+->=q=VrlpnI2ZSrq`2K)q$$=;Qm=e4xOX-3)(Gl+CE8#hp2O0BZJt<{rvBA1WW zcyu4&B$(aitlD>O;!m_zSGg8tV(A5ATx1qn@@vnt4zgYrBjNf9B1Cx3(r~qDhb4o9 zJ#YUO%AhH;-4M2`qnm9n&ozqO-Bp#!32TsWJxmC$PvIr4rJIh zzEZk>ew%h1u9Fzr3WLw!x+Yi0UtANWy{_8dlle_VK{Q>04Ws4h;gTC{e`J6Y&FX~qsA`#FKQmnFoH7iAc zl)`C|vM|C=mGm5N{}54+=}iXMl~YxhMGn-_Ozrvv;Gtu4rx&nPR}_zBmqF3(M%^RC zYyVkt+n}HD`4}=}Iz;p9qwuAQoJ&0R97cMFGA$ZwQ^-qMp_0FJaY*U4Az zO#_UzTTB7s)HEk1-U|;v@mq#Gf#hHbucuWR&9TE%Uk|4s@(j;&&->;55lDdgq}l>e z+o>9P$zEqoYkj6sfV)9I{HygjrM9E7SD4P0R75s{eRe+SRlxbtzC z=6m&{>S;3pye;MY`&ZWEmH$Ky$5Q*W-4slB_fKF^*eTMp@9mKQk{%K*M_R2?HDhWY z%*oe9!;k!5b|XXEOQmQ6S<@3C2ZU09l`Ey>vvMG;gdw_GSq zGI(MmDsWR3Cxa3B`g*$^YmRiCEx%S6wq|}wgh3+l<~n8a_neCjA3okdB)2eLUw$5I$a-6A6BjE zb2fveC9TM4*i6azjn(j3TuF}v#Aj8eN5mBkYT&LaI6C-%vl}Senzl;QmbT(>QnTiM zOe0L>+D2NCln9YOJY@3tMJMn@`%14ALetd+j1$x3p0Qou6QCjN(*$ExG%#3p$#Ir& zZhqURDK8oLf%C>L(1vt$pf}+KnuEG@Tz{FHTtrmP1?wSzF^RE4Px`?!+1Y=w1x@GY z8ygUc<%tmh-ViKKvr=~;C&c-U3onNTumuc%IVXkI4?bhKJ zSX(-}vijz33o#^A3XWYh@8gZI_?scpF)Ov(*32 zt`9D37Mm%W9i40)L8Z9MSjwW*7*?ne*%Cw!DPN}pN+Z~CgHE#{9rIAwr;yo;r5l*? zwfxG_k6Sr?;@lcTM&Ipvhp7;7CDT~O??&G4?h<1XG9O3fQ*=|KrpPV&jC742&zil^ zA-KqrEpGM3=ivW_OeGunyK=pqfd}#w%&LK0m7k#)wh2P>UHlit%r6QJkjOMbh8F@_P!q0m=wKQ--# zKNN5#-^!6p5iFM@B~Wo^PuSXoJl#3Zh5IFo-Gkk6vUfY29>U&8%IEmZ3_`?aaKzoo zS0WF^EyB9L5G7u(^mJB<`sffwC{+9G+kn{A`G;>@7cj=JAj{*XUONduM0YYZunVF z^{h71*Acj&gBZqZ(}K#PM>Q#xk222;B^!+j07HO1z(`VJ>)YB?Gz_8bD!L?P8NheKof*_%PTUdDhKNbA~d_Y^#afD=O3{g%mu3!mj#s2FWeZgy+z!+HXA+aO^tF za1v2REstGU$}S%i@b&$WNlncs^g|ZwmWU(47&RE-SO(4^1Qv7ld+CVS$y=BVe<#MZ zz~xgv)Fd=MLD464GmWkKLlDdRot)}}|f#P?h}6gt;?h5*o}rAakQV)ucqt zn(qxbj2E%!=?e514Y=D7z$}<+&&Blioe|5wbMYY9kCI7E(^RX6Q5J?b~t@pIRK29XQ9?i(H_3oZ5G z>|J`J_NCf{F`p1mN6SbTpV0O;7}Od0pPWcH5w@7)>H?|4gr8^Zm){R!gc-kBQU*t2 zF({RdeD;g-`8jy10jn|4!oGI-A6|4#-t9_?OLh@jiv)VDKt(J0X)1-yed^ z%EO#lfpUHC&S!Jh#ca~LTd=Yf8%gb>JmhH`?|*}PLy(CCG~|KFo5zbf(AE7&uT0BU ztl7JL*CA+wk$?$Z4kjNvkV`vsN9kdL#f-jH>sgHs)Y9~0%4`oB!T1RbZyCu=RB?bj zr|hvkE30O;apOJ*tZ@g0CP~L=QV5;W}u*I|%A?`A|Aj2|6H~Eu-G$dO=cDC$1?m{R4@}u=f2v1!3NKSkQlE({C z3O2QPX!OWRn*ry5UV-sBD^*3>Z89=at%;5*ERuf*4?#&seLBbX%8x`~1^S0h+tp|g z!fbe*zAm#fL0sy=d?hBV!xU<^?C?axwrWdt5vITUfJYdnGyRPNMPTe(mZ2I!r^O}ut@N2z+*x$=vRRx(#yfuk8di@|D>h`{ELRY z3#E$YABOdlZyI*wf3tO(+SxhV+Busz{X^F|pSWSW%7E&3MSg)xv?YWCktiBuNwqeh zvtWy`%>}O>?L)IhcyQsC`MXCm$h=jP&d}Sp>rQO){Zb`qMpd2sml+ABA~N&@VTxx~ z9Dg?e-ju{K`y>;Plq(|Y+85V8xI}-)MGMpcL9ZPIdojCu9cA6YZh^zyg%r`67r!15 z*oVMbiV-2`h_s}C=Pr!0`p)#T#U37XleyC*=G@_w7cOeLl%|L3@Wyhf*6^{23A7OV z@SvWiXp1mImK)Z%u#Rhk7{W)em(&Jj6+bJqlf?F{4onw7ndgJT*pxqjBhVhr63WCU zC3H|6Xg!5it72lNmSOC@0h^q>;Ev;$Qkc^$TW-zFFDHErjshLFxfhT68NFhXpE@7f zlVdrd;FK^j1XR!rRNrOG(M_X#D3Gu;qxxE87A*G$TKVxiR?2CK^sd1GqFZ2aZb389 zWQx=@h&U4P=S<;QD`9YEH2ie_3RaWDAk_qq=2zS}Gm|)$P@wM~%dsj&N1BW&if3Ru zt$3&VL$vc3nA$qv#YmJwXYx39tq`47q_=#wdx-}O>4QxsevNHA5H6HC%81o`0EXT^ zAt=>?QV1Zn_j#)xe5-!oKM?7$-rgKlU94)N6?h2PSOC+ zT}gR<I=6>D#_L=`?cr~##{tuTKlig!L6?h_^ z;1}L(c90CUC@7|Z64@Zs=j-8+HA3Py<_5rhytPgy_?J^TvuX@X`eeREbhde*nEWyO z>qv@%D#HkqT1d6$n3Bssl`#SWzKE0-rznw}3tE3{`f)c@9+Ng+=r|7H_nWPnRYra% zGp2ufHUQeNBtWU4a&#k+3aOmuC^5K^NrR&w$<}q1Vze^Yy;=A&Tm)CvyO?rpR8ObQy-P{0F4kJ=5 z2G69#&Q_`qS%5t!#HXs&CM)~v11q5CoLJzB4tugwAqmgoooQ9I3!Vm0*WGg(^4`Vb zrNJZzK4T989^K4c2J1mdNQ|KYq=WEo7rnR_jWS=$ZO-sV8bv6R2}+npYMR9IoTX*L zsAeqyaf`M<#IyZZ^n5M*QBimMPF34(?h1 z-H1c7R%+uEB*h`TQmc2K@h(^MGgxH2<_h^jI()yZ8ALI zTtg-jn;oMI{S|*;9Tzb1Y!uGEY{YF*pAmFUMk?kZnysM9%oN|zP6j6FNP{XlH!B3% z`5?avfqYE*!Max5K)Fw^JiDA7M_XU$U_g1(r-?uHb~^JW8OxGArY4I55`(mtT8vxb zS+)z52*EO7G4F7R1207jX%9Syh@1|{k6{*CZ>@XVflS$n2~!C0Ymj?^Kj)}LOvrLf zgRH~6m2wVHTwyP!@fTFpP=?3kiStEKtX83lb_8)a^+P3_y_mScfP})KN}0Uud+{3v zlx>$25}XUPiiQOL4G~j$7&Kcahs6<^b=c=1rCHB;@9j6#-=4ULF8$XT!qa zn!wxhKF2Q(A$AmG)@scgSe$jHY@Aa*S^dIX)^j<{VX>qDSU`aSlPr6R1D>6(HCGe0 z;PR>s&zJ0P59R*!&ownW?b)x)*I0>Y8?5j4$487bes%d~;S%+S?GUjzJ$@r$X;OwAsDiuErWF6kwe($D9#p)bCsM~RvMxfTNvYK z%0#xTA>yt5eN?;UPL&1hNBm_=@r{B_Zw`~@jFOK4llQrYB8*(&jf!r$-1AeA9RgYJ z&xNdIB?)ymt}I?Z#*#JGHDwE6+7h*Xyb8c0{pMG8wkA5L_8T}vMk0<<+fnWr7{wqf z3|kK*YKr4Yt?l{dbgqGR^vYZgvqj&UFbWPbIE2f#o0i zX2vlJuX=ch)S_f&Q*W(6t)bXbCe?KLSgI}lpj^=jsq!*aDP`YLJy*|db3a8 z6m%3)&%GLa>Er->T@8B7`EGWR98p!$??#?Axh7b5c*QajLK=!r<1M{T9NhQiSI=4d_e@WyZj}d0C-`8QRxOdUt= zm{GiBubbAps~rA-%zZWJb7B^C?EDoVm{cAUpEl*NnAvcx zr1!L31#)0lx6I0_2L1TBOZ&ygLnjNlmsQ1?DhKI(5TQQ}`FJt7Efa>pq-Bq%)Lmz( z#={p-HhT*}+I*=hNn4{u@4{Q7i|f81*{$Y95lFOKcxqyVaBv5kHnEj`{Mg7&F|wQP zLzyd)cIsuXfqlkKv9Nl`P60GF%ws+ua^cy&MA3M*VK8#>q*>Iob)57H*S&)O=u@+R z$LHKr3(>yOcEtu!rC4zKM%t{PaIbZtI9DaN&}Lh|hSjnWdZ#{?M&E_Lv(VxC^&hPA z-}Msy>qQ9UarcIqpbP}`kNo$)h>eM{g#o>Vje(g7Bb}jzZT&qYgFro{xCtsFDA@mt zW%YzB@gxHR`bYjxSf>BN&TD&<{rt}gMO@Gcx>m42K)7rP@_Fch1}!bSZ(d7Z`spu% z>(;tMUnC+(CmZAe8F@~AeUa+QDhaw;Z4HHp&!=osk+I}%xOE5*WY(?hH0C2;Q`hd7 z$EAtab0O~Yc3-c??V9D?$_=_Vm1ZBe#^(bYUbo2lk7aAMiMFjKwa6jY?&rq`y|3Ge z{(~-DF;8oNsFF3{DJA1zVb>PNEd?F@?Lep9;<4scr=9e=37>63{0shyj&0)l)7P!* zoW0%j+_ueyolh6)@A$4o`lqD>zcqbMF~^qkSl-rC^PaHd%GRdq*yG7mxZ!iUODsvN z-lpB^g}eHVq50B)Q1`}`OZ$gK)5I4yw!d461mF868J{&^vE&Gk<1ONX@4o+(cyQ?t zJJNZG@5<#~sCa$l~XzS+|86rK|a!t1>x!Cd0 zrKx#HK^BjVQGLhz=SCBLdIqZosm)Oohh_&^{d?6FyBR`CyQ_M2iHBvt)o~mG+>QPqN=JuPh$&}N|3kG#{IX&y9tK zE6ZN*!zU1A_mDt)mg;Bt`N_pzb(IbCX2R-c;UIjn!qUd23_I+{^@pp7>r)Bs;>KnZ zDD5<>(ObxPEB0$>U}m>f2HM~af6L`yiK(!LK_maiGr7k3iNaq;W!Yfj5|q~{2AH3( z76^I(g1_U_rRF%oEli4r1D0uoMCy+a#32^^fyQQpL}@jtqR4jcxE35kEa^k?goc$5 za<&g3wee!(8GD;Xm>d^B4kyO6k%d7VLOmk$C+!i7Mv#a{xhpS5rTkV8gBV-zCut~M zAi{w)p^k`5JK)ht1u^aEXcuvg$SlE;@^pd$+y{#3K#e_U^_Ww|E({oq<-#2?d#c+X z?!9|TAztC;O!`q6KmYs$aYGv8qAVihW#AD#jt(-0Gog)wft{1zFwK<>R&fxujUhr9m+o`Y8ib99 zYY;{%#)w2h;#?Fo9yQPqLxDRafS$^=lMCy|AsP9@9$_r;3vpy!qw>P~$IxnZfJZ92 zaHFWeCW#rN5Y|YQlRSSAD*ORia3zi-fVN2gr)Pn(<{p4ZJ9S9>1S^h9Jj!)O#f%O3EGR^R1z7sm zm9a9!P|;=%by(bT@nkH5td%kel1UpyRi%P{uS<9=#+l<_rW8v;i{iE{*SY4B<K_N=j+kA}dL5-I=Cx{y=r7 z{DzgkTbsI51xCwqW*~!0KYiINX#ejY%|S z;dWRd?Fihdaze1@_^-k`5KApFTlTL<3K2ta_~806OO3lAmvKV zEXpqdn=|W=acdFb^M@c*I9dgCiyz6@E`BY7Gb+KbjW!hQJ0BRg25_AN41hh(^)jSB ztz)N<*-Sq!R^{hi-8pfU+9m8VGiOQho=!4C=r_uu)bbnaL=1ac)5Mz=J%)5g-a}2f zMnvJL>XzMn{R!FzP@|*)mn4V3d#|e;XE66Rg7HIP?3hcRAsw}XTg4GmJM~xzQIhWb zX(=F`1IC2l$+C+$L&6Es2Y}`Bh&p6X-j^$BJ-hNs;5${Bz7mgQPZ@1;G|mV6 z{YT^}(dwid*(~IiEdW{J_T>g=`P?fZ5Hup`Xr5H-wFDm!UM zC=&sRA^nY{Xrx7HMa=XOPttFWM^9>$VEEbTAh1|1^`C8Uo-+$9U^WFvnF;f7-(It@Dg&19T}N7YCq1>#aj>?4b5V@K0kg_ zKrd`ggz->-I?_%gzxWj2(qFKnFZ+9JYbhr9j?tJs%RqF=esG8!)0ei5i zK?WQlBqKbN4-%OEb_wx^NLx$f#3+0Z;-X&OZ%l+7iofTyGS3qBdWF2CWT|jIpc$Wy z2{}cwpoQP>ks(B*BHa1?CzO8&p(5N_z$haNoyqtI+>Tqb?RGJWn3@(Q1odT|1&x~% zDrEP&0)A6I8)={u+wV&y!3c^AndD#pZkEPHynMd9XF@FA$=pi_9-kPmGAy=a*mEg` z?`w`grGV|~9FHG$ENzvh8nh!brYs6cP9@(9*31o2+^r^1!Wlx7EDj5ENiW0u+o{18 zus5eF2r?O+mQPXL0X_3PK%)d1a@E7MfXZQK1`x{*w&)oBsTHOM{*=yXuXQ79wk0)| zhN<1YKhFEus$IG^s7XOJd0rx05{;492e0X!R~hZoZa-Mt6!{xxsF_Gwb$T-*@%{ev zP)gWDI}erAbkYrG1#+@M1e>2ZBMxooSulw|hHlUz&`MpfGMI~Y62erArS?N(2vYaQ7K)ji2Z#oz!r2Y@BX(9ml*mzH@aD^}6AFnB*Oan0wthT=Q7`6%>8 z>F5J+0-2hM?eU$fTyil_Cg0wU${15=-a2@Ey!QGi#@ytcdb=M05>valK)^rxu2(={ z9@>rY@o^c(2Rm{39Po64R2?H>;q}&PW*D@)t0+*Yqm?@xO`53 zp5XRvRCl|&6y=MHzTYax+{FKE1$dBWGdT1NAaTFX(UeTg&dKp-4-HtHCmiitNb|*( z&82$c&6O~I@R-UPnPRnjtvB|!t#x&4dcSiCB zsX+tv&igvw;!GlkzbR$UbN2Ja;Kq1$K2kz2J4IzhFLtJtVO4pKuQ>T|H$U@d4Iup_ zv@P|i;&!j8)G>OZqn!$UL&j!oXuipMbtT`XSY+wotgOPt=bl}*QK zhJOORp0hwjrIn*)K~=}6+Rv>5$d07PyrS9ad z_|p);7n@S=x_ru?l4drBd4RA{vg7qltH?ylwl-I6S+|{l;8S0n-{xf6p2V}oRj@JI z|pGO6NrOc=L8lrvd;m*sW@yXFrfdB&QBcRA0Xru8+cZG zIR?N(C2>>H_hRm?00}j_wlePoTvo3~@2jzeiZVE$n^e z6lV5?dsonw1ain~#{2-q?k*(Ro+D#qc=wV4Uc6%GIzHb}@-=L!d=eEJH}0|fxYVZ|Hp^w?h^i|J<$h9hatXLAuK6$N2{;krX^jwrTI+0z;=Ut z`U&tsF#DptGQv6S7p!!__y8He60udugMZmair&7|%&0N?%2LG8p01OB8jW(|#f1kU z&Jc53A+l=6^Ai7A&V)pJMdYXjTE<9)`NVKyfjD1kw#NGCpM65qK@3d}GoOY$0?~J5 z+meLj_Yl+VdEEf;&hjs&vLEHriN;Kd_9%PDf*yn**g#2x10tY?cWF*%b7Qkngr!}b z@**yzZh^DZr;C2!2SMeN{J9Z>dyh)x`8xq4Df*QW;n6#oc`j!55fgF--M-+7#Wq>` z3m*k6o*?<$Y8nAmAm07#p7mHLjPv+_;_)pT!WZ9Y@(~BHA|D!Y<0J?bwiyM8eRhKq zOanb=8aCA{YXJoTQ4n85tJn@5jzaWlh+E>_brm1?*tCfp~Uo$s#OUdZbv*{j%ePk?CeKaj2Ij^in8$WD`B>WLGK z2X)N559G;f`u#;jot-3+GH&90AvdSfKQMPa_6q>bsieOJ(*m3JKGDxT0Sq4naJLVB zLc03ECFL>xazjW3`%(ZQk=S{0c7k@Q?2Kc7BE0O7Y3E>$coQCXuS#8Pxt4O|{H z&o4JV7oY-5ATHzW7wsWX`tR*ubUiwCU{Z#BSv)exp+_6a{GvYlmV zzyJ!&D1{m)^6AfRm2TQB^qMB>s8=5V)a7T*cl^G-^{*^t<)$xZ^!(LUT0f7jBD$uk zT%X?UzK7-i@4!vo-W zKI>ROg635+Zxef&RNcz*3Xd*h?#&<5X&eTJ4#3CB4@4FaO^Vj44KE2EKi~M*rH#{M zu-DHa`u62F=~lBl3asC9&Ks9%`Lnvxel7Agy~odK{~Q2l8pD~{;jXa zkGU}#K#as8qaTS^>km4zHJ+_*9=^!{+Laf;ikq_>va6HOTvkqf&Po5xq#QoNTY=x@ zqc2`n0mo=g?9trGig0hCko>VJ3iy6HL@2I=qrxW#DWg!KL{s#mhW{fA*hP5p4qp-Q z2-D(;4$Y0LZ(<@tJql1mWI&>+a{^$9t3Z<^SN`Moic+D{3mrvq#moL-NggyjLS z#F)Tm6+YBM#?NpQ%F;rH{e^gh`IXisw;=Z*_3kE>z;lOF>BD&HPqAn6+vto=S zlI$G*rv9BN@_jKw>r?D3i(ssAOickpCdMOr&{Ae%<&F?M&g!{*udo@MJuoBR8Rl``pv606Ph-x{`wFgCGe>I zw6Za9l-aQdZuogmSWbmL_@(4Gfr?^t&^&Mi-;=>gD14`Y=%hTrS?@JrR*lLZVkl*k=i3i67I8HNyd6B(#TN4IOR7 zfW{Kji#*K%AtJViagPygB(DSjla&Qc_-Q%X#bEBmZu^B{5W2=svb^&c3*_4J0lx*` zyw$z7^Vsghz3zKu6S{U)dDFr)f2+&PEOk4h+LXs4XD-{3>5UnCNDeDyEMj~8oGYeC zp5+Wg%$tD~CRPC6^}JC-*e8B5beBo)h_~UMalG@p&e+qsU*a}xfTjxY@XlcD4iBsp zkFOXgZ0*cNiX9(MLO_SMhD$L8*17*ji+g&a^J^P6k|fXQ1}#iBQ?P8B2C(T!9F9Zr zFo~eZ)nzg7c8I?zyyC9mfOvI^I5dE?$jweg_UG>r1c<4(C4v55vwuDq<~kfo3d2mq z6{4mS`%|)rIVQZGNCIrXHS6D+R?3DO$M)D;^%i&D(^R;ecCEq0DWh21A)Wi*&on?7 z{OhHhN>`mZuLxz`Tb|ykZMdpe%uU(USbSbjbblL=M^v=wm5m2IaY;jOK&tXunW~Ye z;yjYvV_+)>u{vDZS%%H8-k%8opsP2Fhevy?l}vtX6cd?g zzql(w;e3bsHDpVEOsO?GdiPUR-k2`jOUh=H5a2d2755fkv%jBu$SEc#^Tvp_6*)-f zh#$k>(8-m}vu^Ak1;qa%1JtkCeb6AcD#95)%j;G8dD(q@9K(0Ueo#2{uT9KM#u`rP zfZd#aUSMAVvM)W-N5Jg%`h^=X#`)!N{j#JiSiLJ;nX1h#&)_ zg!A)=Nxrj068pxmXzpJ`Q&y)XdDsn4lyModj=NAdlUo-i(>py)se0aqpF_V`NUnV! z=EA0av@(@@k?XHE7`Uo`i3Z$MU*bMwj>CR<4-dWr3ZPs>EZpq(`h&36pAmok83}=` z?uO^m3dG)8!OEg!`DXlc z0Mx{QIiZ4>>sQ~8pIl#=Cy9YN6`6sICuKu3sCkn0XrHX?t`cX!{Rr5AW5g{qVE4z=@xqCU??Err#P_VoIMtpTJv#KHS`B%Dh-Im@MujjST8kt?ce&OUpsKs&7E^lIlDDLyZNaSInUWOHaenrutmi zZI31~FPRNb1AWGGMz0|<(ilJHPil~L1S$o?U6piR7iz`tW33WolJc3znf>b}8K9%7 z{L{9oNh)qM-iE5>d^SJ5%su5-kJ=9c?tbgP+Pn9Gp2 zoV&!_e=QkMUc2pn|y*z{UFOX<{TY$qBISPg2x>a~=6VAkV6wqr97 z=yw~1V4VAnBL?!s)pCrIrYS(YkpaH-uaL z?0*Wak(ZGJwNNmHxll0TzXa`O7fJ{aeBclQGq#37C0xt+Kg|ByJd{6^vi$n!|FC*c z5%Tzr+WYRe`5R^U-7mOJDI&=KE+(b9ElGKTs1137Q2&yM!9Jw_L<0VQLc{1jl%*1j zZ62B5D@z=PKCg?Y7fKOcE7rN@4LOu&sF)Y8-H@s&eC{>%c(lX3jWEO;Vu-1VOX0>& zxvH0u{WYK8Jr+JfVq^Gj3#0_k_Twp`_GH`6$UGJzWSQH!+%`2-+}A(5B4PabOmih?hi z!QF5|-aKSN-c@<8u86Jt0&XGd`+`zvG0Xm%NM-$_lr48yiBGfCZkiWmrPH!3Sl#5z zK&mYLzcqhj8x?pR1=#wQm7>Rzx&E3!o`WRi?5?c{<7*2DKByzVCWQmsb@vvbwq;vAolzCZl50nP=4JW zI;G`zNE)3Q>UhCPfs>CaFJG`wvGS0WGZ{r&f~Q3h8W11U z#z0fDF%(Gs>}%}Xq(d(`3PgK6J5k#?c6c3hqmP=d&To-uW)c?)Wb0ze$&B$}k^ zE4vn5_|O_(XbdT4EaTUpRKLkt$|ummbw49VZ0N;t_@0fGoNT_EOS7#TuWYO+dnXk* zbl-pP2QCYfjs_Zf_&c1l;Yk#mDX(Q5#fXT|tvNvZXce7wFMtaVkBJfub&!5>*MA*G zmg{p`hic6mV7c)Alikh71<==rN2-~KlG64ZUMZtV)&07%$gzrWw;tvwmw$ z)gb%XVeG5Mn@^(KV)c^v432+#v)eiO%C{Of?j@Gpf#7@;xs+Yu#HVFTMZV!kKD>QU z9I2uuW20?-QhquaPJa$GYjR3t+o(|O#R_^gIK*{YDQjoOoeXeN3TSFH+eFD^n5Iji&yr&~Z3v zmAXN2*bmG)@WoFc{(qXg%CM-`wLNqQ4BevQ3^l-jbcr;mbW4|%lpvwN5{W??hLmpD zpwcBFAYBrY(t?CA(h|ZMzrFW|u+Q&v&bsEBUr)U2TJLk+>sjl**AwsV!(yw_a&wSy zMa&?be(~-A&G0ZRvsF*G8!u_i0JkqbB*|}0a3+&G_6iT)yD_2APZ~g*dG}prGE(Qh z<>MIbFQf52cGg(gNKm^~dG*?z%0^>BO;C(G3uu`rW8Q(j10x$a=lbv1>JHuzGdlNA+-9NIk)&;rVMW6>p(q z3nQ0`mv{D2A^D#>y%I=fWCL_l@W#HqsX0U~aA(NE4N9kYo9e{%x$j3ClBJJ5ROV>d zNZ~)^vPq1|o4on(OP%@Fn^j>M#hKd_x_vs^HH9^z_Q{XSlW6DwMW3Si(UoiVO#*W3 z>Jd%!7Hk$&cv@AOP)8r5o8mN@x2Q$l+6I-{W0u`8rwd?i(KpTPO_XM*oXap}8RNhjMOXOYLbkMJB!tVWQ0Ha{ ztWBfT@o7HR7;BIy&=WGPLrlMZRX~6r)^CG2OfapOKI++7d9@oS1Y&JVRY}$mqvC50ti&NkCqj~-`2XWD`R-@=6iWyDJc5(TAti!(<5|{^Eh$tT|1^# zF0}1v&RvoLBA$43d4JH_`0lqXku|Wf{QBs#-OK}zqAy+lqC>t^|RioPp-wF!gjNSBYqh&{nIM`TfUK&tkrcV*H=KtcwPjI}d)!pe9b zTH*XKEye~I%e49c?TM>Dg;0pu#9=1cYeV!rdj}UIK+BFKqhB{a|4OBoF>x<AVSzLveqkS(+T5wra@4{b8_NR?ZkJ9oFFb|WU?WDZ51%Xr zBqR)q1Lz5PLp`d|&oQ3LfZK-ck{M^n;#z96=J~+P^Xn8R5n&y1b|k6AY^1PvHkLIB zJ4Flvjfr^-6(T{r6eJ0@5Y-4pQc zip*chpOD=vRlE}LVLG0kZnE?fVAfD?HmG{HF-|?Nx65{|;#*|uzRq-2tb9EJvstMp zjnoQ-YVfTTbKJ)n>jqvN)Y{$pT;}t-^(tj6*)uNtC<;AVpP_v1Kde?rI9(z@+`g|LwkHa*zhE2 z52}UMFlmJU)b|R22$Y8)D6hVMulD3>RFaQ^p-Z#Q4wchtQtBaLgxlH7(b zNkEnio%$#poxwE#TSlBB7%%;gaxByC@2F;N5eCH;Tc+SJw@^|MKappw8~a$%Hw#AA z;##51;o7oU2126~DV@=@ckkwy#mHpiV$+jR$z&S_<5Ea4mpkvSLRTI7v+8#kIr~|Q zVJ}i*wXWB(Gz#z_q|{+iF$;N$@YO?$#{rm=ar_;m8=d&TvL>#*XCP5#yH?@Cmatw$ zfbJWKd*YMiTcOV%uZMrU-8Ra;I(VZ8!kGNpV>$XHeey1#Zf@vA%==cjR1S8P&?VYFr#qB)h&kS(Wg*KmUuMK8kc#N1b)eC-GBvoTf#9uhf!XNlYJ1qz;71q-5t03^h3* zW@Aic`P+&lwrr?j$g(O}ia=}RXX}NJRGWma58UR~KhK~?lb+c+B^nkqNdDU@8;q%h zJVEmgf1;HzWFUMDOD7Ap$4<_!a0{o$R=-3r*R!xO*fKyE0NVY(dHfILPl-{#*UE!_ zqlnWa)0I6Ab&$$+qtXfj6SlB~IPr>9*9a1H^-VfCO**EwN*uZ;98aHdpXJn?zA0L{ zlA1sNDY?O% z6+W&(K{8|Pn6k0A$9z8ne06|K8KXxXkImJo2_*-atx2r=4TZnw56se{zmBIR`@M8= z_NfZqj^c*^ct?LaygWH`Se<^0R=s&^e8POmyYXxbp_)vlI>C64^cx6QHycnU4^NF7 z?dp7@UC}~RXdutb9;>%9rO2bpNeyY)l#0w~1f6_ehF5Iin*!r~WpK)y zh58g6>^E*Z!aKi_nhPZ&Yiz0^6Ttg&Bq8>Ej`q5~F?EVbjv`WmzLsd?Wz%NKeOm)l zDyiFU%0>@+cL3O2`?i$%uAM9qp)Le>Paw;Jm6nLb2<5m|vmB7Cg@k*Cul5Kw=l0r( zB|uL5Qq*11Ek*oCjTY3ipEK{l+Z1(zc-Zlu3!+un_{(hv(w~p>m)|IN$xmCCl1VL{ zUKY=#Tt9($jT+RID*z1c+ZNgdEk^JkQz{3uC;+t&gm)W-&_HKUL!1E&OuhT#bl6FS zun!6PDAc~h&GpRytI}TVvF?($%$RgPXcUvjq^%|?=Jq`!ou5Z;VPg2&r zn~dqYm>t}u_c*%?d-GM`(b9(Y=Q$488zGzVqO<%E24mZ{z1ASElkE`KS)zvJ2r#R; z=JQdCEmP`KfRV^-uK&bIluS~EWu|qv^o|J8db6xyz!M$5Fy07!nKmm0my@oh%J9Xc zm(|OjYqOs!(n5&iO-gV#RiBaSJ#%)v`&vZo2rS5ba)WjuUt%R~`%cVKx4G#qLcp*< z#pCrCHJht`u8W3!1jP-IHT`$aj^F$_KhYZYU-N;7FkDL9DKTkIiucl z#vt-G{_WuoaCYrN(f?iZ+FAE$x6vrIkFI;t-%-j8aCZJ3rT*gx^*;bh7tc9Gv)OTq zho}KOE=k)cR5qNaj3p-*ZN6e=fb~IX;MINB7E7h5@r;SF$TFIN3HMj3k&(N@6iQo& zgHcNbe08yRy**0N)~0bqmDBJYhrLz1G;6Zl*SRj#@rMNFr`K=$&aKahV~>#X#gw=t zT_Xj4z9=mq`PeO-S&@5xQ5qKAQeyqaw&DeA{>+1t&OAAnp1G^dqiQCHQamUs8if-y zNxtw4eDe<^t3)%*rXd=C!TxCYz8!+g8mk9}7}Bc4Q74zc_U1Yul@nPiRyg?-D2krQ za4gpUv{x68E=PJTGcmqe$hBXd2-uymfkp#IutpmyLpS1w@YGdKc4tBEdADfdg6fPd z2w{Kwjk98h$9$}fh%fL?pQuyPwqivVM3hr3e@Pa1u>33hl%Fg=_&WLLD@VE($Y>PQ zR-~!-z^}IW2O7KZ3q5*H*!<(EcN&YqqK~{kT;~W6szB8EFP8C+3Kcd;)Np=#(T@ep z-}9Iz*vid(H!s;6j~-Blm|5%WAD=i3lho3Evp1CX!Tlg{a0?eau}n#3qtstG@)PB< z4m*g|S=QBrcMWpa+lfD_*W%Az{dVLlI1{2C;S?PBs$D$H_WBP#BaTEj%%AoLYU%c; zDmfBUdjop0@J};00L(q6=mgEkC5VxIsWj z-wryn-;J4~>8nv_BNg;L;FSx;jp%wad2IE_70&(ZU+vz-Ecsqh+70L|n`p%e;|0eV zT%=PQGu!W37$mNqj%k2E4Y#rXPdj^VKTUva>YxHH#=b1iJ~v-9{EP5)L9BgwZI`9G z=l&EXfBF9|+*P~BaWVg8@#eX|gc;JiodMtio$G8aYjn%xGdE< z4_3a{Kc`8V@6;gU04} Date: Thu, 16 Jul 2020 13:28:00 -0400 Subject: [PATCH 13/13] Fixing a stupid mistake where I used an unquoted value in the mock data for validation, which created a dict that could not be serilized. --- crc/scripts/study_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crc/scripts/study_info.py b/crc/scripts/study_info.py index 94e35249..f274b899 100644 --- a/crc/scripts/study_info.py +++ b/crc/scripts/study_info.py @@ -192,7 +192,7 @@ Returns information specific to the protocol. "workflow_spec_id": "irb_api_details", }, 'protocol': { - id: 0, + 'id': 0, } } }