Coverage for src/backend/InvenTree/plugin/base/barcodes/helper.py: 80%
31 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"""Helper functions for barcode generation."""
3from typing import cast
5import structlog
7import InvenTree.helpers_model
8from InvenTree.models import InvenTreeBarcodeMixin
10logger = structlog.get_logger('inventree')
13def cache(func):
14 """Cache the result of a function, but do not cache falsy results."""
15 cache = {}
17 def wrapper():
18 """Wrapper function for caching."""
19 if 'default' not in cache:
20 res = func()
22 if res:
23 cache['default'] = res
25 return res
27 return cache['default']
29 return wrapper
32def generate_barcode(model_instance: InvenTreeBarcodeMixin):
33 """Generate a barcode for a given model instance."""
34 from common.settings import get_global_setting
35 from plugin import registry
36 from plugin.mixins import BarcodeMixin
38 # Find the selected barcode generation plugin
39 slug = get_global_setting('BARCODE_GENERATION_PLUGIN', create=False)
41 plugin = cast(BarcodeMixin, registry.get_plugin(slug))
43 return plugin.generate(model_instance)
46@cache
47def get_supported_barcode_models() -> list[type[InvenTreeBarcodeMixin]]:
48 """Returns a list of database models which support barcode functionality."""
49 return InvenTree.helpers_model.getModelsWithMixin(InvenTreeBarcodeMixin)
52@cache
53def get_supported_barcode_models_map():
54 """Return a mapping of barcode model types to the model class."""
55 return {
56 model.barcode_model_type(): model for model in get_supported_barcode_models()
57 }
60@cache
61def get_supported_barcode_model_codes_map():
62 """Return a mapping of barcode model type codes to the model class."""
63 return {
64 model.barcode_model_type_code(): model
65 for model in get_supported_barcode_models()
66 }