2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-29 20:16:44 +00:00

Fix some issues with supplier barcode plugins (#5919)

* Remove unnecessary logging imports from supplier plugins

* Fix MPN filtering in get_supplier_parts

* Ensure digikey barcodes contain a SKU

* Keep running other barcode plugins if an error occured in one of them

* Fix typo (replace plugin with current_plugin)

* Fix class name
This commit is contained in:
Bobbe 2023-11-15 03:40:30 +01:00 committed by GitHub
parent dedf50da62
commit cf3d96a265
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 28 additions and 17 deletions

View File

@ -1,5 +1,6 @@
"""API endpoints for barcode plugins.""" """API endpoints for barcode plugins."""
import logging
from django.urls import path, re_path from django.urls import path, re_path
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -17,6 +18,8 @@ from plugin.builtin.barcodes.inventree_barcode import \
from stock.models import StockLocation from stock.models import StockLocation
from users.models import RuleSet from users.models import RuleSet
logger = logging.getLogger('inventree')
class BarcodeScan(APIView): class BarcodeScan(APIView):
"""Endpoint for handling generic barcode scan requests. """Endpoint for handling generic barcode scan requests.
@ -68,7 +71,16 @@ class BarcodeScan(APIView):
result = current_plugin.scan(barcode_data) result = current_plugin.scan(barcode_data)
if result is not None: if result is None:
continue
if "error" in result:
logger.info("%s.scan(...) returned an error: %s",
current_plugin.__class__.__name__, result["error"])
if not response:
plugin = current_plugin
response = result
else:
plugin = current_plugin plugin = current_plugin
response = result response = result
break break
@ -300,7 +312,16 @@ class BarcodePOReceive(APIView):
location=location, location=location,
) )
if result is not None: if result is None:
continue
if "error" in result:
logger.info("%s.scan_receive_item(...) returned an error: %s",
current_plugin.__class__.__name__, result["error"])
if not response:
plugin = current_plugin
response = result
else:
plugin = current_plugin plugin = current_plugin
response = result response = result
break break

View File

@ -130,7 +130,7 @@ class BarcodeMixin:
return supplier_parts return supplier_parts
if mpn: if mpn:
supplier_parts = SupplierPart.objects.filter(manufacturer_part__MPN__iexact=mpn) supplier_parts = supplier_parts.filter(manufacturer_part__MPN__iexact=mpn)
if len(supplier_parts) == 1: if len(supplier_parts) == 1:
return supplier_parts return supplier_parts

View File

@ -3,16 +3,12 @@
This plugin can currently only match DigiKey barcodes to supplier parts. This plugin can currently only match DigiKey barcodes to supplier parts.
""" """
import logging
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from plugin import InvenTreePlugin from plugin import InvenTreePlugin
from plugin.base.barcodes.mixins import SupplierBarcodeData from plugin.base.barcodes.mixins import SupplierBarcodeData
from plugin.mixins import SettingsMixin, SupplierBarcodeMixin from plugin.mixins import SettingsMixin, SupplierBarcodeMixin
logger = logging.getLogger('inventree')
class DigiKeyPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin): class DigiKeyPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
"""Plugin to integrate the DigiKey API into Inventree.""" """Plugin to integrate the DigiKey API into Inventree."""
@ -41,6 +37,10 @@ class DigiKeyPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
if not (barcode_fields := self.parse_ecia_barcode2d(barcode_data)): if not (barcode_fields := self.parse_ecia_barcode2d(barcode_data)):
return None return None
# digikey barcodes should always contain a SKU
if "supplier_part_number" not in barcode_fields:
return None
return SupplierBarcodeData( return SupplierBarcodeData(
SKU=barcode_fields.get("supplier_part_number"), SKU=barcode_fields.get("supplier_part_number"),
MPN=barcode_fields.get("manufacturer_part_number"), MPN=barcode_fields.get("manufacturer_part_number"),

View File

@ -3,7 +3,6 @@
This plugin can currently only match LCSC barcodes to supplier parts. This plugin can currently only match LCSC barcodes to supplier parts.
""" """
import logging
import re import re
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -12,8 +11,6 @@ from plugin import InvenTreePlugin
from plugin.base.barcodes.mixins import SupplierBarcodeData from plugin.base.barcodes.mixins import SupplierBarcodeData
from plugin.mixins import SettingsMixin, SupplierBarcodeMixin from plugin.mixins import SettingsMixin, SupplierBarcodeMixin
logger = logging.getLogger('inventree')
class LCSCPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin): class LCSCPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
"""Plugin to integrate the LCSC API into Inventree.""" """Plugin to integrate the LCSC API into Inventree."""

View File

@ -3,16 +3,12 @@
This plugin currently only match Mouser barcodes to supplier parts. This plugin currently only match Mouser barcodes to supplier parts.
""" """
import logging
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from plugin import InvenTreePlugin from plugin import InvenTreePlugin
from plugin.base.barcodes.mixins import SupplierBarcodeData from plugin.base.barcodes.mixins import SupplierBarcodeData
from plugin.mixins import SettingsMixin, SupplierBarcodeMixin from plugin.mixins import SettingsMixin, SupplierBarcodeMixin
logger = logging.getLogger('inventree')
class MouserPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin): class MouserPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
"""Plugin to integrate the Mouser API into Inventree.""" """Plugin to integrate the Mouser API into Inventree."""

View File

@ -3,7 +3,6 @@
This plugin can currently only match TME barcodes to supplier parts. This plugin can currently only match TME barcodes to supplier parts.
""" """
import logging
import re import re
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -12,8 +11,6 @@ from plugin import InvenTreePlugin
from plugin.base.barcodes.mixins import SupplierBarcodeData from plugin.base.barcodes.mixins import SupplierBarcodeData
from plugin.mixins import SettingsMixin, SupplierBarcodeMixin from plugin.mixins import SettingsMixin, SupplierBarcodeMixin
logger = logging.getLogger('inventree')
class TMEPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin): class TMEPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
"""Plugin to integrate the TME API into Inventree.""" """Plugin to integrate the TME API into Inventree."""