Skip to content

Commit c919b7c

Browse files
authored
Merge pull request #357 from nexB/update-sctk
Update sctk to V32.1
2 parents f0ab59a + 58f3696 commit c919b7c

87 files changed

Lines changed: 1724 additions & 1223 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

matchcode/tests/__init__.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#
2+
# Copyright (c) nexB Inc. and others. All rights reserved.
3+
# purldb is a trademark of nexB Inc.
4+
# SPDX-License-Identifier: Apache-2.0
5+
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6+
# See https://github.com/nexB/purldb for support or download.
7+
# See https://aboutcode.org for more information about nexB OSS projects.
8+
#
9+
10+
import os
11+
12+
13+
FIXTURES_REGEN = os.environ.get("MATCHCODE_TEST_FIXTURES_REGEN", False)

matchcode/tests/test_api.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from matchcode.indexing import index_package_directories
1717
from matchcode.utils import load_resources_from_scan
1818
from matchcode.utils import MatchcodeTestCase
19+
from matchcode.tests import FIXTURES_REGEN
1920

2021

2122
class ApproximateDirectoryStructureIndexAPITestCase(MatchcodeTestCase):

matchcode/tests/test_index_packages.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from matchcode.utils import MatchcodeTestCase
2929
from packagedb.models import Package
3030
from packagedb.models import Resource
31+
from matchcode.tests import FIXTURES_REGEN
3132

3233

3334
class IndexPackagesTestCase(MatchcodeTestCase):

matchcode/tests/test_match.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from matchcode.utils import index_packages_sha1
2626
from matchcode.utils import load_resources_from_scan
2727
from matchcode.utils import MatchcodeTestCase
28+
from matchcode.tests import FIXTURES_REGEN
2829

2930

3031
def run_do_match_from_scan(scan_file_location, match_type):
@@ -108,25 +109,25 @@ def test_do_match_package_archive_match(self):
108109
input_file = self.get_test_loc('models/match-test.json')
109110
vc = run_do_match_from_scan(input_file, EXACT_PACKAGE_ARCHIVE_MATCH)
110111
expected = self.get_test_loc('models/match-test-exact-package-results.json')
111-
self.check_codebase(vc, expected, regen=False)
112+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
112113

113114
def test_do_match_approximate_directory_structure_match(self):
114115
input_file = self.get_test_loc('models/match-test.json')
115116
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
116117
expected = self.get_test_loc('models/match-test-approximate-directory-structure-results.json')
117-
self.check_codebase(vc, expected, regen=False)
118+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
118119

119120
def test_do_match_approximate_directory_content_match(self):
120121
input_file = self.get_test_loc('models/match-test.json')
121122
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_CONTENT_MATCH)
122123
expected = self.get_test_loc('models/match-test-approximate-directory-content-results.json')
123-
self.check_codebase(vc, expected, regen=False)
124+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
124125

125126
def test_do_match_package_file_match(self):
126127
input_file = self.get_test_loc('models/match-test.json')
127128
vc = run_do_match_from_scan(input_file, EXACT_FILE_MATCH)
128129
expected = self.get_test_loc('models/match-test-exact-file-results.json')
129-
self.check_codebase(vc, expected, regen=False)
130+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
130131

131132

132133
class MatchNestedPackagesTestCase(MatchcodeTestCase):
@@ -166,7 +167,7 @@ def test_do_match_approximate_directory_structure_match(self):
166167
input_file = self.get_test_loc('match/nested/nested.json')
167168
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
168169
expected = self.get_test_loc('match/nested/nested-expected.json')
169-
self.check_codebase(vc, expected, regen=False)
170+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
170171

171172

172173
class MatchUtilityFunctionsTestCase(MatchcodeTestCase):
@@ -275,52 +276,52 @@ def test_match_ApproximateDirectoryStructureIndex_abbrev_1_0_3(self):
275276
input_file = self.get_test_loc('match/directory-matching/abbrev-1.0.3-i.json')
276277
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
277278
expected = self.get_test_loc('match/directory-matching/abbrev-1.0.3-i-expected.json')
278-
self.check_codebase(vc, expected, regen=False)
279+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
279280

280281
def test_match_ApproximateDirectoryStructureIndex_abbrev_1_0_4(self):
281282
input_file = self.get_test_loc('match/directory-matching/abbrev-1.0.4-i.json')
282283
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
283284
expected = self.get_test_loc('match/directory-matching/abbrev-1.0.4-i-expected.json')
284-
self.check_codebase(vc, expected, regen=False)
285+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
285286

