MCPcopy Create free account
hub / github.com/aboutcode-org/scancode-toolkit / parse

Method parse

src/packagedcode/nuget.py:209–266  ·  view source on GitHub ↗
(cls, location, package_only=False)

Source from the content-addressed store, hash-verified

207
208 @classmethod
209 def parse(cls, location, package_only=False):
210 with open(location) as loc:
211 parsed = json.load(loc)
212
213 if not parsed:
214 return
215
216 top_dependencies = []
217 for target_framework, packages in parsed.get('dependencies', {}).items():
218 extra_data = dict(
219 target_framework=target_framework,
220 )
221 for package_name, package_info in packages.items():
222 dependencies = cls.get_dependencies(package_info=package_info, scope=target_framework)
223 resolved_package_mapping = dict(
224 datasource_id=cls.datasource_id,
225 type=cls.default_package_type,
226 primary_language=cls.default_primary_language,
227 name=package_name,
228 dependencies=[
229 dep.to_dict() for dep in dependencies
230 ],
231 is_virtual=True,
232 version=package_info.get('resolved'),
233 )
234 resolved_package = models.PackageData.from_data(resolved_package_mapping)
235 package_type = package_info.get('type')
236 if package_type == "Direct":
237 is_direct = True
238 elif package_type == "Transitive":
239 is_direct = False
240 else:
241 raise Exception(f"Unknown package type: {package_type} for package {package_name} in {location}")
242
243
244 version = package_info.get('resolved')
245 requested = package_info.get('requested')
246 dependency = models.DependentPackage(
247 purl=str(PackageURL(type='nuget', name=package_name, version=version)),
248 extracted_requirement=requested or version,
249 is_pinned=True,
250 resolved_package=resolved_package.to_dict(),
251 # We use the target framework as scope since there is no concept of scope in .NET
252 # and we may have different resolutions for different target frameworks
253 scope=target_framework,
254 is_optional=False,
255 is_runtime=True,
256 is_direct=is_direct,
257 )
258 top_dependencies.append(dependency.to_dict())
259 package_data = dict(
260 datasource_id=cls.datasource_id,
261 type=cls.default_package_type,
262 primary_language=cls.default_primary_language,
263 extra_data=extra_data,
264 dependencies=top_dependencies,
265 )
266 yield models.PackageData.from_data(package_data, package_only)

Callers

nothing calls this directly

Calls 6

get_dependenciesMethod · 0.80
from_dataMethod · 0.80
getMethod · 0.65
loadMethod · 0.45
to_dictMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected