From 1e9ac3c8c9b47c664c7ac25f497467f6e4648c34 Mon Sep 17 00:00:00 2001 From: wolflu05 <76838159+wolflu05@users.noreply.github.com> Date: Fri, 19 Jul 2024 22:45:11 +0200 Subject: [PATCH] added suggestions from code review --- .../InvenTree/plugin/base/barcodes/helper.py | 9 ++++-- .../builtin/barcodes/inventree_barcode.py | 4 +-- .../barcodes/test_inventree_barcode.py | 29 ++++++++++--------- src/frontend/src/components/items/QRCode.tsx | 27 ++++++++++++----- 4 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/backend/InvenTree/plugin/base/barcodes/helper.py b/src/backend/InvenTree/plugin/base/barcodes/helper.py index 94118ab1a5..c93564e6ea 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/helper.py +++ b/src/backend/InvenTree/plugin/base/barcodes/helper.py @@ -1,7 +1,8 @@ """Helper functions for barcode generation.""" import logging -from typing import Type +from functools import lru_cache +from typing import Type, cast import InvenTree.helpers_model from InvenTree.models import InvenTreeBarcodeMixin @@ -27,20 +28,23 @@ def generate_barcode(model_instance: InvenTreeBarcodeMixin): """Generate a barcode for a given model instance.""" from common.settings import get_global_setting from plugin import registry + from plugin.mixins import BarcodeMixin # Find the selected barcode generation plugin slug = get_global_setting('BARCODE_GENERATION_PLUGIN', create=False) - plugin = registry.get_plugin(slug) + plugin = cast(BarcodeMixin, registry.get_plugin(slug)) return plugin.generate(model_instance) +@lru_cache(maxsize=1) def get_supported_barcode_models() -> list[Type[InvenTreeBarcodeMixin]]: """Returns a list of database models which support barcode functionality.""" return InvenTree.helpers_model.getModelsWithMixin(InvenTreeBarcodeMixin) +@lru_cache(maxsize=1) def get_supported_barcode_models_map(): """Return a mapping of barcode model types to the model class.""" return { @@ -48,6 +52,7 @@ def get_supported_barcode_models_map(): } +@lru_cache(maxsize=1) def get_supported_barcode_model_codes_map(): """Return a mapping of barcode model type codes to the model class.""" return { diff --git a/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py b/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py index d300e5ad3c..c3c0f75e2a 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py @@ -34,8 +34,8 @@ class InvenTreeInternalBarcodePlugin(SettingsMixin, BarcodeMixin, InvenTreePlugi 'name': _('Internal Barcode Format'), 'description': _('Select an internal barcode format'), 'choices': [ - ('json', _('JSON barcodes (require more space)')), - ('short', _('Short barcodes (made for optimized space)')), + ('json', _('JSON barcodes (human readable)')), + ('short', _('Short barcodes (space optimized)')), ], 'default': 'json', }, diff --git a/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py b/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py index 479db4749d..aab979d2db 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py @@ -340,17 +340,17 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): self.assertEqual(response.data['part']['pk'], 5) # Scan a SupplierPart instance with custom prefix - self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'TEST') - response = self.scan({'barcode': 'TESTSP1'}, expected_code=200) + for prefix in ['TEST', '']: + self.set_plugin_setting('SHORT_BARCODE_PREFIX', prefix) + response = self.scan({'barcode': f'{prefix}SP1'}, expected_code=200) + self.assertEqual(response.data['supplierpart']['pk'], 1) + self.assertEqual(response.data['plugin'], 'InvenTreeBarcode') + self.assertIn('success', response.data) + self.assertIn('barcode_data', response.data) + self.assertIn('barcode_hash', response.data) + self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'INV-') - self.assertEqual(response.data['supplierpart']['pk'], 1) - self.assertEqual(response.data['plugin'], 'InvenTreeBarcode') - - self.assertIn('success', response.data) - self.assertIn('barcode_data', response.data) - self.assertIn('barcode_hash', response.data) - def test_generation_inventree_json(self): """Test JSON barcode generation.""" item = stock.models.StockLocation.objects.get(pk=5) @@ -367,10 +367,11 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): data = self.generate('stocklocation', item.pk, expected_code=200).data self.assertEqual(data['barcode'], 'INV-SL5') - # test with custom prefix - self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'TEST') - data = self.generate('stocklocation', item.pk, expected_code=200).data - self.assertEqual(data['barcode'], 'TESTSL5') - self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'INV-') + # test generation with custom prefix + for prefix in ['TEST', '']: + self.set_plugin_setting('SHORT_BARCODE_PREFIX', prefix) + data = self.generate('stocklocation', item.pk, expected_code=200).data + self.assertEqual(data['barcode'], f'{prefix}SL5') + self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'INV-') self.set_plugin_setting('INTERNAL_BARCODE_FORMAT', 'json') diff --git a/src/frontend/src/components/items/QRCode.tsx b/src/frontend/src/components/items/QRCode.tsx index b0826bd1d3..1077692314 100644 --- a/src/frontend/src/components/items/QRCode.tsx +++ b/src/frontend/src/components/items/QRCode.tsx @@ -1,4 +1,4 @@ -import { t } from '@lingui/macro'; +import { Trans, t } from '@lingui/macro'; import { Box, Code, @@ -6,7 +6,8 @@ import { Image, Select, Skeleton, - Stack + Stack, + Text } from '@mantine/core'; import { useQuery } from '@tanstack/react-query'; import QR from 'qrcode'; @@ -94,8 +95,23 @@ export const InvenTreeQRCode = ({ return ( + {data && settings.getSetting('BARCODE_SHOW_TEXT', 'false') && ( - + + + + Barcode Data: + + + {data} + + + + {showEclSelector && (