Skip to content
Snippets Groups Projects
Commit 9c1f5d84 authored by James Johnson's avatar James Johnson
Browse files

kpi checks, more details of errors in verifier

parent 7a88b086
No related branches found
No related tags found
1 merge request!163Verifier Additions
......@@ -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
......@@ -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'))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment