Skip to content

Commit 84831f3

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 84831f3

File tree

9 files changed

+164
-45
lines changed

9 files changed

+164
-45
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/licensedcode/data/licenses_reference_reporting/license-reference-works-with-clues.expected.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,7 @@
643643
"is_license_reference": false,
644644
"is_license_tag": false,
645645
"is_license_intro": false,
646+
"is_license_clue": false,
646647
"is_continuous": false,
647648
"is_builtin": true,
648649
"is_from_license": false,
@@ -669,6 +670,7 @@
669670
"is_license_reference": false,
670671
"is_license_tag": false,
671672
"is_license_intro": false,
673+
"is_license_clue": false,
672674
"is_continuous": false,
673675
"is_builtin": true,
674676
"is_from_license": false,
@@ -695,6 +697,7 @@
695697
"is_license_reference": false,
696698
"is_license_tag": false,
697699
"is_license_intro": false,
700+
"is_license_clue": false,
698701
"is_continuous": false,
699702
"is_builtin": true,
700703
"is_from_license": false,
@@ -721,6 +724,7 @@
721724
"is_license_reference": false,
722725
"is_license_tag": false,
723726
"is_license_intro": false,
727+
"is_license_clue": false,
724728
"is_continuous": false,
725729
"is_builtin": true,
726730
"is_from_license": true,
@@ -747,6 +751,7 @@
747751
"is_license_reference": false,
748752
"is_license_tag": false,
749753
"is_license_intro": false,
754+
"is_license_clue": false,
750755
"is_continuous": false,
751756
"is_builtin": true,
752757
"is_from_license": false,
@@ -773,6 +778,7 @@
773778
"is_license_reference": true,
774779
"is_license_tag": false,
775780
"is_license_intro": false,
781+
"is_license_clue": false,
776782
"is_continuous": false,
777783
"is_builtin": true,
778784
"is_from_license": false,
@@ -799,6 +805,7 @@
799805
"is_license_reference": true,
800806
"is_license_tag": false,
801807
"is_license_intro": false,
808+
"is_license_clue": false,
802809
"is_continuous": false,
803810
"is_builtin": true,
804811
"is_from_license": false,
@@ -825,6 +832,7 @@
825832
"is_license_reference": false,
826833
"is_license_tag": false,
827834
"is_license_intro": true,
835+
"is_license_clue": false,
828836
"is_continuous": false,
829837
"is_builtin": true,
830838
"is_from_license": false,
@@ -851,6 +859,7 @@
851859
"is_license_reference": true,
852860
"is_license_tag": false,
853861
"is_license_intro": false,
862+
"is_license_clue": false,
854863
"is_continuous": false,
855864
"is_builtin": true,
856865
"is_from_license": false,
@@ -877,6 +886,7 @@
877886
"is_license_reference": false,
878887
"is_license_tag": false,
879888
"is_license_intro": false,
889+
"is_license_clue": false,
880890
"is_continuous": false,
881891
"is_builtin": true,
882892
"is_from_license": false,
@@ -905,6 +915,7 @@
905915
"is_license_reference": false,
906916
"is_license_tag": false,
907917
"is_license_intro": false,
918+
"is_license_clue": false,
908919
"is_continuous": false,
909920
"is_builtin": true,
910921
"is_from_license": false,
@@ -941,6 +952,7 @@
941952
"is_license_reference": true,
942953
"is_license_tag": false,
943954
"is_license_intro": false,
955+
"is_license_clue": false,
944956
"is_continuous": false,
945957
"is_builtin": true,
946958
"is_from_license": false,
@@ -967,6 +979,7 @@
967979
"is_license_reference": false,
968980
"is_license_tag": false,
969981
"is_license_intro": false,
982+
"is_license_clue": false,
970983
"is_continuous": false,
971984
"is_builtin": true,
972985
"is_from_license": true,
@@ -993,6 +1006,7 @@
9931006
"is_license_reference": false,
9941007
"is_license_tag": false,
9951008
"is_license_intro": false,
1009+
"is_license_clue": false,
9961010
"is_continuous": false,
9971011
"is_builtin": true,
9981012
"is_from_license": false,
@@ -1030,6 +1044,7 @@
10301044
"is_license_reference": true,
10311045
"is_license_tag": false,
10321046
"is_license_intro": false,
1047+
"is_license_clue": false,
10331048
"is_continuous": false,
10341049
"is_builtin": true,
10351050
"is_from_license": false,
@@ -1058,6 +1073,7 @@
10581073
"is_license_reference": false,
10591074
"is_license_tag": false,
10601075
"is_license_intro": false,
1076+
"is_license_clue": false,
10611077
"is_continuous": false,
10621078
"is_builtin": true,
10631079
"is_from_license": false,
@@ -1084,6 +1100,7 @@
10841100
"is_license_reference": false,
10851101
"is_license_tag": false,
10861102
"is_license_intro": false,
1103+
"is_license_clue": false,
10871104
"is_continuous": false,
10881105
"is_builtin": true,
10891106
"is_from_license": true,
@@ -1120,6 +1137,7 @@
11201137
"is_license_reference": false,
11211138
"is_license_tag": false,
11221139
"is_license_intro": false,
1140+
"is_license_clue": false,
11231141
"is_continuous": false,
11241142
"is_builtin": true,
11251143
"is_from_license": true,
@@ -1150,6 +1168,7 @@
11501168
"is_license_reference": false,
11511169
"is_license_tag": false,
11521170
"is_license_intro": false,
1171+
"is_license_clue": false,
11531172
"is_continuous": false,
11541173
"is_builtin": true,
11551174
"is_from_license": false,

tests/licensedcode/data/licenses_reference_reporting/scan-matched-text-with-reference.expected.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@
287287
"is_license_reference": false,
288288
"is_license_tag": false,
289289
"is_license_intro": false,
290+
"is_license_clue": false,
290291
"is_continuous": false,
291292
"is_builtin": true,
292293
"is_from_license": false,
@@ -317,6 +318,7 @@
317318
"is_license_reference": false,
318319
"is_license_tag": true,
319320
"is_license_intro": false,
321+
"is_license_clue": false,
320322
"is_continuous": true,
321323
"is_builtin": true,
322324
"is_from_license": false,
@@ -343,6 +345,7 @@
343345
"is_license_reference": false,
344346
"is_license_tag": true,
345347
"is_license_intro": false,
348+
"is_license_clue": false,
346349
"is_continuous": false,
347350
"is_builtin": true,
348351
"is_from_license": false,
@@ -369,6 +372,7 @@
369372
"is_license_reference": false,
370373
"is_license_tag": true,
371374
"is_license_intro": false,
375+
"is_license_clue": false,
372376
"is_continuous": false,
373377
"is_builtin": true,
374378
"is_from_license": false,

tests/licensedcode/data/licenses_reference_reporting/scan-with-reference.expected.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@
284284
"is_license_reference": false,
285285
"is_license_tag": false,
286286
"is_license_intro": false,
287+
"is_license_clue": false,
287288
"is_continuous": false,
288289
"is_builtin": true,
289290
"is_from_license": false,
@@ -314,6 +315,7 @@
314315
"is_license_reference": false,
315316
"is_license_tag": true,
316317
"is_license_intro": false,
318+
"is_license_clue": false,
317319
"is_continuous": true,
318320
"is_builtin": true,
319321
"is_from_license": false,
@@ -340,6 +342,7 @@
340342
"is_license_reference": false,
341343
"is_license_tag": true,
342344
"is_license_intro": false,
345+
"is_license_clue": false,
343346
"is_continuous": false,
344347
"is_builtin": true,
345348
"is_from_license": false,
@@ -366,6 +369,7 @@
366369
"is_license_reference": false,
367370
"is_license_tag": true,
368371
"is_license_intro": false,
372+
"is_license_clue": false,
369373
"is_continuous": false,
370374
"is_builtin": true,
371375
"is_from_license": false,

0 commit comments

Comments
 (0)