(cls, location, package_only=False)
| 1161 | |
| 1162 | @classmethod |
| 1163 | def parse(cls, location, package_only=False): |
| 1164 | |
| 1165 | with open(location) as f: |
| 1166 | content = f.read() |
| 1167 | |
| 1168 | data = json.loads(content) |
| 1169 | installed_packages = data.get('installed') |
| 1170 | if not installed_packages: |
| 1171 | return |
| 1172 | |
| 1173 | main_package_metadata = {} |
| 1174 | dependencies = [] |
| 1175 | |
| 1176 | direct_deps_of_main_package = [] |
| 1177 | |
| 1178 | for package_metadata in installed_packages: |
| 1179 | package_metadata_dep = package_metadata.get('metadata') |
| 1180 | is_requested = package_metadata.get('requested') |
| 1181 | |
| 1182 | # `direct_url` is only present for root package |
| 1183 | # `requested` is true for root package and direct dependencies only |
| 1184 | if is_requested and 'direct_url' in package_metadata: |
| 1185 | main_package_metadata = package_metadata_dep |
| 1186 | main_package_requires = main_package_metadata.get('requires_dist') |
| 1187 | dependencies_for_main = get_requires_dependencies( |
| 1188 | requires=main_package_requires, |
| 1189 | ) |
| 1190 | direct_deps_of_main_package.extend([ |
| 1191 | get_base_purl(dep.purl) |
| 1192 | for dep in dependencies_for_main |
| 1193 | ]) |
| 1194 | continue |
| 1195 | |
| 1196 | package_data_dep = cls.get_resolved_package_from_metadata( |
| 1197 | metadata=package_metadata_dep, |
| 1198 | package_only=package_only, |
| 1199 | ) |
| 1200 | dep_purl = package_data_dep.purl |
| 1201 | dependency = models.DependentPackage( |
| 1202 | purl=dep_purl, |
| 1203 | extracted_requirement=None, |
| 1204 | scope=None, |
| 1205 | is_runtime=True, |
| 1206 | is_optional=False, |
| 1207 | is_direct=False, |
| 1208 | is_pinned=True, |
| 1209 | resolved_package=package_data_dep.to_dict() |
| 1210 | ) |
| 1211 | if is_requested: |
| 1212 | dependency.is_direct = True |
| 1213 | dependencies.append(dependency) |
| 1214 | |
| 1215 | dependency_mappings = [] |
| 1216 | resolved_main_dependencies = [] |
| 1217 | |
| 1218 | # Update is_direct for direct dependencies |
| 1219 | for dep in dependencies: |
| 1220 | base_purl = get_base_purl(dep.purl) |
nothing calls this directly
no test coverage detected