Push even more barcode decoding to the individual plugin

- DigiKey barcode is NOT json formatted, for example...
This commit is contained in:
Oliver Walters 2020-04-14 23:33:03 +10:00
parent e56c018a4a
commit 7faa0d199d
2 changed files with 32 additions and 38 deletions

View File

@ -5,8 +5,6 @@ Main JSON interface views
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
import json
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.http import JsonResponse from django.http import JsonResponse
@ -61,26 +59,9 @@ class BarcodeScanView(APIView):
print("Barcode data:") print("Barcode data:")
print(barcode_data) print(barcode_data)
valid_data = False
if barcode_data is None: if barcode_data is None:
response['error'] = _('No barcode data provided') response['error'] = _('No barcode data provided')
elif type(barcode_data) is dict:
valid_data = True
elif type(barcode_data) is str:
# Attempt to decode the barcode into a JSON object
try:
barcode_data = json.loads(barcode_data)
valid_data = True
except json.JSONDecodeError:
response['error'] = _('Barcode is not a JSON object')
else:
response['error'] = _('Barcode data is unknown format')
if valid_data:
# Look for a barcode plugin that knows how to handle the data # Look for a barcode plugin that knows how to handle the data
for plugin_class in barcode_plugins: for plugin_class in barcode_plugins:

View File

@ -11,6 +11,8 @@ references model objects actually exist in the database.
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json
from . import barcode from . import barcode
from stock.models import StockItem, StockLocation from stock.models import StockItem, StockLocation
@ -34,6 +36,17 @@ class InvenTreeBarcodePlugin(barcode.BarcodePlugin):
""" """
# The data must either be dict or be able to dictified
if type(self.data) is dict:
pass
elif type(self.data) is str:
try:
self.data = json.loads(self.data)
except json.JSONDecodeError:
return False
else:
return False
for key in ['tool', 'version']: for key in ['tool', 'version']:
if key not in self.data.keys(): if key not in self.data.keys():
return False return False