* Works for inventory item object.
#BCM_PLUGINS = {'cmd_move_sample': bcm_cmds.cmd_move_sample}
+_SEARCH_FUNCTIONS = {}
def bcm_plugin_processor(keyword, text, bcm_mode):
"""
d['status'] = 'bcm_mode plugin called "%s" was not found' % (bcm_mode)
return d
- return BCM_PLUGINS[bcm_mode](keyword, text, bcm_mode)
\ No newline at end of file
+ return BCM_PLUGINS[bcm_mode](keyword, text, bcm_mode)
+
+
+def register_search_plugin(label, search_function):
+ """
+ Registers a group label and search_function
+
+ search_function(search_string) --> (text_display, obj_url)
+ """
+
+ if label in _SEARCH_FUNCTIONS:
+ msg = "search function for label (%s) already registered." % (label)
+ raise ValueError, msg
+
+ _SEARCH_FUNCTIONS[label] = search_function
+
\ No newline at end of file
from htsworkflow.frontend.bcmagic import models
from htsworkflow.frontend.bcmagic.utils import report_error, redirect_to_url
from htsworkflow.frontend.bcmagic.plugin import bcm_plugin_processor
+from htsworkflow.frontend.bcmagic import plugin
#from htsworkflow.util.jsonutil import encode_json
try:
context_instance=RequestContext(request))
+def __plugin_search(text):
+ """
+ Runs registered plugins to search for results
+ """
+
+ hits = []
+ for label, search_func in plugin._SEARCH_FUNCTIONS.items():
+ result = search_func(text)
+ if result is not None:
+ hits.extend(result)
+
+ n = len(hits)
+ if n == 0:
+ msg = 'No hits found for: %s' % (text)
+ return report_error(msg)
+ elif n == 1:
+ return redirect_to_url(hits[0][1])
+ else:
+ msg = "%d hits found for (%s); multi-hit not implemented yet." % (n, text)
+ return report_error(msg)
+
+
+ #return json.dumps(hits)
+
+
def __magic_process(text):
"""
Based on scanned text, check to see if there is map object to use
# There should always be at least one | in a valid scan.
if len(split_text) <= 1:
- return report_error('Invalid text: %s' % (text))
+ #return report_error('Invalid text: %s' % (text))
+ return __plugin_search(text)
# Keyword is the first element in the list
keyword = split_text[0]
--- /dev/null
+from htsworkflow.frontend.inventory.models import Item
+
+from django.core.exceptions import ObjectDoesNotExist
+
+def item_search(search):
+ """
+ Searches
+ """
+ hits = []
+ try:
+ item = Item.objects.get(uuid=search)
+ except ObjectDoesNotExist:
+ item = None
+
+ if item is not None:
+ hits.append((str(item), item.get_absolute_url()))
+
+ try:
+ item = Item.objects.get(barcode_id=search)
+ except ObjectDoesNotExist:
+ item = None
+
+ if item is not None:
+ hits.append((str(item), item.get_absolute_url()))
+
+ return hits
else:
return u"invb|%s" % (self.barcode_id)
+ def get_absolute_url(self):
+ return '/inventory/%s/' % (self.uuid)
+
pre_save.connect(_assign_uuid, sender=Item)
from htsworkflow.frontend.inventory.models import Item, LongTermStorage
+from htsworkflow.frontend.inventory.bcmagic import item_search
+from htsworkflow.frontend.bcmagic.plugin import register_search_plugin
from htsworkflow.frontend.experiments.models import FlowCell
from htsworkflow.frontend.bcmagic.forms import BarcodeMagicForm
from htsworkflow.frontend.bcprinter.util import print_zpl_socket
from django.template.loader import get_template
from django.contrib.auth.decorators import login_required
+register_search_plugin('Inventory Item', item_search)
+
try:
import json
except ImportError, e: