Skip to content

Commit 49e93f0

Browse files
committed
Add is_notice flag to the --classify option, issue #3822
Signed-off-by: Aayush Kumar <[email protected]>
1 parent e795bc6 commit 49e93f0

16 files changed

+48
-4
lines changed

src/summarycode/classify.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ def get_relative_path(root_path, path):
9191
'readme',
9292
)
9393

94+
NOTICE_STARTS_ENDS = (
95+
"notice",
96+
)
9497

9598
def check_resource_name_start_and_end(resource, STARTS_ENDS):
9699
"""
@@ -111,6 +114,7 @@ def set_classification_flags(resource,
111114
_LEGAL=LEGAL_STARTS_ENDS,
112115
_MANIF=MANIFEST_ENDS,
113116
_README=README_STARTS_ENDS,
117+
_NOTICE=NOTICE_STARTS_ENDS,
114118
):
115119
"""
116120
Set classification flags on the `resource` Resource
@@ -119,8 +123,9 @@ def set_classification_flags(resource,
119123

120124
resource.is_legal = is_legal = check_resource_name_start_and_end(resource, _LEGAL)
121125
resource.is_readme = is_readme = check_resource_name_start_and_end(resource, _README)
126+
resource.is_notice = is_notice = check_resource_name_start_and_end(resource, _NOTICE)
122127
# FIXME: this will never be picked up as this is NOT available in a pre-scan plugin
123128
has_package_data = bool(getattr(resource, 'package_data', False))
124129
resource.is_manifest = is_manifest = path.endswith(_MANIF) or has_package_data
125-
resource.is_key_file = (resource.is_top_level and (is_readme or is_legal or is_manifest))
130+
resource.is_key_file = (resource.is_top_level and (is_readme or is_legal or is_manifest or is_notice))
126131
return resource

src/summarycode/classify_plugin.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,10 @@ class FileClassifier(PostScanPlugin):
7575

7676
('is_key_file',
7777
Boolean(help='True if this file is "top-level" file and either a '
78-
'legal, readme or manifest file.')),
78+
'legal, notice, readme or manifest file.')),
79+
80+
('is_notice',
81+
Boolean(help='True if this file is likely a notice file')),
7982

8083
# ('is_doc',
8184
# Boolean(help='True if this file is likely a documentation file.')),

tests/summarycode/data/classify/cli.expected.json

+11-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"is_readme": false,
2525
"is_top_level": true,
2626
"is_key_file": false,
27+
"is_notice": false,
2728
"files_count": 8,
2829
"dirs_count": 1,
2930
"size_count": 0,
@@ -53,6 +54,7 @@
5354
"is_readme": true,
5455
"is_top_level": true,
5556
"is_key_file": true,
57+
"is_notice": false,
5658
"files_count": 0,
5759
"dirs_count": 0,
5860
"size_count": 0,
@@ -82,6 +84,7 @@
8284
"is_readme": true,
8385
"is_top_level": true,
8486
"is_key_file": true,
87+
"is_notice": false,
8588
"files_count": 0,
8689
"dirs_count": 0,
8790
"size_count": 0,
@@ -111,6 +114,7 @@
111114
"is_readme": false,
112115
"is_top_level": true,
113116
"is_key_file": true,
117+
"is_notice": false,
114118
"files_count": 0,
115119
"dirs_count": 0,
116120
"size_count": 0,
@@ -140,6 +144,7 @@
140144
"is_readme": false,
141145
"is_top_level": true,
142146
"is_key_file": true,
147+
"is_notice": false,
143148
"files_count": 0,
144149
"dirs_count": 0,
145150
"size_count": 0,
@@ -169,6 +174,7 @@
169174
"is_readme": false,
170175
"is_top_level": true,
171176
"is_key_file": false,
177+
"is_notice": false,
172178
"files_count": 2,
173179
"dirs_count": 0,
174180
"size_count": 0,
@@ -198,6 +204,7 @@
198204
"is_readme": false,
199205
"is_top_level": false,
200206
"is_key_file": false,
207+
"is_notice": false,
201208
"files_count": 0,
202209
"dirs_count": 0,
203210
"size_count": 0,
@@ -227,6 +234,7 @@
227234
"is_readme": false,
228235
"is_top_level": false,
229236
"is_key_file": false,
237+
"is_notice": false,
230238
"files_count": 0,
231239
"dirs_count": 0,
232240
"size_count": 0,
@@ -256,6 +264,7 @@
256264
"is_readme": false,
257265
"is_top_level": true,
258266
"is_key_file": false,
267+
"is_notice": false,
259268
"files_count": 0,
260269
"dirs_count": 0,
261270
"size_count": 0,
@@ -285,10 +294,11 @@
285294
"is_readme": false,
286295
"is_top_level": true,
287296
"is_key_file": false,
297+
"is_notice": false,
288298
"files_count": 0,
289299
"dirs_count": 0,
290300
"size_count": 0,
291301
"scan_errors": []
292302
}
293303
]
294-
}
304+
}

tests/summarycode/data/classify/notice/ATTRIBUTION_NOTICE.txt

Whitespace-only changes.

tests/summarycode/data/classify/notice/LICENSE-NOTICE.txt

Whitespace-only changes.

tests/summarycode/data/classify/notice/NOTICE

Whitespace-only changes.

tests/summarycode/data/classify/notice/NOTICE-APACHE.txt

Whitespace-only changes.

tests/summarycode/data/classify/notice/NOTICE-LEGAL.TXT

