|
13 | 13 | from collections import defaultdict |
14 | 14 |
|
15 | 15 | from commoncode import fileutils |
| 16 | +from packageurl import PackageURL |
16 | 17 |
|
17 | 18 | from licensedcode.cache import build_spdx_license_expression |
18 | 19 | from licensedcode.cache import get_cache |
@@ -374,54 +375,51 @@ def parse(cls, location, package_only=True): |
374 | 375 | ) |
375 | 376 | ) |
376 | 377 |
|
377 | | - if ( |
378 | | - 'upstream_type' |
379 | | - and 'name' |
380 | | - and 'version' |
381 | | - and 'licenses' |
382 | | - and 'upstream_address' |
383 | | - in metadata_fields |
384 | | - ): |
385 | | - # TODO: Create function that determines package type from download URL, |
386 | | - # then create a package of that package type from the metadata info |
387 | | - package_data = dict( |
388 | | - datasource_id=cls.datasource_id, |
389 | | - type=metadata_fields.get('upstream_type', cls.default_package_type), |
390 | | - name=metadata_fields.get('name'), |
391 | | - version=metadata_fields.get('version'), |
392 | | - extracted_license_statement=metadata_fields.get('licenses', []), |
393 | | - parties=parties, |
394 | | - homepage_url=metadata_fields.get('upstream_address', ''), |
395 | | - # TODO: Store 'upstream_hash` somewhere |
396 | | - ) |
397 | | - yield models.PackageData.from_data(package_data, package_only=True) |
398 | | - |
399 | | - if ( |
400 | | - 'package_type' |
401 | | - and 'name' |
402 | | - and 'version' |
403 | | - and 'license_expression' |
404 | | - and 'homepage_url' |
405 | | - and 'download_url' |
406 | | - and 'vcs_url' |
407 | | - and 'download_archive_sha1' |
408 | | - and 'vcs_commit_hash' |
409 | | - in metadata_fields |
410 | | - ): |
411 | | - package_data = dict( |
412 | | - datasource_id=cls.datasource_id, |
413 | | - type=metadata_fields.get('package_type', cls.default_package_type), |
414 | | - name=metadata_fields.get('name'), |
415 | | - version=metadata_fields.get('version'), |
416 | | - extracted_license_statement=metadata_fields.get('license_expression', ''), |
417 | | - parties=parties, |
418 | | - homepage_url=metadata_fields.get('homepage_url', ''), |
419 | | - download_url=metadata_fields.get('download_url', ''), |
420 | | - vcs_url=metadata_fields.get('vcs_url', ''), |
421 | | - sha1=metadata_fields.get('download_archive_sha1', ''), |
422 | | - extra_data=dict(vcs_commit_hash=metadata_fields.get('vcs_commit_hash', '')) |
423 | | - ) |
424 | | - yield models.PackageData.from_data(package_data, package_only=True) |
| 378 | + # TODO: Create function that determines package type from download URL, |
| 379 | + # then create a package of that package type from the metadata info |
| 380 | + |
| 381 | + if 'upstream_type' in metadata_fields: |
| 382 | + package_type = metadata_fields['upstream_type'] |
| 383 | + elif 'package_type' in metadata_fields: |
| 384 | + package_type = metadata_fields['package_type'] |
| 385 | + else: |
| 386 | + package_type = cls.default_package_type |
| 387 | + |
| 388 | + if 'licenses' in metadata_fields: |
| 389 | + extracted_license_statement = metadata_fields['licenses'] |
| 390 | + else: |
| 391 | + extracted_license_statement = metadata_fields.get('license_expression') |
| 392 | + |
| 393 | + if 'upstream_address' in metadata_fields: |
| 394 | + homepage_url = metadata_fields['upstream_address'] |
| 395 | + else: |
| 396 | + homepage_url = metadata_fields.get('homepage_url') |
| 397 | + |
| 398 | + |
| 399 | + extra_data = {} |
| 400 | + if 'vcs_commit_hash' in metadata_fields: |
| 401 | + extra_data['vcs_commit_hash'] = metadata_fields['vcs_commit_hash'] |
| 402 | + if 'upstream_hash' in metadata_fields: |
| 403 | + extra_data['upstream_hash'] = metadata_fields['upstream_hash'] |
| 404 | + |
| 405 | + package_data = dict( |
| 406 | + datasource_id=cls.datasource_id, |
| 407 | + type=package_type, |
| 408 | + name=metadata_fields.get('name'), |
| 409 | + version=metadata_fields.get('version'), |
| 410 | + extracted_license_statement=extracted_license_statement, |
| 411 | + parties=parties, |
| 412 | + homepage_url=homepage_url, |
| 413 | + download_url=metadata_fields.get('download_url'), |
| 414 | + vcs_url=metadata_fields.get('vcs_url'), |
| 415 | + sha1=metadata_fields.get('download_archive_sha1'), |
| 416 | + extra_data=extra_data |
| 417 | + ) |
| 418 | + if 'package_url' in metadata_fields: |
| 419 | + package_data.update(PackageURL.from_string(metadata_fields['package_url']).to_dict()) |
| 420 | + |
| 421 | + yield models.PackageData.from_data(package_data, package_only=True) |
| 422 | + |
425 | 423 |
|
426 | 424 | @classmethod |
427 | 425 | def assign_package_to_resources(cls, package, resource, codebase, package_adder): |
|
0 commit comments