|
2 | 2 | from metacheck.utils.pitfall_utils import extract_metadata_source_filename |
3 | 3 |
|
4 | 4 |
|
5 | | -def extract_requirements_from_metadata(somef_data: Dict) -> Optional[Dict]: |
| 5 | +def extract_requirements_from_metadata(somef_data: Dict) -> List[Dict]: |
6 | 6 | """ |
7 | 7 | Extract requirements from metadata files in SoMEF output. |
8 | | - Returns a dict with source, requirements info, or None if not found. |
| 8 | + Returns a list of dicts with source and requirements info. |
9 | 9 | """ |
10 | 10 | if "requirements" not in somef_data: |
11 | | - return None |
| 11 | + return [] |
12 | 12 |
|
13 | 13 | requirements_entries = somef_data["requirements"] |
14 | 14 | if not isinstance(requirements_entries, list): |
15 | | - return None |
| 15 | + return [] |
16 | 16 |
|
17 | 17 | metadata_sources = ["codemeta.json", "DESCRIPTION", "composer.json", "package.json", "pom.xml", "pyproject.toml", |
18 | 18 | "requirements.txt", "setup.py"] |
19 | 19 |
|
| 20 | + results = [] |
20 | 21 | for entry in requirements_entries: |
21 | 22 | if "source" in entry: |
22 | 23 | source = entry["source"] |
23 | 24 | if any(meta_file in source for meta_file in metadata_sources): |
24 | 25 | if "result" in entry: |
25 | | - return { |
| 26 | + results.append({ |
26 | 27 | "source": source, |
27 | 28 | "requirement": entry["result"] |
28 | | - } |
| 29 | + }) |
29 | 30 |
|
30 | | - return None |
| 31 | + return results |
31 | 32 |
|
32 | 33 |
|
33 | 34 | def check_requirement_has_version(requirement: Dict) -> bool: |
@@ -97,19 +98,27 @@ def detect_unversioned_requirements(somef_data: Dict, file_name: str) -> Dict: |
97 | 98 | "percentage_unversioned": 0.0 |
98 | 99 | } |
99 | 100 |
|
100 | | - requirements_data = extract_requirements_from_metadata(somef_data) |
| 101 | + requirements_data_list = extract_requirements_from_metadata(somef_data) |
101 | 102 |
|
102 | | - if not requirements_data: |
| 103 | + if not requirements_data_list: |
103 | 104 | return result |
104 | 105 |
|
105 | | - result["metadata_source"] = requirements_data["source"] |
| 106 | + result["metadata_source"] = requirements_data_list[0]["source"] |
| 107 | + result["metadata_source_file"] = extract_metadata_source_filename(requirements_data_list[0]["source"]) |
106 | 108 |
|
107 | | - total_reqs, unversioned_count, unversioned_names = analyze_requirements_versions(requirements_data) |
| 109 | + total_reqs = 0 |
| 110 | + unversioned_count = 0 |
| 111 | + unversioned_names = [] |
| 112 | + |
| 113 | + for req_data in requirements_data_list: |
| 114 | + cur_total, cur_unversioned, cur_names = analyze_requirements_versions(req_data) |
| 115 | + total_reqs += cur_total |
| 116 | + unversioned_count += cur_unversioned |
| 117 | + unversioned_names.extend(cur_names) |
108 | 118 |
|
109 | 119 | result["total_requirements"] = total_reqs |
110 | 120 | result["unversioned_count"] = unversioned_count |
111 | 121 | result["unversioned_requirements"] = unversioned_names |
112 | | - result["metadata_source_file"] = extract_metadata_source_filename(requirements_data["source"]) |
113 | 122 |
|
114 | 123 | if total_reqs > 0: |
115 | 124 | result["percentage_unversioned"] = round((unversioned_count / total_reqs) * 100, 2) |
|
0 commit comments