# pbl_evidence/api/pbl_evidence_query.dspy # M5b 契约③:证据分页查询(含 timestamp + payload,US-17「证据不只是分数」)。 # 支持 blueprint_id / learner_id / session_id / artifact_id / evidence_type / # evidence_types / time_from,time_to / page / rows;预览数据默认过滤(Q-OPEN-10)。 # dspy 铁律:无 import、无 ServerEnv()、无 f-string、显式 return; # 日志/异常一律字符串拼接(dspy-file-implementation-spec 硬规则 6)。 debug('pbl_evidence/api/pbl_evidence_query.dspy: START params_kw=' + str(dict(params_kw))) try: kw = dict(params_kw) for flag in ('include_preview', 'include_student_private'): if isinstance(kw.get(flag), str): kw[flag] = kw[flag].strip().lower() in ('1', 'true', 'yes', 'y') res = await pbl_evidence_query(**kw) status = 'OK' if res.get('ok') else 'ERROR' debug('pbl_evidence_query.dspy: DONE total=' + str(res.get('total')) + ' page=' + str(res.get('page')) + ' rows=' + str(len(res.get('rows') or []))) result = {'status': status, 'data': res, 'message': res.get('message') or '', 'total': res.get('total')} return result except Exception as e: error('pbl_evidence_query.dspy: FAIL ' + str(format_exc())) return {'status': 'ERROR', 'data': None, 'message': str(e)}