spdx_tools.spdx3.bump_from_spdx2.license_expression
1# SPDX-FileCopyrightText: 2023 spdx contributors 2# 3# SPDX-License-Identifier: Apache-2.0 4from beartype.typing import List, Union 5from license_expression import AND, OR, LicenseExpression, LicenseSymbol, LicenseWithExceptionSymbol 6 7from spdx_tools.common.spdx_licensing import spdx_licensing 8from spdx_tools.spdx3.model.licensing import ( 9 AnyLicenseInfo, 10 ConjunctiveLicenseSet, 11 CustomLicense, 12 CustomLicenseAddition, 13 DisjunctiveLicenseSet, 14 License, 15 LicenseAddition, 16 LicenseField, 17 ListedLicense, 18 ListedLicenseException, 19 NoAssertionLicense, 20 NoneLicense, 21 WithAdditionOperator, 22) 23from spdx_tools.spdx.model import ExtractedLicensingInfo, SpdxNoAssertion, SpdxNone 24 25 26def bump_license_expression_or_none_or_no_assertion( 27 element: Union[LicenseExpression, SpdxNoAssertion, SpdxNone], 28 extracted_licensing_info: List[ExtractedLicensingInfo], 29) -> LicenseField: 30 if isinstance(element, SpdxNone): 31 return NoneLicense() 32 elif isinstance(element, SpdxNoAssertion): 33 return NoAssertionLicense() 34 else: 35 return bump_license_expression(element, extracted_licensing_info) 36 37 38def bump_license_expression( 39 license_expression: LicenseExpression, extracted_licensing_info: List[ExtractedLicensingInfo] 40) -> AnyLicenseInfo: 41 if isinstance(license_expression, AND): 42 return ConjunctiveLicenseSet( 43 member=[bump_license_expression(element, extracted_licensing_info) for element in license_expression.args] 44 ) 45 if isinstance(license_expression, OR): 46 return DisjunctiveLicenseSet( 47 member=[bump_license_expression(element, extracted_licensing_info) for element in license_expression.args] 48 ) 49 if isinstance(license_expression, LicenseWithExceptionSymbol): 50 subject_license = bump_license_expression(license_expression.license_symbol, extracted_licensing_info) 51 if not isinstance(subject_license, License): 52 raise ValueError("Subject of LicenseException couldn't be converted to License.") 53 return WithAdditionOperator( 54 subject_license=subject_license, 55 subject_addition=bump_license_exception(license_expression.exception_symbol, extracted_licensing_info), 56 ) 57 if isinstance(license_expression, LicenseSymbol): 58 if not spdx_licensing.validate(license_expression).invalid_symbols: 59 return ListedLicense(license_expression.key, license_expression.obj, "blank") 60 else: 61 for licensing_info in extracted_licensing_info: 62 if licensing_info.license_id == license_expression.key: 63 # the fields are optional in ExtractedLicensingInfo, to prevent type errors we use a type 64 # conversion to str as a quick fix 65 return CustomLicense( 66 str(licensing_info.license_id), 67 str(licensing_info.license_name), 68 str(licensing_info.extracted_text), 69 ) 70 71 return CustomLicense(license_expression.key, "", "") 72 73 74def bump_license_exception( 75 license_exception: LicenseSymbol, extracted_licensing_info: List[ExtractedLicensingInfo] 76) -> LicenseAddition: 77 if not spdx_licensing.validate(license_exception).invalid_symbols: 78 return ListedLicenseException(license_exception.key, "", "") 79 else: 80 for licensing_info in extracted_licensing_info: 81 if licensing_info.license_id == license_exception.key: 82 # the fields are optional in ExtractedLicensingInfo, to prevent type errors we use a type conversion 83 # to str as a quick fix 84 return CustomLicenseAddition( 85 str(licensing_info.license_id), 86 str(licensing_info.license_name), 87 str(licensing_info.extracted_text), 88 ) 89 return CustomLicenseAddition(license_exception.key, "", "")
def
bump_license_expression_or_none_or_no_assertion( element: Union[boolean.boolean.Expression, spdx_tools.spdx.model.spdx_no_assertion.SpdxNoAssertion, spdx_tools.spdx.model.spdx_none.SpdxNone], extracted_licensing_info: list[spdx_tools.spdx.model.extracted_licensing_info.ExtractedLicensingInfo]) -> spdx_tools.spdx3.model.licensing.license_field.LicenseField:
27def bump_license_expression_or_none_or_no_assertion( 28 element: Union[LicenseExpression, SpdxNoAssertion, SpdxNone], 29 extracted_licensing_info: List[ExtractedLicensingInfo], 30) -> LicenseField: 31 if isinstance(element, SpdxNone): 32 return NoneLicense() 33 elif isinstance(element, SpdxNoAssertion): 34 return NoAssertionLicense() 35 else: 36 return bump_license_expression(element, extracted_licensing_info)
def
bump_license_expression( license_expression: boolean.boolean.Expression, extracted_licensing_info: list[spdx_tools.spdx.model.extracted_licensing_info.ExtractedLicensingInfo]) -> spdx_tools.spdx3.model.licensing.any_license_info.AnyLicenseInfo:
39def bump_license_expression( 40 license_expression: LicenseExpression, extracted_licensing_info: List[ExtractedLicensingInfo] 41) -> AnyLicenseInfo: 42 if isinstance(license_expression, AND): 43 return ConjunctiveLicenseSet( 44 member=[bump_license_expression(element, extracted_licensing_info) for element in license_expression.args] 45 ) 46 if isinstance(license_expression, OR): 47 return DisjunctiveLicenseSet( 48 member=[bump_license_expression(element, extracted_licensing_info) for element in license_expression.args] 49 ) 50 if isinstance(license_expression, LicenseWithExceptionSymbol): 51 subject_license = bump_license_expression(license_expression.license_symbol, extracted_licensing_info) 52 if not isinstance(subject_license, License): 53 raise ValueError("Subject of LicenseException couldn't be converted to License.") 54 return WithAdditionOperator( 55 subject_license=subject_license, 56 subject_addition=bump_license_exception(license_expression.exception_symbol, extracted_licensing_info), 57 ) 58 if isinstance(license_expression, LicenseSymbol): 59 if not spdx_licensing.validate(license_expression).invalid_symbols: 60 return ListedLicense(license_expression.key, license_expression.obj, "blank") 61 else: 62 for licensing_info in extracted_licensing_info: 63 if licensing_info.license_id == license_expression.key: 64 # the fields are optional in ExtractedLicensingInfo, to prevent type errors we use a type 65 # conversion to str as a quick fix 66 return CustomLicense( 67 str(licensing_info.license_id), 68 str(licensing_info.license_name), 69 str(licensing_info.extracted_text), 70 ) 71 72 return CustomLicense(license_expression.key, "", "")
def
bump_license_exception( license_exception: license_expression.LicenseSymbol, extracted_licensing_info: list[spdx_tools.spdx.model.extracted_licensing_info.ExtractedLicensingInfo]) -> spdx_tools.spdx3.model.licensing.license_addition.LicenseAddition:
75def bump_license_exception( 76 license_exception: LicenseSymbol, extracted_licensing_info: List[ExtractedLicensingInfo] 77) -> LicenseAddition: 78 if not spdx_licensing.validate(license_exception).invalid_symbols: 79 return ListedLicenseException(license_exception.key, "", "") 80 else: 81 for licensing_info in extracted_licensing_info: 82 if licensing_info.license_id == license_exception.key: 83 # the fields are optional in ExtractedLicensingInfo, to prevent type errors we use a type conversion 84 # to str as a quick fix 85 return CustomLicenseAddition( 86 str(licensing_info.license_id), 87 str(licensing_info.license_name), 88 str(licensing_info.extracted_text), 89 ) 90 return CustomLicenseAddition(license_exception.key, "", "")