#!c:\Program Files\Python39\python.exe # -*- coding: UTF-8 -*- ''' $RCSfile: recordlist.py,v $ $Revision$ $Author: markus $ $Date$ The BioCASE querytool ''' import os, sys # cgitb.enable() # ***** include the biocase.lib directory in the python sys path for importing ***** exec(open(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir, 'lib', 'biocase', 'adjustpath.py'))).read()) # exec(compile(open( os.path.abspath( os.path.join( os.path.dirname( __file__ ), os.pardir, os.pardir, 'lib', 'biocase', 'appinit.py' ) ), "rb").read(), os.path.abspath( os.path.join( os.path.dirname( __file__ ), os.pardir, os.pardir, 'lib', 'biocase', 'appinit.py' ) ), 'exec')) # import pydevd; pydevd.settrace(); from biocase.tools.templating import PageMacro from biocase.tools.htmltools import escapeHtml from biocase.querytool.general import form, skinDir, createFilter, schemaObj, dsa, schema, wrapper_url, printOverHTTP, logDiagnostics, transformXML # from biocase.tools.xslt import transformXML from biocase.querytool.querydispatcher import QueryDispatcher, WrapperError from biocase.querytool.querygenerator import QueryGenerator import logging log = logging.getLogger("querytool.recordlist") # REDIRECT TO GROUPING.PY ? if 'groupby' in form and form['groupby'].value is not None and form['groupby'].value != '---None---': exec(open(os.path.abspath(os.path.join(os.path.dirname(__file__), 'grouping.cgi').read()))) sys.exit() tmpl = PageMacro('Content', PageMacro.DELMODE) tmpl.load('Content', os.path.join(skinDir, 'recordlist.html')) # build a new filter object from form values filterObj = createFilter(form, schemaObj) log.info("FILTER OBJ: %s" % str(filterObj)) # process paging history and set new start/limit values limit = schemaObj.limit start = int(form['start'].value) if 'history' in form: history = form['history'].value.split(',') thisPagingIndex = len(history) + 1 else: history = [] thisPagingIndex = 1 # update template tmpl['dsa'] = dsa tmpl['schema'] = schema tmpl['filter'] = str(filterObj) tmpl['filter_display'] = escapeHtml(str(filterObj).replace('_', ' ')) if wrapper_url is not None: tmpl['wrapper_url'] = wrapper_url # generate the protocol QG = QueryGenerator() protocolXML = QG.getSearchProtocol(NS=schemaObj.NS, respNS=schemaObj.NS, start=start, limit=limit, count=False, filterObj=filterObj) log.debug("QUERY PROTOCOL CREATED:\n%s" % protocolXML) # query the wrapper QD = QueryDispatcher() try: recStatus = QD.sendQuery(wrapper_url, protocolXML) except WrapperError as e: tmpl = PageMacro('Content', PageMacro.DELMODE) tmpl.load('Content', os.path.join(os.path.dirname(__file__), '_error.html')) tmpl['dsa'] = dsa tmpl['ErrorMessage'] = e.msg printOverHTTP(tmpl) sys.exit() logDiagnostics(QD.getDiagnostics()) # # calculate new paging indices, history etc # # new/next start index nextIndex = recStatus.start + recStatus.count + recStatus.drop nextNum = '' pagingList1 = [] pagingList2 = [] i = 1 for h in history: if int(h) < recStatus.start: pagingDict = {} pagingDict['label_num1'] = str(i) pagingDict['start_index1'] = str(h) pagingList1.append(pagingDict) elif int(h) == recStatus.start: thisPagingIndex = i else: pagingDict = {} pagingDict['label_num2'] = str(i) pagingDict['start_index2'] = str(h) pagingList2.append(pagingDict) i += 1 # next button if recStatus.total > nextIndex: # there are more records in the DB. Provide paging to next nextNum = 'next' # append history list if needed if len(history) == 0 or int(max(history)) < int(start): history.append(start) # apply stylesheet content = QD.getContent() if content is not None: paras = {'dsa': dsa, 'unitlink': 'details.cgi?dsa=%s&detail=unit&wrapper_url=%s&schema=%s' % (dsa, wrapper_url, schema)} stylesheetResult = transformXML(content, os.path.join(skinDir, schemaObj.reclistXSL), paras) else: stylesheetResult = "%s" % schemaObj.noRecordMessage # update template with wrapper results tmpl['result_start'] = str(recStatus.start + 1) tmpl['result_ende'] = str(nextIndex) tmpl['result_count'] = str(recStatus.count) tmpl['history'] = ','.join([str(h) for h in history]) tmpl['XSL'] = str(stylesheetResult) # paging tmpl.expand('Content', 'paging_list1', pagingList1) tmpl['num_this'] = str(thisPagingIndex) tmpl.expand('Content', 'paging_list2', pagingList2) tmpl['next_start'] = str(nextIndex) tmpl['next_num'] = nextNum # # print HTML ! # printOverHTTP(tmpl)