更新: 1 个文件 - 2026-03-18 11:26:00
这个提交包含在:
@@ -70,6 +70,45 @@ def _merge_preserved_records(
|
|||||||
return preserved_advisories + advisories, preserved_triage + triage
|
return preserved_advisories + advisories, preserved_triage + triage
|
||||||
|
|
||||||
|
|
||||||
|
def _merge_advisory_records(
|
||||||
|
advisories: List[AdvisoryRecord],
|
||||||
|
incoming: List[AdvisoryRecord],
|
||||||
|
) -> List[AdvisoryRecord]:
|
||||||
|
merged: Dict[str, AdvisoryRecord] = {item.canonical_id: item for item in advisories}
|
||||||
|
for item in incoming:
|
||||||
|
merged[item.canonical_id] = item
|
||||||
|
return sorted(merged.values(), key=lambda item: (item.system_id, item.canonical_id))
|
||||||
|
|
||||||
|
|
||||||
|
def _merge_triage_records(
|
||||||
|
triage: List[Dict[str, Any]],
|
||||||
|
incoming: List[Dict[str, Any]],
|
||||||
|
) -> List[Dict[str, Any]]:
|
||||||
|
merged: Dict[str, Dict[str, Any]] = {}
|
||||||
|
for item in triage:
|
||||||
|
canonical_id = item.get("canonical_id")
|
||||||
|
if canonical_id:
|
||||||
|
merged[canonical_id] = item
|
||||||
|
for item in incoming:
|
||||||
|
canonical_id = item.get("canonical_id")
|
||||||
|
if canonical_id:
|
||||||
|
merged[canonical_id] = item
|
||||||
|
return sorted(
|
||||||
|
merged.values(),
|
||||||
|
key=lambda item: (item.get("system_id", ""), item.get("canonical_id", "")),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _merge_existing_registry(
|
||||||
|
advisories: List[AdvisoryRecord],
|
||||||
|
triage: List[Dict[str, Any]],
|
||||||
|
) -> tuple[List[AdvisoryRecord], List[Dict[str, Any]]]:
|
||||||
|
return (
|
||||||
|
_merge_advisory_records(_load_existing_advisories(), advisories),
|
||||||
|
_merge_triage_records(_load_existing_triage(), triage),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _load_existing_selection(
|
def _load_existing_selection(
|
||||||
full_source_map: Dict[str, Any],
|
full_source_map: Dict[str, Any],
|
||||||
source_map: Dict[str, Any],
|
source_map: Dict[str, Any],
|
||||||
@@ -202,10 +241,10 @@ def pipeline(
|
|||||||
advisories = route_advisories(source_map, advisories)
|
advisories = route_advisories(source_map, advisories)
|
||||||
if hotlane_only:
|
if hotlane_only:
|
||||||
advisories, triage = _select_hotlane(advisories, triage)
|
advisories, triage = _select_hotlane(advisories, triage)
|
||||||
|
advisories, triage = _merge_existing_registry(advisories, triage)
|
||||||
change_summary = _summarize_changes(advisories)
|
change_summary = _summarize_changes(advisories)
|
||||||
render_map = source_map
|
render_map = source_map
|
||||||
if len(source_map["systems"]) != len(full_source_map["systems"]):
|
if len(source_map["systems"]) != len(full_source_map["systems"]):
|
||||||
advisories, triage = _merge_preserved_records(source_map, advisories, triage)
|
|
||||||
render_map = full_source_map
|
render_map = full_source_map
|
||||||
_write_outputs(render_map, advisories, triage, failures, change_summary)
|
_write_outputs(render_map, advisories, triage, failures, change_summary)
|
||||||
return advisories, triage, failures, change_summary
|
return advisories, triage, failures, change_summary
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户