Source code for veupath_chatbot.services.strategies.plan_validation
"""Strategy plan validation helpers."""
from veupath_chatbot.domain.strategy.ast import StrategyAST, from_dict
from veupath_chatbot.domain.strategy.validate import validate_strategy
from veupath_chatbot.platform.errors import ValidationError
from veupath_chatbot.platform.types import JSONObject
[docs]
def validate_plan_or_raise(plan: JSONObject) -> StrategyAST:
"""Parse and validate a strategy plan, raising typed ValidationError.
:param plan: Plan or strategy dict.
"""
try:
strategy_ast = from_dict(plan)
except Exception as exc:
raise ValidationError(
title="Invalid plan",
errors=[
{"path": "", "message": str(exc), "code": "INVALID_STRATEGY"},
],
) from exc
validation = validate_strategy(strategy_ast)
if not validation.valid:
raise ValidationError(
title="Invalid plan",
errors=[
{"path": err.path, "message": err.message, "code": err.code}
for err in validation.errors
],
)
return strategy_ast