Skip to content

Commit 0988c72

Browse files
Add new license rule model attributes
To the license Rule class: - Adds is_license_clue attribute - Adds is_deprecated attribute Also implements related processing. Signed-off-by: Ayan Sinha Mahapatra <[email protected]>
1 parent b1ad02f commit 0988c72

14 files changed

+193
-50
lines changed

etc/scripts/licenses/buildrules-template.txt

Lines changed: 84 additions & 42 deletions
Large diffs are not rendered by default.

etc/scripts/licenses/buildrules.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ def cli(licenses_file):
222222
base_name = "false-positive"
223223
elif rule.is_license_intro:
224224
base_name = "license-intro"
225+
elif rule.is_license_clue:
226+
base_name = "license-clue"
225227
else:
226228
base_name = rule.license_expression
227229

etc/scripts/licenses/report_license_rules.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
"is_license_tag",
6262
"is_license_reference",
6363
"is_license_intro",
64+
"is_license_clue",
65+
"is_deprecated",
6466
"has_unknown",
6567
"only_known_words",
6668
"notes",

src/licensedcode/models.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,7 +1189,12 @@ def get_license_tokens():
11891189
yield 'licensed'
11901190

11911191

1192-
def load_rules(rules_data_dir=rules_data_dir, with_checks=True, is_builtin=True):
1192+
def load_rules(
1193+
rules_data_dir=rules_data_dir,
1194+
with_checks=True,
1195+
is_builtin=True,
1196+
ignore_deprecated=True,
1197+
):
11931198
"""
11941199
Return an iterable of rules loaded from rule files in ``rules_data_dir``.
11951200
Optionally check for consistency if ``with_checks`` is True.
@@ -1211,7 +1216,12 @@ def load_rules(rules_data_dir=rules_data_dir, with_checks=True, is_builtin=True)
12111216
space_problems.append(rule_file)
12121217

12131218
try:
1214-
yield Rule.from_file(rule_file=rule_file)
1219+
rule = Rule.from_file(rule_file=rule_file)
1220+
if rule.is_deprecated and ignore_deprecated:
1221+
continue
1222+
else:
1223+
yield rule
1224+
12151225
except Exception as re:
12161226
if with_checks:
12171227
model_errors.append(str(re))
@@ -1387,6 +1397,22 @@ class BasicRule:
13871397
'after. Mutually exclusive from any other is_license_* flag')
13881398
)
13891399

1400+
is_license_clue = attr.ib(
1401+
default=False,
1402+
repr=False,
1403+
metadata=dict(
1404+
help='True if this is rule text is a clue to a license '
1405+
'but cannot be considered in a proper license detection '
1406+
'as a license text/notice/reference/tag/intro as it is'
1407+
'merely a clue and does not actually point to or refer to '
1408+
'the actual license directly. This is still valuable information '
1409+
'useful in determining the license/origin of a file, but this '
1410+
'should not be summarized/present in the license expression for '
1411+
'a package or a file, nor its list of license detections. '
1412+
'considered in the context of the detection that it precedes. '
1413+
'Mutually exclusive from any other is_license_* flag')
1414+
)
1415+
13901416
is_false_positive = attr.ib(
13911417
default=False,
13921418
repr=False,
@@ -1505,6 +1531,19 @@ class BasicRule:
15051531
'built at runtime, such as an SPDX license rule.')
15061532
)
15071533

1534+
is_deprecated = attr.ib(
1535+
default=False,
1536+
repr=False,
1537+
metadata=dict(
1538+
help='Flag set to True if this rule is deleted, '
1539+
'and not to be used anymore in license detection. '
1540+
'This happens usually when a rule is renamed/assigned '
1541+
'to a seperate license-expression, promoted to being a '
1542+
'license text or just plain retired. This is used to '
1543+
'preserve the link to the rule, and therefore make links '
1544+
'to rules as permanent.')
1545+
)
1546+
15081547
###########################################################################
15091548
# lists of clues that can be ignored when detected in this license as they
15101549
# are part of the license or rule text itself
@@ -1769,6 +1808,7 @@ def validate(self, licensing=None, thorough=False):
17691808
self.is_license_reference,
17701809
self.is_license_tag,
17711810
self.is_license_intro,
1811+
self.is_license_clue,
17721812
)
17731813

17741814
has_license_flags = any(license_flags)
@@ -1924,6 +1964,7 @@ def to_reference(self):
19241964
data['is_license_reference'] = self.is_license_reference
19251965
data['is_license_tag'] = self.is_license_tag
19261966
data['is_license_intro'] = self.is_license_intro
1967+
data['is_license_clue'] = self.is_license_clue
19271968
data['is_continuous'] = self.is_continuous
19281969
data['is_builtin'] = self.is_builtin
19291970
data['is_from_license'] = self.is_from_license
@@ -1961,6 +2002,7 @@ def to_dict(self, include_text=False):
19612002
'is_license_reference',
19622003
'is_license_tag',
19632004
'is_license_intro',
2005+
'is_license_clue',
19642006
'is_continuous',
19652007
)
19662008

@@ -2253,7 +2295,9 @@ def load(self, rule_file, with_checks=True):
22532295
self.is_license_tag = data.get('is_license_tag', False)
22542296
self.is_license_reference = data.get('is_license_reference', False)
22552297
self.is_license_intro = data.get('is_license_intro', False)
2298+
self.is_license_clue = data.get('is_license_clue', False)
22562299
self.is_continuous = data.get('is_continuous', False)
2300+
self.is_deprecated = data.get('is_deprecated', False)
22572301

22582302
self.referenced_filenames = data.get('referenced_filenames', []) or []
22592303

src/packagedcode/jar_manifest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ def dget(s):
216216
name = i_title or am_nm or ext_nm or nm
217217
descriptions = [s_title, i_title, nm]
218218

219-
datasource_id =get_datasource_id(package_type=package_type)
219+
datasource_id = get_datasource_id(package_type=package_type)
220220

221221
descriptions = unique(descriptions)
222222
descriptions = [d for d in descriptions if d and d.strip() and d != name]

src/summarycode/score.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ class LicenseFilter(object):
250250
is_license_tag=LicenseFilter(min_coverage=100),
251251
is_license_reference=LicenseFilter(min_score=50, min_coverage=100),
252252
is_license_intro=LicenseFilter(min_score=100, min_coverage=100),
253+
is_license_clue=LicenseFilter(min_score=100, min_coverage=100),
253254
)
254255

255256

@@ -268,6 +269,7 @@ def is_good_license(license_match_object):
268269
('is_license_reference', license_match_object.rule.is_license_reference),
269270
('is_license_tag', license_match_object.rule.is_license_tag),
270271
('is_license_intro', license_match_object.rule.is_license_intro),
272+
('is_license_clue', license_match_object.rule.is_license_clue),
271273
]
272274
)
273275
matched = False

tests/formattedcode/data/common/manifests-expected.yaml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ headers:
2929
system_environment:
3030
operating_system: linux
3131
cpu_architecture: 64
32-
platform: Linux-5.15.0-75-generic-x86_64-with-glibc2.29
33-
platform_version: '#82~20.04.1-Ubuntu SMP Wed Jun 7 19:37:37 UTC 2023'
32+
platform: Linux-5.15.0-76-generic-x86_64-with-glibc2.29
33+
platform_version: '#83~20.04.1-Ubuntu SMP Wed Jun 21 20:23:31 UTC 2023'
3434
python_version: "3.8.10 (default, May 26 2023, 14:05:08) \n[GCC 9.4.0]"
3535
spdx_license_list_version: '3.21'
3636
files_count: 4
@@ -1126,6 +1126,7 @@ license_rule_references:
11261126
is_license_reference: no
11271127
is_license_tag: yes
11281128
is_license_intro: no
1129+
is_license_clue: no
11291130
is_continuous: no
11301131
is_builtin: yes
11311132
is_from_license: no
@@ -1150,6 +1151,7 @@ license_rule_references:
11501151
is_license_reference: yes
11511152
is_license_tag: no
11521153
is_license_intro: no
1154+
is_license_clue: no
11531155
is_continuous: no
11541156
is_builtin: yes
11551157
is_from_license: no
@@ -1174,6 +1176,7 @@ license_rule_references:
11741176
is_license_reference: no
11751177
is_license_tag: yes
11761178
is_license_intro: no
1179+
is_license_clue: no
11771180
is_continuous: no
11781181
is_builtin: yes
11791182
is_from_license: no
@@ -1199,6 +1202,7 @@ license_rule_references:
11991202
is_license_reference: yes
12001203
is_license_tag: no
12011204
is_license_intro: no
1205+
is_license_clue: no
12021206
is_continuous: no
12031207
is_builtin: yes
12041208
is_from_license: no
@@ -1224,6 +1228,7 @@ license_rule_references:
12241228
is_license_reference: no
12251229
is_license_tag: yes
12261230
is_license_intro: no
1231+
is_license_clue: no
12271232
is_continuous: no
12281233
is_builtin: yes
12291234
is_from_license: no
@@ -1248,6 +1253,7 @@ license_rule_references:
12481253
is_license_reference: no
12491254
is_license_tag: no
12501255
is_license_intro: no
1256+
is_license_clue: no
12511257
is_continuous: no
12521258
is_builtin: yes
12531259
is_from_license: no
@@ -1284,6 +1290,7 @@ license_rule_references:
12841290
is_license_reference: no
12851291
is_license_tag: no
12861292
is_license_intro: yes
1293+
is_license_clue: no
12871294
is_continuous: no
12881295
is_builtin: yes
12891296
is_from_license: no
@@ -1311,6 +1318,7 @@ license_rule_references:
13111318
is_license_reference: no
13121319
is_license_tag: yes
13131320
is_license_intro: no
1321+
is_license_clue: no
13141322
is_continuous: no
13151323
is_builtin: yes
13161324
is_from_license: no
@@ -1335,6 +1343,7 @@ license_rule_references:
13351343
is_license_reference: no
13361344
is_license_tag: yes
13371345
is_license_intro: no
1346+
is_license_clue: no
13381347
is_continuous: no
13391348
is_builtin: yes
13401349
is_from_license: no
@@ -1359,6 +1368,7 @@ license_rule_references:
13591368
is_license_reference: no
13601369
is_license_tag: yes
13611370
is_license_intro: no
1371+
is_license_clue: no
13621372
is_continuous: no
13631373
is_builtin: yes
13641374
is_from_license: no
@@ -1383,6 +1393,7 @@ license_rule_references:
13831393
is_license_reference: yes
13841394
is_license_tag: no
13851395
is_license_intro: no
1396+
is_license_clue: no
13861397
is_continuous: no
13871398
is_builtin: yes
13881399
is_from_license: no

tests/formattedcode/data/yaml/package-and-licenses-expected.yaml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ headers:
2929
system_environment:
3030
operating_system: linux
3131
cpu_architecture: 64
32-
platform: Linux-5.15.0-73-generic-x86_64-with-glibc2.29
33-
platform_version: '#80~20.04.1-Ubuntu SMP Wed May 17 14:58:14 UTC 2023'
32+
platform: Linux-5.15.0-76-generic-x86_64-with-glibc2.29
33+
platform_version: '#83~20.04.1-Ubuntu SMP Wed Jun 21 20:23:31 UTC 2023'
3434
python_version: "3.8.10 (default, May 26 2023, 14:05:08) \n[GCC 9.4.0]"
35-
spdx_license_list_version: '3.20'
35+
spdx_license_list_version: '3.21'
3636
files_count: 4
3737
summary:
3838
declared_license_expression: apache-2.0
@@ -369,6 +369,7 @@ license_rule_references:
369369
is_license_reference: no
370370
is_license_tag: no
371371
is_license_intro: no
372+
is_license_clue: no
372373
is_continuous: no
373374
is_builtin: yes
374375
is_from_license: yes
@@ -596,6 +597,7 @@ license_rule_references:
596597
is_license_reference: no
597598
is_license_tag: yes
598599
is_license_intro: no
600+
is_license_clue: no
599601
is_continuous: no
600602
is_builtin: yes
601603
is_from_license: no
@@ -620,6 +622,7 @@ license_rule_references:
620622
is_license_reference: yes
621623
is_license_tag: no
622624
is_license_intro: no
625+
is_license_clue: no
623626
is_continuous: no
624627
is_builtin: yes
625628
is_from_license: no
@@ -644,6 +647,7 @@ license_rule_references:
644647
is_license_reference: yes
645648
is_license_tag: no
646649
is_license_intro: no
650+
is_license_clue: no
647651
is_continuous: yes
648652
is_builtin: yes
649653
is_from_license: no
@@ -668,6 +672,7 @@ license_rule_references:
668672
is_license_reference: no
669673
is_license_tag: no
670674
is_license_intro: no
675+
is_license_clue: no
671676
is_continuous: no
672677
is_builtin: yes
673678
is_from_license: yes

tests/licensedcode/data/additional_licenses/additional_license_combined_test.expected.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@
196196
"is_license_reference": false,
197197
"is_license_tag": true,
198198
"is_license_intro": false,
199+
"is_license_clue": false,
199200
"is_continuous": false,
200201
"is_builtin": true,
201202
"is_from_license": false,
@@ -222,6 +223,7 @@
222223
"is_license_reference": false,
223224
"is_license_tag": false,
224225
"is_license_intro": false,
226+
"is_license_clue": false,
225227
"is_continuous": false,
226228
"is_builtin": false,
227229
"is_from_license": true,
@@ -248,6 +250,7 @@
248250
"is_license_reference": false,
249251
"is_license_tag": false,
250252
"is_license_intro": false,
253+
"is_license_clue": false,
251254
"is_continuous": false,
252255
"is_builtin": false,
253256
"is_from_license": true,
@@ -274,6 +277,7 @@
274277
"is_license_reference": false,
275278
"is_license_tag": false,
276279
"is_license_intro": false,
280+
"is_license_clue": false,
277281
"is_continuous": false,
278282
"is_builtin": false,
279283
"is_from_license": true,
@@ -300,6 +304,7 @@
300304
"is_license_reference": false,
301305
"is_license_tag": false,
302306
"is_license_intro": false,
307+
"is_license_clue": false,
303308
"is_continuous": false,
304309
"is_builtin": false,
305310
"is_from_license": true,

tests/licensedcode/data/additional_licenses/additional_license_directory_test.expected.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"is_license_reference": false,
8686
"is_license_tag": false,
8787
"is_license_intro": false,
88+
"is_license_clue": false,
8889
"is_continuous": false,
8990
"is_builtin": false,
9091
"is_from_license": true,
@@ -111,6 +112,7 @@
111112
"is_license_reference": false,
112113
"is_license_tag": false,
113114
"is_license_intro": false,
115+
"is_license_clue": false,
114116
"is_continuous": false,
115117
"is_builtin": false,
116118
"is_from_license": true,

0 commit comments

Comments
 (0)