Coverage for src/backend/InvenTree/importer/registry.py: 84%

35 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 17:47 +0000

1"""Registry for supported serializers for data import operations.""" 

2 

3import structlog 

4from rest_framework.serializers import Serializer 

5 

6from importer.mixins import DataImportSerializerMixin 

7 

8logger = structlog.get_logger('inventree') 

9 

10 

11class DataImportSerializerRegister: 

12 """Registry for supported serializers for data import operations. 

13 

14 To add a new serializer to the registry, add the @register_importer decorator to the serializer class. 

15 """ 

16 

17 supported_serializers: list[Serializer] = [] 

18 

19 def register(self, serializer) -> None: 

20 """Register a new serializer with the importer registry.""" 

21 if not issubclass(serializer, DataImportSerializerMixin): 21 ↛ 22line 21 didn't jump to line 22 because the condition on line 21 was never true

22 logger.debug('Invalid serializer class: %s', serializer.__name__) 

23 return 

24 

25 if not issubclass(serializer, Serializer): 25 ↛ 26line 25 didn't jump to line 26 because the condition on line 25 was never true

26 logger.debug('Invalid serializer class: %s', serializer.__name__) 

27 return 

28 

29 logger.debug('Registering serializer class for import: %s', serializer.__name__) 

30 

31 if serializer not in self.supported_serializers: 31 ↛ exitline 31 didn't return from function 'register' because the condition on line 31 was always true

32 self.supported_serializers.append(serializer) 

33 

34 

35_serializer_registry = DataImportSerializerRegister() 

36 

37 

38def get_supported_serializers(): 

39 """Return a list of supported serializers which can be used for importing data.""" 

40 return _serializer_registry.supported_serializers 

41 

42 

43def supported_models(): 

44 """Return a map of supported models to their respective serializers.""" 

45 data = {} 

46 

47 for serializer in get_supported_serializers(): 

48 model = serializer.Meta.model 

49 data[model.__name__.lower()] = serializer 

50 

51 return data 

52 

53 

54def supported_model_options(): 

55 """Return a list of supported model options for importing data.""" 

56 options = [] 

57 

58 for model_name, serializer in supported_models().items(): 

59 options.append((model_name, serializer.Meta.model._meta.verbose_name)) 

60 

61 return options 

62 

63 

64def register_importer(): 

65 """Decorator function to register a serializer with the importer registry.""" 

66 

67 def _decorator(cls): 

68 _serializer_registry.register(cls) 

69 return cls 

70 

71 return _decorator