mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Push even more barcode decoding to the individual plugin
- DigiKey barcode is NOT json formatted, for example...
This commit is contained in:
		| @@ -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: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user