Whitespace-only changes.

tests/summarycode/data/classify/notice/NOTICE-LEGAL.txt

Whitespace-only changes.

tests/summarycode/data/classify/notice/NOTICE-README.txt

Whitespace-only changes.

tests/summarycode/data/classify/notice/NOTICE.md

Whitespace-only changes.

tests/summarycode/data/classify/notice/NOTICE.txt

Whitespace-only changes.

tests/summarycode/data/classify/notice/PATENTS-NOTICE.txt

Whitespace-only changes.

tests/summarycode/data/classify/notice/THIRD_PARTY_NOTICE.txt

Whitespace-only changes.

tests/summarycode/data/classify/with_package_data.expected.json

+16-1
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@
255255
"is_readme": false,
256256
"is_top_level": true,
257257
"is_key_file": false,
258+
"is_notice": false,
258259
"files_count": 7,
259260
"dirs_count": 7,
260261
"size_count": 31701,
@@ -288,6 +289,7 @@
288289
"is_readme": false,
289290
"is_top_level": true,
290291
"is_key_file": false,
292+
"is_notice": false,
291293
"files_count": 5,
292294
"dirs_count": 3,
293295
"size_count": 27441,
@@ -321,6 +323,7 @@
321323
"is_readme": false,
322324
"is_top_level": true,
323325
"is_key_file": false,
326+
"is_notice": false,
324327
"files_count": 0,
325328
"dirs_count": 0,
326329
"size_count": 0,
@@ -354,6 +357,7 @@
354357
"is_readme": false,
355358
"is_top_level": true,
356359
"is_key_file": true,
360+
"is_notice": false,
357361
"files_count": 0,
358362
"dirs_count": 0,
359363
"size_count": 0,
@@ -437,6 +441,7 @@
437441
"is_readme": false,
438442
"is_top_level": true,
439443
"is_key_file": true,
444+
"is_notice": false,
440445
"files_count": 0,
441446
"dirs_count": 0,
442447
"size_count": 0,
@@ -470,6 +475,7 @@
470475
"is_readme": false,
471476
"is_top_level": true,
472477
"is_key_file": false,
478+
"is_notice": false,
473479
"files_count": 2,
474480
"dirs_count": 2,
475481
"size_count": 15229,
@@ -503,6 +509,7 @@
503509
"is_readme": false,
504510
"is_top_level": true,
505511
"is_key_file": false,
512+
"is_notice": false,
506513
"files_count": 2,
507514
"dirs_count": 1,
508515
"size_count": 15229,
@@ -536,6 +543,7 @@
536543
"is_readme": false,
537544
"is_top_level": true,
538545
"is_key_file": false,
546+
"is_notice": false,
539547
"files_count": 2,
540548
"dirs_count": 0,
541549
"size_count": 15229,
@@ -614,6 +622,7 @@
614622
"is_readme": false,
615623
"is_top_level": true,
616624
"is_key_file": true,
625+
"is_notice": false,
617626
"files_count": 0,
618627
"dirs_count": 0,
619628
"size_count": 0,
@@ -832,6 +841,7 @@
832841
"is_readme": false,
833842
"is_top_level": true,
834843
"is_key_file": true,
844+
"is_notice": false,
835845
"files_count": 0,
836846
"dirs_count": 0,
837847
"size_count": 0,
@@ -865,6 +875,7 @@
865875
"is_readme": false,
866876
"is_top_level": true,
867877
"is_key_file": false,
878+
"is_notice": false,
868879
"files_count": 2,
869880
"dirs_count": 2,
870881
"size_count": 4260,
@@ -898,6 +909,7 @@
898909
"is_readme": false,
899910
"is_top_level": false,
900911
"is_key_file": false,
912+
"is_notice": false,
901913
"files_count": 2,
902914
"dirs_count": 1,
903915
"size_count": 4260,
@@ -931,6 +943,7 @@
931943
"is_readme": false,
932944
"is_top_level": false,
933945
"is_key_file": false,
946+
"is_notice": false,
934947
"files_count": 2,
935948
"dirs_count": 0,
936949
"size_count": 4260,
@@ -964,6 +977,7 @@
964977
"is_readme": false,
965978
"is_top_level": false,
966979
"is_key_file": false,
980+
"is_notice": false,
967981
"files_count": 0,
968982
"dirs_count": 0,
969983
"size_count": 0,
@@ -997,10 +1011,11 @@
9971011
"is_readme": false,
9981012
"is_top_level": false,
9991013
"is_key_file": false,
1014+
"is_notice": false,
10001015
"files_count": 0,
10011016
"dirs_count": 0,
10021017
"size_count": 0,
10031018
"scan_errors": []
10041019
}
10051020
]
1006-
}
1021+
}

tests/summarycode/test_classify.py

+11
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,17 @@ def test_set_classification_flags_is_package_data_file(self):
6464
set_classification_flags(res)
6565
assert res.is_manifest
6666

67+
68+
def test_set_classification_flags_is_notice(self):
69+
test_dir = self.get_test_loc('classify/notice')
70+
codebase = Codebase(
71+
test_dir, resource_attributes=FileClassifier.resource_attributes)
72+
for res in codebase.walk():
73+
if not res.is_file:
74+
continue
75+
set_classification_flags(res)
76+
assert res.is_notice
77+
6778
def test_classify_cli_option(self):
6879
test_dir = self.get_test_loc('classify/cli')
6980
result_file = self.get_temp_file('json')

0 commit comments

Comments
 (0)