"""评析目标名单:主榜与观察档转点后缀式、去重、名次;写入可注入。""" import review_targets as rt def t(name, cond): print((" ok " if cond else " FAIL") + name) assert cond, name def main(): snap = {"main": [{"code": "SH600519", "name": "贵州茅台"}, {"code": "SZ300750", "name": "宁德时代"}, {"code": "SH600519"}], "observe": [{"code": "SZ000001", "name": "平安银行"}, {"code": "bad"}]} rows = rt.build_rows("2026-09-08", snap["main"], snap["observe"]) t("点后缀式且去重", [r["ts_code"] for r in rows] == ["600519.SH", "300750.SZ", "000001.SZ"]) t("来源与名次", rows[0]["source"] == "main" and rows[0]["rank"] == 1 and rows[2]["source"] == "observe" and rows[2]["rank"] == 1) got = {} out = rt.persist("2026-09-08", snap, write=lambda ds, rs: got.setdefault(ds, rs)) t("写入可注入且读数正确", out["rows"] == 3 and out["main"] == 2 and len(got["2026-09-08"]) == 3) t("认不出的代码丢弃", all(len(r["ts_code"]) == 9 for r in rows)) shown = {"main": [{"code": "SH600519"}] * 3, "observe": [], "main_shown": [{"code": "SZ300750"}], "observe_shown": [{"code": "SZ000001"}]} out2 = rt.persist("2026-09-09", shown, write=lambda ds, rs: got.setdefault(ds, rs)) t("优先取展示给人的那份候选单", out2["rows"] == 2 and got["2026-09-09"][0]["ts_code"] == "300750.SZ") print("ALL OK — 评析目标名单") if __name__ == "__main__": main()