From 0fdd8b8611e9653d27575c31829880aec52701aa Mon Sep 17 00:00:00 2001 From: Henrik Sandklef Date: Wed, 1 Oct 2025 23:17:07 +0200 Subject: [PATCH 1/3] add simplify parameter to main --- licomp_toolkit/__main__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/licomp_toolkit/__main__.py b/licomp_toolkit/__main__.py index 9c128d6..73952c9 100755 --- a/licomp_toolkit/__main__.py +++ b/licomp_toolkit/__main__.py @@ -97,6 +97,12 @@ def supported_provisionings(self, args): provisioning_names.sort() return provisioning_names, ReturnCodes.LICOMP_OK.value, None + def simplify(self, args): + formatter = LicompToolkitFormatter.formatter(args.output_format) + normalized = self.__normalize_license(args.license) + simplified = self.licomp_toolkit.simplify(normalized) + return formatter.format_licomp_licenses(simplified), ReturnCodes.LICOMP_OK.value, None + def supported_resources(self, args): formatter = LicompToolkitFormatter.formatter(args.output_format) return formatter.format_licomp_resources([f'{x.name()}:{x.version()}' for x in self.licomp_toolkit.licomp_resources().values()]), ReturnCodes.LICOMP_OK.value, False @@ -159,6 +165,10 @@ def main(): default=[]) # Command: list supported + parser_si = subparsers.add_parser('simplify', help='Normalize and simplify a license expression') + parser_si.set_defaults(which="simplify", func=lct_parser.simplify) + parser_si.add_argument("license") + parser_sr = subparsers.add_parser('supported-resources', help='List all supported Licomp resources') parser_sr.set_defaults(which="supported_resources", func=lct_parser.supported_resources) From c8771c18744b80c1d7c71f9314b2ef6e67a6252e Mon Sep 17 00:00:00 2001 From: Henrik Sandklef Date: Wed, 1 Oct 2025 23:17:34 +0200 Subject: [PATCH 2/3] use Licensing with no default licenses --- licomp_toolkit/expr_parser.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/licomp_toolkit/expr_parser.py b/licomp_toolkit/expr_parser.py index df09af5..a5750d8 100644 --- a/licomp_toolkit/expr_parser.py +++ b/licomp_toolkit/expr_parser.py @@ -4,7 +4,7 @@ import logging -from license_expression import get_spdx_licensing +from license_expression import Licensing from licomp.interface import LicompException from licomp.return_codes import ReturnCodes @@ -18,7 +18,7 @@ class LicenseExpressionParser(): def __init__(self): - self.licensing = get_spdx_licensing() + self.licensing = Licensing([]) self.CLOSE_PARENTHESIS = ")" self.LICENSE_SYMBOL = "LicenseSymbol" @@ -27,7 +27,6 @@ def __init__(self): def parse_license_expression(self, expression): if not expression: raise LicompException("No license provided: " + str(expression), ReturnCodes.LICOMP_PARSE_ERROR) - p = self.__parse_expression(self.licensing.parse(expression).pretty().replace('\n', ' ')) return p From 30c9864c7c6ca1ef708f16a82555712965626ace Mon Sep 17 00:00:00 2001 From: Henrik Sandklef Date: Wed, 1 Oct 2025 23:17:43 +0200 Subject: [PATCH 3/3] use Licensing with no default licenses --- licomp_toolkit/toolkit.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/licomp_toolkit/toolkit.py b/licomp_toolkit/toolkit.py index b3466ee..6a89312 100644 --- a/licomp_toolkit/toolkit.py +++ b/licomp_toolkit/toolkit.py @@ -3,6 +3,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later import logging +from license_expression import Licensing from licomp.interface import Licomp from licomp.interface import UseCase @@ -142,6 +143,9 @@ def outbound_inbound_compatibility(self, outbound, inbound, usecase, provisionin return compatibilities + def simplify(self, lic): + return str(Licensing([]).parse(lic).simplify()) + def supported_licenses(self): licenses = set() for resource in self.licomp_resources().values():