debian-forge/osbuild/util
Tomáš Hozza a3428e282d sbom/spdx: use compliant license expressions
Introduce a new class `SpdxLicenseExpressionCreator`, responsible for
converting license texts extracted from packages, into an SPDX-compliant
license expressions. If the `license_expression` Python package is
available on the system, it is used to determine the license text
extracted from a package is a valid SPDX license expression. If it is,
it's returned as is back to the caller. If it is not, or of the package
is not available on the system, the license text is wrapped in a
`ExtractedLicensingInfo` instance.

The `SpdxLicenseExpressionCreator` object keeps track of all generated
`ExtractedLicensingInfo` instances and de-duplicates them based on the
license text. This means that if two packages use the same
SPDX-non-compliant license text, they will be wrapped by an
`ExtractedLicensingInfo` instance with the same `LicenseRef-` ID.

The reason for fallback when `license_expression` package is not
available is that it is not available on RHEL and CentOS Stream. This
implementation allows us to ship the functionality in RHEL and
optionally enabling it by installing `license_expression` from a 3rd
party repository. In any case, the generated SBOM document will always
contain valid SPDX license expressions.

Extend unit tests to cover the newly added functionality.

Signed-off-by: Tomáš Hozza <thozza@redhat.com>

FIXUP: sbom/spdx: use compliant license expressions

Signed-off-by: Tomáš Hozza <thozza@redhat.com>
2025-02-27 13:31:19 +01:00
..
sbom sbom/spdx: use compliant license expressions 2025-02-27 13:31:19 +01:00
__init__.py util: mark as module 2020-04-21 17:00:04 +02:00
bls.py util: tweak bls.options_append() support no/multiple options 2024-02-28 10:37:01 +01:00
checksum.py osbuild: run isort on all files 2022-09-12 13:32:51 +02:00
chroot.py util/chroot: Add support for custom directory bind mounts 2024-12-03 15:22:40 +01:00
containers.py osbuild/util/containers.py: disable pylint issue W0135 2024-11-25 10:09:18 +01:00
ctx.py osbuild: run isort on all files 2022-09-12 13:32:51 +02:00
fscache.py fscache: use remove_lru() to reclaim space when the cache is full 2024-02-06 17:16:48 +01:00
host.py util: move get_host_storage() to a separate module 2024-08-21 19:26:31 +02:00
jsoncomm.py util: use Libc.memfd_create() when os.memfd_create() is missing 2024-09-17 19:27:03 +02:00
linux.py uktil: add libc.memfd_create() wrapper 2024-09-17 19:27:03 +02:00
lorax.py autopep8: Update with changes to make autopep8 -a -a -a happy 2023-08-10 13:04:14 +02:00
lvm2.py autopep8: Update with changes to make autopep8 -a -a -a happy 2023-08-10 13:04:14 +02:00
mnt.py util/mnt: add a remount paramater 2024-03-11 18:15:24 +02:00
osrelease.py util,test: add test for new shlex based os-release parsing 2024-12-04 14:54:00 -05:00
ostree.py sources: MTLS and proxy support for ostree 2024-10-22 22:16:35 +02:00
parsing.py parsing: treat locations without scheme as belonging to 'tree://' 2024-11-14 17:49:26 +01:00
path.py util/path: add join_abs() to join potentially absolute paths 2025-01-06 11:53:46 -08:00
pe32p.py util: add module to parse PE32+ files 2022-11-14 20:10:59 +01:00
rhsm.py util: fix typo in get_consumer_secrets 2022-12-09 21:46:43 +01:00
rmrf.py ostuild: fix new pylint error with latest pylint version 2023-11-15 18:31:56 +01:00
runners.py Revert "runners: clean up temp files before exiting the runner" 2024-05-20 11:55:24 -07:00
selinux.py osbuild: add support to exclude_paths to setfiles() 2024-03-20 18:05:51 +01:00
term.py osbuild: run isort on all files 2022-09-12 13:32:51 +02:00
toml.py util/toml: disable unspecified-encoding check 2024-08-21 19:26:31 +02:00
types.py osbuild: fix optional-types 2022-07-13 17:31:37 +02:00
udev.py osbuild: run isort on all files 2022-09-12 13:32:51 +02:00