286287
def test_match_ApproximateDirectoryStructureIndex_abbrev_1_0_5(self):
287288
input_file = self.get_test_loc('match/directory-matching/abbrev-1.0.5-i.json')
288289
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
289290
expected = self.get_test_loc('match/directory-matching/abbrev-1.0.5-i-expected.json')
290-
self.check_codebase(vc, expected, regen=False)
291+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
291292

292293
def test_match_ApproximateDirectoryStructureIndex_abbrev_1_0_6(self):
293294
input_file = self.get_test_loc('match/directory-matching/abbrev-1.0.6-i.json')
294295
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
295296
expected = self.get_test_loc('match/directory-matching/abbrev-1.0.6-i-expected.json')
296-
self.check_codebase(vc, expected, regen=False)
297+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
297298

298299
def test_match_ApproximateDirectoryStructureIndex_abbrev_1_0_7(self):
299300
input_file = self.get_test_loc('match/directory-matching/abbrev-1.0.7-i.json')
300301
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
301302
expected = self.get_test_loc('match/directory-matching/abbrev-1.0.7-i-expected.json')
302-
self.check_codebase(vc, expected, regen=False)
303+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
303304

304305
def test_match_ApproximateDirectoryStructureIndex_abbrev_1_0_9(self):
305306
input_file = self.get_test_loc('match/directory-matching/abbrev-1.0.9-i.json')
306307
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
307308
expected = self.get_test_loc('match/directory-matching/abbrev-1.0.9-i-expected.json')
308-
self.check_codebase(vc, expected, regen=False)
309+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
309310

310311
def test_match_ApproximateDirectoryStructureIndex_abbrev_1_1_0(self):
311312
input_file = self.get_test_loc('match/directory-matching/abbrev-1.1.0-i.json')
312313
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
313314
expected = self.get_test_loc('match/directory-matching/abbrev-1.1.0-i-expected.json')
314-
self.check_codebase(vc, expected, regen=False)
315+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
315316

316317
def test_match_ApproximateDirectoryStructureIndex_abbrev_1_1_1(self):
317318
input_file = self.get_test_loc('match/directory-matching/abbrev-1.1.1-i.json')
318319
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
319320
expected = self.get_test_loc('match/directory-matching/abbrev-1.1.1-i-expected.json')
320-
self.check_codebase(vc, expected, regen=False)
321+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)
321322

322323
def test_match_ApproximateDirectoryStructureIndex_get_stdin_3_0_2(self):
323324
input_file = self.get_test_loc('match/directory-matching/get-stdin-3.0.2-i.json')
324325
vc = run_do_match_from_scan(input_file, APPROXIMATE_DIRECTORY_STRUCTURE_MATCH)
325326
expected = self.get_test_loc('match/directory-matching/get-stdin-3.0.2-i-expected.json')
326-
self.check_codebase(vc, expected, regen=False)
327+
self.check_codebase(vc, expected, regen=FIXTURES_REGEN)

matchcode/tests/test_models.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from matchcode.utils import index_package_files_sha1
2626
from matchcode.utils import load_resources_from_scan
2727
from matchcode.utils import MatchcodeTestCase
28+
from matchcode.tests import FIXTURES_REGEN
2829

2930

3031
EXACT_PACKAGE_ARCHIVE_MATCH = 0
@@ -127,7 +128,7 @@ def test_ExactFileIndex_match(self):
127128
resource.save(codebase)
128129

129130
expected = self.get_test_loc('models/exact-file-matching-standalone-test-results.json')
130-
self.check_codebase(codebase, expected, regen=False)
131+
self.check_codebase(codebase, expected, regen=FIXTURES_REGEN)
131132

132133

133134
class ApproximateDirectoryMatchingIndexModelTestCase(MatchcodeTestCase):
@@ -184,7 +185,7 @@ def test_ApproximateDirectoryStructureIndex_match_subdir(self):
184185
resource.save(codebase)
185186

186187
expected = self.get_test_loc('models/directory-matching/async-0.2.9-i-expected-structure.json')
187-
self.check_codebase(codebase, expected, regen=False)
188+
self.check_codebase(codebase, expected, regen=FIXTURES_REGEN)
188189

189190
def test_ApproximateDirectoryContentIndex_match_subdir(self):
190191
scan_location = self.get_test_loc('models/directory-matching/async-0.2.9-i.json')
@@ -207,7 +208,7 @@ def test_ApproximateDirectoryContentIndex_match_subdir(self):
207208
resource.save(codebase)
208209

