From 9c1f5d84fa2b5c38d0673ac1feeaf5d6f05a330d Mon Sep 17 00:00:00 2001 From: James Johnson <jjohnson@enthought.com> Date: Fri, 29 Jun 2018 16:40:25 +0100 Subject: [PATCH] kpi checks, more details of errors in verifier --- force_bdss/core/verifier.py | 42 ++++++++++++++---------- force_bdss/tests/test_core_mco_driver.py | 4 +-- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/force_bdss/core/verifier.py b/force_bdss/core/verifier.py index 8d53f50..85a2a2d 100644 --- a/force_bdss/core/verifier.py +++ b/force_bdss/core/verifier.py @@ -9,17 +9,14 @@ class VerifierError(HasStrictTraits): error = Str() - def verify_workflow(workflow): """Verifies if the workflow can be executed, and specifies where the error occurs and why. """ result = [] - result.extend(_check_mco(workflow)) result.extend(_check_execution_layers(workflow)) - return result @@ -39,21 +36,26 @@ def _check_mco(workflow): errors.append(VerifierError(subject=mco, error="MCO has no defined parameters")) - for param in mco.parameters: + for idx, param in enumerate(mco.parameters): if len(param.name.strip()) == 0: errors.append(VerifierError(subject=param, - error="Parameter has empty name")) + error="Parameter {} " + "has empty name".format(idx))) if len(param.type.strip()) == 0: errors.append(VerifierError(subject=param, - error="Parameter has empty type")) + error="Parameter {} " + "has empty type".format(idx))) - for kpi in mco.kpis: + for idx, kpi in enumerate(mco.kpis): if len(kpi.name.strip()) == 0: errors.append(VerifierError(subject=kpi, - error="Kpi has empty name")) + error="KPI {} has empty name".format( + idx))) if len(kpi.objective.strip()) == 0: errors.append(VerifierError(subject=kpi, - error="Kpi objective is not set")) + error="KPI {} has empty " + "objective".format(idx))) + return errors @@ -71,17 +73,19 @@ def _check_execution_layers(workflow): return errors - for layer in layers: + for idx, layer in enumerate(layers): if len(layer.data_sources) == 0: errors.append(VerifierError(subject=layer, - error="Layer has no data sources")) + error="Layer {} has no " + "data sources".format(idx))) for ds in layer.data_sources: - errors.extend(_check_data_source(ds)) + errors.extend(_check_data_source(ds, idx)) return errors -def _check_data_source(data_source_model): + +def _check_data_source(data_source_model, layer_no): errors = [] factory = data_source_model.factory @@ -108,23 +112,27 @@ def _check_data_source(data_source_model): if len(input_slots) != len(data_source_model.input_slot_info): errors.append(VerifierError( subject=data_source_model, - error="Missing input slot name assignment")) + error="Missing input slot name assignment " + "in layer {}".format(layer_no))) for idx, info in enumerate(data_source_model.input_slot_info): if len(info.name.strip()) == 0: errors.append(VerifierError( subject=data_source_model, - error="Undefined name for input parameter {}".format(idx))) + error="Undefined name for input " + "parameter {} in layer {}".format(idx, layer_no))) if len(output_slots) != len(data_source_model.output_slot_info): errors.append(VerifierError( subject=data_source_model, - error="Missing output slot name assignment")) + error="Missing output slot name assignment " + "in layer {}".format(layer_no))) for idx, info in enumerate(data_source_model.output_slot_info): if len(info.name.strip()) == 0: errors.append(VerifierError( subject=data_source_model, - error="Undefined name for output parameter {}".format(idx))) + error="Undefined name for output " + "parameter {} in layer {}".format(idx, layer_no))) return errors diff --git a/force_bdss/tests/test_core_mco_driver.py b/force_bdss/tests/test_core_mco_driver.py index d137b21..421d5de 100644 --- a/force_bdss/tests/test_core_mco_driver.py +++ b/force_bdss/tests/test_core_mco_driver.py @@ -233,6 +233,6 @@ class TestCoreMCODriver(unittest.TestCase): ('force_bdss.core_mco_driver', 'ERROR', 'MCO has no defined parameters'), ('force_bdss.core_mco_driver', 'ERROR', - 'Missing input slot name assignment'), + 'Missing input slot name assignment in layer 0'), ('force_bdss.core_mco_driver', 'ERROR', - 'Missing output slot name assignment')) + 'Missing output slot name assignment in layer 0')) -- GitLab