mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Push even more barcode decoding to the individual plugin
- DigiKey barcode is NOT json formatted, for example...
This commit is contained in:
parent
e56c018a4a
commit
7faa0d199d
@ -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,49 +59,32 @@ 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:
|
# Look for a barcode plugin that knows how to handle the data
|
||||||
valid_data = True
|
for plugin_class in barcode_plugins:
|
||||||
|
|
||||||
elif type(barcode_data) is str:
|
# Instantiate the plugin with the provided plugin data
|
||||||
# Attempt to decode the barcode into a JSON object
|
plugin = plugin_class(barcode_data)
|
||||||
try:
|
|
||||||
barcode_data = json.loads(barcode_data)
|
|
||||||
valid_data = True
|
|
||||||
except json.JSONDecodeError:
|
|
||||||
response['error'] = _('Barcode is not a JSON object')
|
|
||||||
|
|
||||||
else:
|
if plugin.validate():
|
||||||
response['error'] = _('Barcode data is unknown format')
|
|
||||||
|
|
||||||
if valid_data:
|
# Plugin should return a dict response
|
||||||
# Look for a barcode plugin that knows how to handle the data
|
response = plugin.decode()
|
||||||
for plugin_class in barcode_plugins:
|
|
||||||
|
|
||||||
# Instantiate the plugin with the provided plugin data
|
if type(response) is dict:
|
||||||
plugin = plugin_class(barcode_data)
|
if 'success' not in response.keys() and 'error' not in response.keys():
|
||||||
|
response['success'] = _('Barcode successfully decoded')
|
||||||
|
else:
|
||||||
|
response = {
|
||||||
|
'error': _('Barcode plugin returned incorrect response')
|
||||||
|
}
|
||||||
|
|
||||||
if plugin.validate():
|
response['plugin'] = plugin.get_name()
|
||||||
|
response['hash'] = plugin.hash()
|
||||||
|
|
||||||
# Plugin should return a dict response
|
break
|
||||||
response = plugin.decode()
|
|
||||||
|
|
||||||
if type(response) is dict:
|
|
||||||
if 'success' not in response.keys() and 'error' not in response.keys():
|
|
||||||
response['success'] = _('Barcode successfully decoded')
|
|
||||||
else:
|
|
||||||
response = {
|
|
||||||
'error': _('Barcode plugin returned incorrect response')
|
|
||||||
}
|
|
||||||
|
|
||||||
response['plugin'] = plugin.get_name()
|
|
||||||
response['hash'] = plugin.hash()
|
|
||||||
|
|
||||||
break
|
|
||||||
|
|
||||||
if 'error' not in response and 'success' not in response:
|
if 'error' not in response and 'success' not in response:
|
||||||
response = {
|
response = {
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user