Coverage for /home/benjarobin/Bootlin/projects/Schneider-Electric-Senux/sbom-cve-check/src/sbom_cve_check/cve_db/registry.py: 100%
26 statements
« prev ^ index » next coverage.py v7.11.1, created at 2025-11-28 15:37 +0100
« prev ^ index » next coverage.py v7.11.1, created at 2025-11-28 15:37 +0100
1# -*- coding: utf-8 -*-
2# SPDX-License-Identifier: GPL-2.0-only
4from collections.abc import Callable, Iterable
5from typing import Any
7from ..utils.class_utils import Singleton
8from ..utils.plugin import import_builtin_plugin
9from .db_base import CveDatabase, CveDatabaseT
12class DbTypeRegistry(metaclass=Singleton):
13 def __init__(self) -> None:
14 self._db_types: dict[str, type[CveDatabase]] = {}
16 def register_type(self, type_name: str, db_type: type[CveDatabase]) -> None:
17 assert type_name not in self._db_types
18 self._db_types[type_name] = db_type
20 @property
21 def type_names(self) -> Iterable[str]:
22 return self._db_types.keys()
24 def create_from_config(self, type_name: str, **kwargs: Any) -> CveDatabase:
25 return self._db_types[type_name].create_from_config(**kwargs)
28def register_cve_db(name: str) -> Callable[[type[CveDatabaseT]], type[CveDatabaseT]]:
29 def decorator(cls: type[CveDatabaseT]) -> type[CveDatabaseT]:
30 DbTypeRegistry().register_type(name, cls)
31 return cls
33 return decorator
36def __register_builtin_types() -> None:
37 modules = [
38 ".annot_openvex",
39 ".annot_simple",
40 ".annot_spdx3",
41 ".annot_yocto",
42 ".db_cvelist",
43 ".db_nvd",
44 ]
45 for mod in modules:
46 import_builtin_plugin(__package__, mod)
49__register_builtin_types()