Skip to content

Commit 8f7875b

Browse files
committed
combine paths for different bzl versions
* by combining the paths we ensure to extract maximal information * I also added the possibility to extract information from a 'package_url' field Signed-off-by: Adrian Braemer <[email protected]>
1 parent bdb908c commit 8f7875b

File tree

3 files changed

+56
-46
lines changed

3 files changed

+56
-46
lines changed

src/packagedcode/build.py

+22-46
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from collections import defaultdict
1414

1515
from commoncode import fileutils
16+
from packageurl import PackageURL
1617

1718
from licensedcode.cache import build_spdx_license_expression
1819
from licensedcode.cache import get_cache
@@ -374,52 +375,27 @@ def parse(cls, location, package_only=True):
374375
)
375376
)
376377

377-
if (
378-
'upstream_type' in metadata_fields
379-
and 'name' in metadata_fields
380-
and 'version' in metadata_fields
381-
and 'licenses' in metadata_fields
382-
and 'upstream_address' in metadata_fields
383-
):
384-
# TODO: Create function that determines package type from download URL,
385-
# then create a package of that package type from the metadata info
386-
package_data = dict(
387-
datasource_id=cls.datasource_id,
388-
type=metadata_fields.get('upstream_type', cls.default_package_type),
389-
name=metadata_fields.get('name'),
390-
version=metadata_fields.get('version'),
391-
extracted_license_statement=metadata_fields.get('licenses', []),
392-
parties=parties,
393-
homepage_url=metadata_fields.get('upstream_address', ''),
394-
# TODO: Store 'upstream_hash` somewhere
395-
)
396-
yield models.PackageData.from_data(package_data, package_only=True)
397-
398-
if (
399-
'package_type' in metadata_fields
400-
and 'name' in metadata_fields
401-
and 'version' in metadata_fields
402-
and 'license_expression' in metadata_fields
403-
and 'homepage_url' in metadata_fields
404-
and 'download_url' in metadata_fields
405-
and 'vcs_url' in metadata_fields
406-
and 'download_archive_sha1' in metadata_fields
407-
and 'vcs_commit_hash' in metadata_fields
408-
):
409-
package_data = dict(
410-
datasource_id=cls.datasource_id,
411-
type=metadata_fields.get('package_type', cls.default_package_type),
412-
name=metadata_fields.get('name'),
413-
version=metadata_fields.get('version'),
414-
extracted_license_statement=metadata_fields.get('license_expression', ''),
415-
parties=parties,
416-
homepage_url=metadata_fields.get('homepage_url', ''),
417-
download_url=metadata_fields.get('download_url', ''),
418-
vcs_url=metadata_fields.get('vcs_url', ''),
419-
sha1=metadata_fields.get('download_archive_sha1', ''),
420-
extra_data=dict(vcs_commit_hash=metadata_fields.get('vcs_commit_hash', ''))
421-
)
422-
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+
package_data = dict(
381+
datasource_id=cls.datasource_id,
382+
type=metadata_fields.get('upstream_type', metadata_fields.get('package_type', cls.default_package_type)),
383+
name=metadata_fields.get('name'),
384+
version=metadata_fields.get('version'),
385+
extracted_license_statement=metadata_fields.get('licenses', metadata_fields.get('license_expression')),
386+
parties=parties,
387+
homepage_url=metadata_fields.get('upstream_address', metadata_fields.get('homepage_url')),
388+
download_url=metadata_fields.get('download_url'),
389+
vcs_url=metadata_fields.get('vcs_url'),
390+
sha1=metadata_fields.get('download_archive_sha1'),
391+
# TODO: Store 'upstream_hash` somewhere
392+
)
393+
if 'vcs_commit_hash' in metadata_fields:
394+
package_data["extra_data"] = dict(vcs_commit_hash=metadata_fields['vcs_commit_hash'])
395+
if 'package_url' in metadata_fields:
396+
package_data.update(PackageURL.from_string(metadata_fields['package_url']).to_dict())
397+
yield models.PackageData.from_data(package_data, package_only=True)
398+
423399

424400
@classmethod
425401
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
METADATA = {
2+
"licenses": [
3+
"BSD-3-Clause",
4+
],
5+
"maintainers": [
6+
"oss_foundation",
7+
],
8+
"name": "androidx.compose.animation:animation",
9+
"upstream_address": "https://developer.android.com/jetpack/androidx/releases/compose-animation#0.0.1",
10+
"version": "0.0.1",
11+
"package_url" : "pkg:maven/androidx.compose.animation/[email protected]"
12+
}

tests/packagedcode/test_build.py

+22
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,28 @@ def test_MetadataBzl_parse(self):
103103
)
104104
expected_packages = [models.PackageData.from_data(package_data=package_data, package_only=True)]
105105
compare_package_results(expected_packages, result_packages)
106+
107+
def test_MetadataBzl_parse_with_package_url(self):
108+
test_file = self.get_test_loc('metadatabzl/with-package-url/METADATA.bzl')
109+
result_packages = build.BuckMetadataBzlHandler.parse(test_file, package_only=True)
110+
package_data = dict(
111+
datasource_id=build.BuckMetadataBzlHandler.datasource_id,
112+
name='animation',
113+
namespace='androidx.compose.animation',
114+
type='maven',
115+
version='0.0.1',
116+
extracted_license_statement=['BSD-3-Clause'],
117+
parties=[
118+
models.Party(
119+
type=models.party_org,
120+
name='oss_foundation',
121+
role='maintainer'
122+
)
123+
],
124+
homepage_url='https://developer.android.com/jetpack/androidx/releases/compose-animation#0.0.1',
125+
)
126+
expected_packages = [models.PackageData.from_data(package_data=package_data, package_only=True)]
127+
compare_package_results(expected_packages, result_packages)
106128

107129
def test_MetadataBzl_recognize_new_format(self):
108130
test_file = self.get_test_loc('metadatabzl/new-format/METADATA.bzl')

0 commit comments

Comments
 (0)