From 96fb5a7c0a5a56b736e7582ef98511a96b917ddb Mon Sep 17 00:00:00 2001 From: Ivo Hedtke Date: Thu, 24 Aug 2023 21:05:45 +0200 Subject: [PATCH] Determine cyclonedx major version without importlib --- extensions/commands/recipe/cmd_create_sbom.py | 12 +++++++----- tests/test_create_sbom.py | 14 +++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/extensions/commands/recipe/cmd_create_sbom.py b/extensions/commands/recipe/cmd_create_sbom.py index 28cc069..48476b3 100644 --- a/extensions/commands/recipe/cmd_create_sbom.py +++ b/extensions/commands/recipe/cmd_create_sbom.py @@ -1,4 +1,3 @@ -from importlib.metadata import version import os.path import sys from typing import TYPE_CHECKING, Any, Iterable, List, Optional, Set, Tuple, Union, Dict @@ -12,10 +11,6 @@ from cyclonedx.model.bom import Bom -def cyclonedx_major_version_is_4() -> int: - return version('cyclonedx-python-lib')[0] == '4' - - def format_text(output: Dict[str, Any]) -> None: serialized = output['formatters'][output['sbom_format']](output['bom']).output_as_string() cli_out_write(serialized) @@ -50,6 +45,13 @@ def create_sbom(conan_api: ConanAPI, parser, *args) -> Dict[str, Any]: def package_type_to_component_type(pt: str) -> ComponentType: return ComponentType.APPLICATION if pt == "application" else ComponentType.LIBRARY + def cyclonedx_major_version_is_4() -> bool: + try: + LicenseChoice(license=LicenseFactory().make_from_string("MIT")) + return True + except TypeError: # argument in version 3 is named license_ + return False + def licenses(ls: Optional[Union[Tuple[str, ...], Set[str], List[str], str]]) -> Optional[Iterable[LicenseChoice]]: """ see https://cyclonedx.org/docs/1.4/json/#components_items_licenses diff --git a/tests/test_create_sbom.py b/tests/test_create_sbom.py index 113db12..0893886 100644 --- a/tests/test_create_sbom.py +++ b/tests/test_create_sbom.py @@ -1,4 +1,3 @@ -import importlib.metadata import json import xml.dom.minidom import os @@ -13,10 +12,6 @@ REQ_DEP = "m4" -def cyclonedx_major_version_is_4() -> int: - return importlib.metadata.version('cyclonedx-python-lib')[0] == '4' - - @pytest.fixture(autouse=True) def conan_test(): old_env = dict(os.environ) @@ -48,6 +43,15 @@ def _test_generated_sbom_json(sbom, test_metadata_name, spec_version): def _test_generated_sbom_xml(sbom, test_metadata_name, spec_version): + def cyclonedx_major_version_is_4() -> bool: + try: + from cyclonedx.factory.license import LicenseFactory + from cyclonedx.model import LicenseChoice + LicenseChoice(license=LicenseFactory().make_from_string("MIT")) + return True + except TypeError: # argument in version 3 is named license_ + return False + def with_ns(key: str) -> str: ns = "ns0:" if cyclonedx_major_version_is_4() else "" return ns + key