feat(lea): add dashboard competence promotion dry run
This commit is contained in:
@@ -9,6 +9,10 @@ from core.competences.verdicts import (
|
||||
iter_competence_verdicts,
|
||||
store_competence_verdict,
|
||||
)
|
||||
from core.competences.promotions import (
|
||||
CompetencePromotionError,
|
||||
promote_competence_from_verdicts,
|
||||
)
|
||||
|
||||
|
||||
lea_competences_bp = Blueprint(
|
||||
@@ -59,3 +63,41 @@ def list_competence_verdicts(competence_id: str):
|
||||
"write_back_enabled": False,
|
||||
"yaml_write": False,
|
||||
})
|
||||
|
||||
|
||||
@lea_competences_bp.route("/<competence_id>/promote", methods=["POST"])
|
||||
def promote_competence(competence_id: str):
|
||||
"""Dry-run or apply a supervised dashboard promotion."""
|
||||
|
||||
payload = request.get_json(silent=True) or {}
|
||||
try:
|
||||
promotion = promote_competence_from_verdicts(competence_id, payload)
|
||||
except KeyError:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": f"Competence '{competence_id}' introuvable",
|
||||
}), 404
|
||||
except CompetencePromotionError as exc:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": str(exc),
|
||||
"write_back_enabled": False,
|
||||
"yaml_write": False,
|
||||
}), 400
|
||||
|
||||
status = 200 if promotion.get("dry_run") or promotion.get("duplicate") else 201
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"competence_id": competence_id,
|
||||
"promotion": _public_promotion_payload(promotion),
|
||||
"dry_run": promotion.get("dry_run", False),
|
||||
"write_back_enabled": not promotion.get("dry_run", False),
|
||||
"yaml_write": bool(promotion.get("write_applied", False)),
|
||||
}), status
|
||||
|
||||
|
||||
def _public_promotion_payload(promotion: dict):
|
||||
return {
|
||||
key: value for key, value in promotion.items()
|
||||
if not str(key).startswith("_")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user