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) 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 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():