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
« 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."""
3import structlog
4from rest_framework.serializers import Serializer
6from importer.mixins import DataImportSerializerMixin
8logger = structlog.get_logger('inventree')
11class DataImportSerializerRegister:
12 """Registry for supported serializers for data import operations.
14 To add a new serializer to the registry, add the @register_importer decorator to the serializer class.
15 """
17 supported_serializers: list[Serializer] = []
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
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
29 logger.debug('Registering serializer class for import: %s', serializer.__name__)
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)
35_serializer_registry = DataImportSerializerRegister()
38def get_supported_serializers():
39 """Return a list of supported serializers which can be used for importing data."""
40 return _serializer_registry.supported_serializers
43def supported_models():
44 """Return a map of supported models to their respective serializers."""
45 data = {}
47 for serializer in get_supported_serializers():
48 model = serializer.Meta.model
49 data[model.__name__.lower()] = serializer
51 return data
54def supported_model_options():
55 """Return a list of supported model options for importing data."""
56 options = []
58 for model_name, serializer in supported_models().items():
59 options.append((model_name, serializer.Meta.model._meta.verbose_name))
61 return options
64def register_importer():
65 """Decorator function to register a serializer with the importer registry."""
67 def _decorator(cls):
68 _serializer_registry.register(cls)
69 return cls
71 return _decorator