@sh.add_function(dsp, outputs=['validated_plan'], **_kw)
def validate_plan(
input_type, plan=None, declaration_mode=False, hard_validation=False,
type_approval_mode=False):
"""
Validate plan data.
:param input_type:
Type of file input.
:type input_type: str
:param plan:
Plan data.
:type plan: dict
:param declaration_mode:
Use only the declaration data.
:type declaration_mode: bool
:param hard_validation:
Add extra data validations.
:type hard_validation: bool
:param type_approval_mode:
Is launched for TA?
:type type_approval_mode: bool
:return:
Validated plan data.
:rtype: dict
"""
import pandas as pd
if plan and declaration_mode:
msg = 'Simulation plan cannot be executed in declaration mode!\n' \
'If you want to execute it remove -DM or -TA from the cmd.'
log.warning(msg)
return []
import os.path as osp
from ..excel import _parse_values as parse_key
from ..schema import define_data_schema as _schema
validated_plan, e, keys = [], {}, {'id', 'base', 'run_base'}
validate, add = _schema().validate, validated_plan.append
for _, d in pd.DataFrame(plan or []).iterrows():
d = dict(d.dropna(how='all'))
d['base'] = osp.abspath(d['base'])
i, data, p_id = {}, {}, 'plan id:{}'.format(d['id'])
for k, v in parse_key(sh.selector(set(d) - keys, d), where='in plan'):
k, inp = (p_id,) + k, sh.get_nested_dicts(i, *k[1:-1])
v = _add_validated_input(inp, validate, k, v, e)
if v is not sh.NONE:
sh.get_nested_dicts(data, '.'.join(k[2:-1]))[k[-1]] = v
e = _mode_parser(
type_approval_mode, declaration_mode, hard_validation, i, e,
input_type
)[1]
add(sh.combine_dicts({'data': data}, base=sh.selector(keys, d)))
if _log_errors_msg(e):
return sh.NONE
return validated_plan