@@ -48,11 +48,9 @@ class LicenseClarityScore(PostScanPlugin):
4848 """
4949 Compute a License clarity score at the codebase level.
5050 """
51- codebase_attributes = dict (license_clarity_score = Mapping (
52- help = 'Computed license clarity score as mapping containing the score '
53- 'proper and each scoring elements.' ))
51+ codebase_attributes = dict (summary = attr .ib (default = attr .Factory (dict )))
5452
55- sort_order = 110
53+ sort_order = 5
5654
5755 options = [
5856 PluggableCommandLineOption (('--license-clarity-score' ,),
@@ -66,14 +64,13 @@ class LicenseClarityScore(PostScanPlugin):
6664 )
6765 ]
6866
69- def is_enabled (self , license_clarity_score , ** kwargs ):
70- return license_clarity_score
67+ def is_enabled (self , license_clarity_score , summary2 , ** kwargs ):
68+ return license_clarity_score or summary2
7169
7270 def process_codebase (self , codebase , license_clarity_score , ** kwargs ):
7371 if TRACE :
7472 logger_debug ('LicenseClarityScore:process_codebase' )
75- scoring_elements = compute_license_score (codebase )
76- codebase .attributes .license_clarity_score .update (scoring_elements )
73+ compute_license_score (codebase )
7774
7875
7976def compute_license_score (codebase ):
@@ -126,6 +123,7 @@ def compute_license_score(codebase):
126123 scoring_elements = ScoringElements ()
127124 declared_licenses = get_field_values_from_codebase_resources (codebase , 'licenses' , key_files_only = True )
128125 declared_license_expressions = get_field_values_from_codebase_resources (codebase , 'license_expressions' , key_files_only = True )
126+ unique_declared_license_expressions = list (set (declared_license_expressions ))
129127 declared_license_categories = get_license_categories (declared_licenses )
130128 copyrights = get_field_values_from_codebase_resources (codebase , 'copyrights' , key_files_only = True )
131129 other_licenses = get_field_values_from_codebase_resources (codebase , 'licenses' , key_files_only = False )
@@ -155,14 +153,17 @@ def compute_license_score(codebase):
155153 ):
156154 scoring_elements .score -= 20
157155
158- scoring_elements . ambigous_compound_licensing = check_for_license_ambiguity (declared_license_expressions )
156+ primary_license = get_primary_license (declared_license_expressions )
159157 if (
160- scoring_elements . ambigous_compound_licensing
158+ not primary_license
161159 and scoring_elements .score > 0
162160 ):
161+ scoring_elements .ambigous_compound_licensing = True
163162 scoring_elements .score -= 10
164163
165- return scoring_elements .to_dict ()
164+ codebase .attributes .summary ['primary_license_expression' ] = primary_license
165+ codebase .attributes .summary ['declared_license_expressions' ] = unique_declared_license_expressions
166+ codebase .attributes .summary ['license_clarity_score' ] = scoring_elements .to_dict ()
166167
167168
168169@attr .s ()
@@ -378,11 +379,10 @@ def group_license_expressions(unique_license_expressions):
378379 unique_joined_expressions = []
379380 seen_joined_expression = []
380381 len_joined_expressions = len (joined_expressions )
381- for i , j in enumerate (joined_expressions ):
382- starting_index = i + 1
383- if starting_index > len_joined_expressions :
382+ for i , j in enumerate (joined_expressions , start = 1 ):
383+ if i > len_joined_expressions :
384384 break
385- for j1 in joined_expressions [starting_index :]:
385+ for j1 in joined_expressions [i :]:
386386 if licensing .is_equivalent (j , j1 ):
387387 if (
388388 j not in unique_joined_expressions
@@ -394,21 +394,21 @@ def group_license_expressions(unique_license_expressions):
394394 return unique_joined_expressions , single_expressions
395395
396396
397- def check_for_license_ambiguity (declared_license_expressions ):
397+ def get_primary_license (declared_license_expressions ):
398398 """
399- License ambiguity is the situation where there is a license declaration that makes
400- it difficult to construct a reliable license expression, such as in the case
401- of multiple licenses where the conjunctive versus disjunctive relationship
402- is not well defined.
399+ Return a primary license expression string from
400+ `declared_license_expressions` or an empty string if a primary license
401+ expression cannot be determined.
403402
404- We determine if a list of `declared_license_expressions` has license ambiguity if
405- we cannot resolve the `declared_license_expressions` into one expression.
403+ We determine if a list of `declared_license_expressions` has a primary
404+ license if we can resolve the `declared_license_expressions` into one
405+ expression.
406406 """
407- unique_declared_license_expressions = set (declared_license_expressions )
407+ unique_declared_license_expressions = list ( set (declared_license_expressions ) )
408408 # If we only have a single unique license expression, then we do not have
409409 # any ambiguity about the licensing
410410 if len (unique_declared_license_expressions ) == 1 :
411- return False
411+ return unique_declared_license_expressions [ 0 ]
412412
413413 unique_joined_expressions , single_expressions = group_license_expressions (
414414 unique_declared_license_expressions
@@ -417,10 +417,10 @@ def check_for_license_ambiguity(declared_license_expressions):
417417 if not unique_joined_expressions :
418418 # If we do not have any joined expressions, but multiple single
419419 # expressions remaining, then we have license ambiguity
420- if len (single_expressions ) > 1 :
421- return True
420+ if len (single_expressions ) == 1 :
421+ return single_expressions [ 0 ]
422422 else :
423- return False
423+ return ''
424424
425425 # Group single expressions to joined expressions to see if single
426426 # expressions are accounted for in a joined expression
@@ -442,6 +442,6 @@ def check_for_license_ambiguity(declared_license_expressions):
442442 # that have not been associated with a joined license expression, then we do
443443 # not have any ambiguity about the license
444444 if len (single_expressions_by_joined_expressions ) == 1 and not not_in_joined_expressions :
445- return False
445+ return next ( iter ( single_expressions_by_joined_expressions ))
446446 else :
447- return True
447+ return ''
0 commit comments