--- a/src/eric7/PipInterface/piplicenses.py Sat Mar 04 18:09:08 2023 +0100 +++ b/src/eric7/PipInterface/piplicenses.py Sun Mar 05 12:26:12 2023 +0100 @@ -97,7 +97,7 @@ __pkgname__ = "pip-licenses" -__version__ = "4.0.2" +__version__ = "4.1.0" __author__ = "raimon" __license__ = "MIT" __summary__ = ( @@ -269,7 +269,9 @@ ) if fail_on_licenses: - failed_licenses = license_names.intersection(fail_on_licenses) + failed_licenses = case_insensitive_set_intersect( + license_names, fail_on_licenses + ) if failed_licenses: sys.stderr.write( "fail-on license {} was found for package " @@ -282,7 +284,9 @@ sys.exit(1) if allow_only_licenses: - uncommon_licenses = license_names.difference(allow_only_licenses) + uncommon_licenses = case_insensitive_set_diff( + license_names, allow_only_licenses + ) if len(uncommon_licenses) == len(license_names): sys.stderr.write( "license {} not in allow-only licenses was found" @@ -367,6 +371,26 @@ return licenses +def case_insensitive_set_intersect(set_a, set_b): + """Same as set.intersection() but case-insensitive""" + common_items = set() + set_b_lower = {item.lower() for item in set_b} + for elem in set_a: + if elem.lower() in set_b_lower: + common_items.add(elem) + return common_items + + +def case_insensitive_set_diff(set_a, set_b): + """Same as set.difference() but case-insensitive""" + uncommon_items = set() + set_b_lower = {item.lower() for item in set_b} + for elem in set_a: + if not elem.lower() in set_b_lower: + uncommon_items.add(elem) + return uncommon_items + + def find_license_from_classifier(classifiers: list[str]) -> list[str]: licenses = [] for classifier in filter(lambda c: c.startswith("License"), classifiers):