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

1# -*- coding: utf-8 -*- 

2# SPDX-License-Identifier: GPL-2.0-only 

3 

4from collections.abc import Callable, Iterable 

5from typing import Any 

6 

7from ..utils.class_utils import Singleton 

8from ..utils.plugin import import_builtin_plugin 

9from .db_base import CveDatabase, CveDatabaseT 

10 

11 

12class DbTypeRegistry(metaclass=Singleton): 

13 def __init__(self) -> None: 

14 self._db_types: dict[str, type[CveDatabase]] = {} 

15 

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 

19 

20 @property 

21 def type_names(self) -> Iterable[str]: 

22 return self._db_types.keys() 

23 

24 def create_from_config(self, type_name: str, **kwargs: Any) -> CveDatabase: 

25 return self._db_types[type_name].create_from_config(**kwargs) 

26 

27 

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 

32 

33 return decorator 

34 

35 

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) 

47 

48 

49__register_builtin_types()