|
@@ -276,6 +276,14 @@ def _resolve_pattern_itemset_source(
|
|
|
)
|
|
)
|
|
|
if invalid_itemset_ids:
|
|
if invalid_itemset_ids:
|
|
|
return None, f"invalid itemset_ids: {invalid_itemset_ids}"
|
|
return None, f"invalid itemset_ids: {invalid_itemset_ids}"
|
|
|
|
|
+ if not itemset_ids:
|
|
|
|
|
+ itemset_ids = _extract_itemset_ids_from_text(
|
|
|
|
|
+ source.get("reason"),
|
|
|
|
|
+ source.get("desc"),
|
|
|
|
|
+ source.get("description"),
|
|
|
|
|
+ _read_field(demand_item, "reason"),
|
|
|
|
|
+ _read_field(demand_item, "desc"),
|
|
|
|
|
+ )
|
|
|
if not itemset_ids:
|
|
if not itemset_ids:
|
|
|
return None, "pattern_itemset source missing itemset_ids"
|
|
return None, "pattern_itemset source missing itemset_ids"
|
|
|
|
|
|
|
@@ -391,6 +399,8 @@ def _resolve_elementish_source(
|
|
|
groups.extend({"category_paths": [path]} for path in category_paths)
|
|
groups.extend({"category_paths": [path]} for path in category_paths)
|
|
|
elif category_names:
|
|
elif category_names:
|
|
|
groups.extend({"category_names": [name]} for name in category_names)
|
|
groups.extend({"category_names": [name]} for name in category_names)
|
|
|
|
|
+ elif element_names:
|
|
|
|
|
+ groups.extend({"category_names": [name]} for name in element_names)
|
|
|
|
|
|
|
|
if not groups:
|
|
if not groups:
|
|
|
groups.append(
|
|
groups.append(
|
|
@@ -507,6 +517,17 @@ def _resolve_source_kind(
|
|
|
return ""
|
|
return ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+def _extract_itemset_ids_from_text(*values: Any) -> list[int]:
|
|
|
|
|
+ ids: list[int] = []
|
|
|
|
|
+ for value in values:
|
|
|
|
|
+ if value is None:
|
|
|
|
|
+ continue
|
|
|
|
|
+ text = str(value)
|
|
|
|
|
+ for match in re.finditer(r"itemset\\s*[_#:::-]?\\s*(\\d{3,})", text, flags=re.IGNORECASE):
|
|
|
|
|
+ ids.append(int(match.group(1)))
|
|
|
|
|
+ return _unique_ints(ids)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
def _extract_evidence_refs(demand_item: Any) -> dict[str, Any]:
|
|
def _extract_evidence_refs(demand_item: Any) -> dict[str, Any]:
|
|
|
value = _read_field(demand_item, "evidence_refs", {})
|
|
value = _read_field(demand_item, "evidence_refs", {})
|
|
|
if isinstance(value, str):
|
|
if isinstance(value, str):
|