MCPcopy Create free account
hub / github.com/aboutcode-org/scancode-toolkit / get_primary_license

Function get_primary_license

src/summarycode/score.py:461–509  ·  view source on GitHub ↗

Return a primary license expression string from `declared_license_expressions` or an empty string if a primary license expression cannot be determined. We determine if a list of `declared_license_expressions` has a primary license if we can resolve the `declared_license_express

(declared_license_expressions)

Source from the content-addressed store, hash-verified

459
460
461def get_primary_license(declared_license_expressions):
462 """
463 Return a primary license expression string from
464 `declared_license_expressions` or an empty string if a primary license
465 expression cannot be determined.
466
467 We determine if a list of `declared_license_expressions` has a primary
468 license if we can resolve the `declared_license_expressions` into one
469 expression.
470 """
471 unique_declared_license_expressions = unique(declared_license_expressions)
472 # If we only have a single unique license expression, then we do not have
473 # any ambiguity about the licensing
474 if len(unique_declared_license_expressions) == 1:
475 return unique_declared_license_expressions[0]
476
477 unique_joined_expressions, single_expressions = group_license_expressions(
478 unique_declared_license_expressions
479 )
480
481 if not unique_joined_expressions:
482 # If we do not have any joined expressions, but multiple single
483 # expressions remaining, then we have license ambiguity
484 if len(single_expressions) == 1:
485 return single_expressions[0]
486 else:
487 return None
488
489 # Group single expressions to joined expressions to see if single
490 # expressions are accounted for in a joined expression
491 single_expressions_by_joined_expressions = {
492 joined_expression: [] for joined_expression in unique_joined_expressions
493 }
494 not_in_joined_expressions = []
495 # Check to see if the single expression is in the joined expression
496 for joined_expression in unique_joined_expressions:
497 for expression in single_expressions:
498 if expression not in joined_expression:
499 not_in_joined_expressions.append(expression)
500 else:
501 single_expressions_by_joined_expressions[joined_expression].append(expression)
502
503 # If we have a single joined license expression and no license expressions
504 # that have not been associated with a joined license expression, then we do
505 # not have any ambiguity about the license
506 if len(single_expressions_by_joined_expressions) == 1 and not not_in_joined_expressions:
507 return next(iter(single_expressions_by_joined_expressions))
508 else:
509 return None

Callers 1

compute_license_scoreFunction · 0.85

Calls 4

uniqueFunction · 0.70
nextFunction · 0.50
appendMethod · 0.45

Tested by

no test coverage detected