"""问题和选项规范化工具""" import uuid from typing import Any def normalize_options(raw_options: Any) -> list[dict[str, str]]: """规范化选项列表""" if not isinstance(raw_options, list): return [] options: list[dict[str, str]] = [] for item in raw_options: if isinstance(item, dict): label = str(item.get("label") or item.get("value") or "").strip() value = str(item.get("value") or item.get("label") or "").strip() else: label = str(item).strip() value = label if label and value: options.append({"label": label, "value": value}) return options def normalize_questions(raw_questions: Any, default_question_id_prefix: str = "q") -> list[dict[str, Any]]: """规范化问题列表""" if not isinstance(raw_questions, list): return [] questions: list[dict[str, Any]] = [] for idx, item in enumerate(raw_questions): if not isinstance(item, dict): continue question = str(item.get("question") or "").strip() if not question: continue question_id = str(item.get("question_id") or f"{default_question_id_prefix}-{idx + 1}").strip() if not question_id: question_id = str(uuid.uuid4()) normalized_question: dict[str, Any] = { "question_id": question_id, "question": question, "options": normalize_options(item.get("options")), "multi_select": bool(item.get("multi_select", False)), "allow_other": bool(item.get("allow_other", True)), } operation = item.get("operation") if isinstance(operation, str) and operation.strip(): normalized_question["operation"] = operation.strip() questions.append(normalized_question) return questions