diff --git a/force_bdss/core/verifier.py b/force_bdss/core/verifier.py index 8d53f50315001483b68d043cbe97edc91fffa840..85a2a2d631e8a57026b1c1bdf2bbf8ab4e791de1 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 d137b2122c554233e3d8cf29273cf544a8a03500..421d5de7a572efabdcb9dd685da3077c0570df74 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'))