209210
expected = self.get_test_loc('models/directory-matching/async-0.2.9-i-expected-content.json')
210-
self.check_codebase(codebase, expected, regen=False)
211+
self.check_codebase(codebase, expected, regen=FIXTURES_REGEN)
211212

212213

213214
class MatchcodeModelUtilsTestCase(MatchcodeTestCase):

matchcode/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
from matchcode_toolkit.fingerprinting import hexstring_to_binarray
2323

24+
from matchcode.tests import FIXTURES_REGEN
25+
2426

2527
############## TEST UTILITIES ##############
2628
"""
@@ -48,7 +50,7 @@ def get_test_loc(cls, path):
4850

4951
class CodebaseTester(object):
5052
def check_codebase(self, codebase, expected_codebase_json_loc,
51-
regen=False, remove_file_date=True):
53+
regen=FIXTURES_REGEN, remove_file_date=True):
5254
"""
5355
Check the Resources of the `codebase` Codebase objects are the same
5456
as the data in the `expected_codebase_json_loc` JSON file location,

minecode/mappers/apache.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ def get_packages(self, uri, resource_uri):
5555
package version.
5656
"""
5757
metadata = json.loads(resource_uri.data, object_pairs_hook=OrderedDict)
58-
return build_packages_from_projects(metadata)
58+
return build_packages_from_projects(metadata, uri=uri)
5959

6060

61-
def build_packages_from_projects(metadata):
61+
def build_packages_from_projects(metadata, uri=None):
6262
"""
6363
Yield Package built from Apache a `metadata` mapping
6464
which is a dictionary keyed by project name and values are project_metadata.
@@ -70,6 +70,7 @@ def build_packages_from_projects(metadata):
7070
descriptions = [d for d in (short_desc, long_desc) if d and d.strip()]
7171
description = '\n'.join(descriptions)
7272
common_data = dict(
73+
datasource_id="apache_json",
7374
type='apache',
7475
name=project_name,
7576
description=description,
@@ -96,7 +97,7 @@ def build_packages_from_projects(metadata):
9697
parties = common_data.get('parties')
9798
if not parties:
9899
common_data['parties'] = []
99-
common_data['parties'].append(party)
100+
common_data['parties'].append(party.to_dict())
100101

101102
# license is just a URL in the json file, for example:
102103
# http://usefulinc.com/doap/licenses/asl20
@@ -127,10 +128,16 @@ def build_packages_from_projects(metadata):
127128
rdata['release_date'] = parse_date(release.get('created'))
128129
else:
129130
logger.warn('Unexpected date format for release date: {}'.format(release.get('created')))
130-
package = scan_models.Package(**rdata)
131+
package = scan_models.Package.from_package_data(
132+
package_data=rdata,
133+
datafile_path=uri,
134+
)
131135
yield package
132136
else:
133-
package = scan_models.Package(**common_data)
137+
package = scan_models.Package.from_package_data(
138+
package_data=common_data,
139+
datafile_path=uri,
140+
)
134141
yield package
135142

136143

minecode/mappers/bower.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,15 @@ def build_packages_from_jsonfile(metadata, uri=None, purl=None):
5555
if devdependencies:
5656
for key, value in devdependencies.items():
5757
dev_dependencies.append(
58-
DependentPackage(purl=key, extracted_requirement=value, scope='devdependency')
58+
DependentPackage(purl=key, extracted_requirement=value, scope='devdependency').to_dict()
5959
)
6060

6161
dependencies = content.get('dependencies')
6262
dependencies_build = []
6363
if dependencies:
6464
for key, value in dependencies.items():
6565
dependencies_build.append(
66-
DependentPackage(purl=key, extracted_requirement=value, scope='runtime')
66+
DependentPackage(purl=key, extracted_requirement=value, scope='runtime').to_dict()
6767
)
6868

6969
if name:
@@ -80,6 +80,7 @@ def build_packages_from_jsonfile(metadata, uri=None, purl=None):
8080
vcs_url=vcs_repo,
8181
keywords=keywords_content,
8282
homepage_url=content.get('homepage'),
83+
datasource_id='bower_json',
8384
)
8485

8586
if extracted_license_statement:
@@ -90,7 +91,7 @@ def build_packages_from_jsonfile(metadata, uri=None, purl=None):
9091
parties = common_data.get('parties')
9192
if not parties:
9293
common_data['parties'] = []
93-
common_data['parties'].append(scan_models.Party(name=author_content, role='author',))
94+
common_data['parties'].append(scan_models.Party(name=author_content, role='author',).to_dict())
9495
else:
9596
parties = common_data.get('parties')
9697
if not parties:
@@ -99,7 +100,7 @@ def build_packages_from_jsonfile(metadata, uri=None, purl=None):
99100
for author in author_content:
100101
author_split = author.split(':')
101102
if len(author_split) > 1:
102-
common_data['parties'].append(scan_models.Party(name=author_split[1].strip(), role='author',))
103+
common_data['parties'].append(scan_models.Party(name=author_split[1].strip(), role='author',).to_dict())
103104

104105
dependencies = []
105106
if dependencies_build:
@@ -108,7 +109,10 @@ def build_packages_from_jsonfile(metadata, uri=None, purl=None):
108109
dependencies.extend(dev_dependencies)
109110
if len(dependencies) > 0:
110111
common_data['dependencies'] = dependencies
111-
package = scan_models.Package(**common_data)
112+
package = scan_models.Package.from_package_data(
113+
package_data=common_data,
114+
datafile_path=uri,
115+
)
112116
package.set_purl(purl)
113117
yield package
114118

minecode/mappers/cpan.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def build_packages_from_release_json(metadata, uri=None):
5050
extracted_license_statement = [l for l in release.get('license', []) if l and l.strip()]
5151

5252
common_data = dict(
53+
datasource_id="cpan_release_json",
5354
type='cpan',
5455
name=name,
5556
description=release.get('abstract'),
@@ -58,7 +59,7 @@ def build_packages_from_release_json(metadata, uri=None):
5859
extracted_license_statement=extracted_license_statement,
5960
# the date format passing is like:
6061
# "2014-04-20T21:30:13"
61-
release_date=parse_date(release.get('date'))
62+
release_date=parse_date(release.get('date')),
6263
)
6364

6465
# Get the homepage_url, declared_license and vcs_repository/vcs_tool under resources section.
@@ -101,9 +102,12 @@ def build_packages_from_release_json(metadata, uri=None):
101102
type=scan_models.party_person,
102103
name=release.get('author'), role='author')
103104
common_data['parties'] = common_data.get('parties', [])
104-
common_data['parties'].append(party)
105+
common_data['parties'].append(party.to_dict())
105106

106-
package = scan_models.Package(**common_data)
107+
package = scan_models.Package.from_package_data(
108+
package_data=common_data,
109+
datafile_path=uri,
110+
)
107111
package_url = PackageURL(type='cpan', name=release.get('name'), version=release.get('version'))
108112
package.set_purl(package_url.to_string())
109113
yield package
@@ -173,6 +177,7 @@ def build_packages_from_metafile(metadata, uri=None, purl=None):
173177
# https://spdx.org/spdx-specification-21-web-version#h.49x2ik5
174178
vcs_repo = vcs_tool + '+' + vcs_repo
175179
common_data = dict(
180+
datasource_id="cpan_metadata_json",
176181
type='cpan',
177182
name=name,
178183
description=content.get('abstract', name),
@@ -201,9 +206,9 @@ def build_packages_from_metafile(metadata, uri=None, purl=None):
201206
email=author_email
202207
)
203208

204-
parties.append(party)
209+
parties.append(party.to_dict())
205210

206-
package = scan_models.PackageData(**common_data)
211+
package = scan_models.PackageData.from_data(package_data=common_data)
207212
package.set_purl(purl)
208213
yield package
209214

@@ -260,6 +265,7 @@ def build_packages_from_readmefile(metadata, uri=None, purl=None):
260265
vcs_repo = vcs_tool + '+' + vcs_repo
261266
copyr = content.get('COPYRIGHT and LICENSE')
262267
common_data = dict(
268+
datasource_id="cpan_readme",
263269
type='cpan',
264270
name=name,
265271
description=content.get('ABSTRACT', name),
@@ -284,7 +290,7 @@ def build_packages_from_readmefile(metadata, uri=None, purl=None):
284290
keywords_content = [content.get('KEYWORDS')]
285291
common_data['keywords'] = keywords_content
286292

287-
package = scan_models.PackageData(**common_data)
293+
package = scan_models.PackageData.from_data(package_data=common_data)
288294
package.set_purl(purl)
289295
yield package
290296

0 commit comments

Comments
 (0)