Ignore:
Timestamp:
19/09/06 17:19:21 (13 years ago)
Author:
lawrence
Message:

Sundry modifications to browse to improve paging through
result sets and remove dependence on Marta's backend for
fulltext searching.

Location:
TI07-MOLES/trunk/PythonCode/browse/portal/cgi/browse
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/PythonCode/browse/portal/cgi/browse/DIF.py

    r1185 r1525  
    2424            # for some reason we can't parse the document ... 
    2525            self.tree=None 
     26             
    2627        if self.tree is None: return None 
    2728        helper=nsdumb(self.tree) 
     
    7172        self.centre=DIFcontact(helper.find(self.tree,'Data_Center'),ctype='centre',helper=helper) 
    7273        self.curator=DIFcontact(self.tree) 
     74        f=open('difs.log','a') 
     75        f.write(self.entryID+'##'+self.centre.toHTML()+'\n'+self.xml+'\n##################################\n') 
     76        f.close() 
    7377             
    7478        #Data Creators 
  • TI07-MOLES/trunk/PythonCode/browse/portal/cgi/browse/DiscoveryWS.py

    r1416 r1525  
    1313    ''' This class holds the state associated with presenting multiple slices 
    1414    of a large result set ''' 
    15     def __init__(self,sessionID,queryURL,hits,stride=10): 
     15    def __init__(self,sessionID,queryURL,hits,offset=1,stride=10): 
    1616        ''' On instantiation, provide 
    1717                the backend sessionID 
     
    2121        self.sessID=sessionID 
    2222        self.hits=hits 
    23         self.offset=1 
    24         self.stride=10 
     23        self.offset=offset 
     24        self.stride=stride 
    2525 
    2626class DiscoveryWS: 
     
    3333        tracefile=None, 
    3434        user=None, 
    35         passwd=None 
    36         sessID=None) # but we can't use this last parameter ???? 
     35        passwd=None, 
     36        sessID=None): # but we can't use this last parameter ???? 
    3737         
    3838        ''' Establish connection to wsdl proxy at self.srv with self.sessID ''' 
  • TI07-MOLES/trunk/PythonCode/browse/portal/cgi/browse/Utilities.py

    r1317 r1525  
    4242        self.URL='http://%s:%s%s'%(env.get('SERVER_NAME'),env.get('SERVER_PORT'), 
    4343                                   env.get('SCRIPT_NAME')) 
     44        self.baseURL=self.URL 
    4445        #qs=env.get('QUERY_STRING') 
    4546        #if qs!='': self.URL+='?'+qs 
     
    7172                out.write("Content-type: %s\n"%self.contentType) 
    7273                out.write("\n") 
     74                self.content=self.content.encode('utf-8') 
    7375                out.write(self.content) 
    7476 
  • TI07-MOLES/trunk/PythonCode/browse/portal/cgi/browse/browseCGI.py

    r1416 r1525  
    2222from DIF import DIF 
    2323import base64 
     24from eXistInterface import * 
    2425 
    2526import Cookie 
     
    130131                self.FieldStorage=self.request.variables 
    131132                self.requestURL=self.request.URL 
    132                 self.selector=selector(self.requestURL,'select',config.get('layout','selectI')) 
     133                if 'SEARCHSTRING' in self.FieldStorage: 
     134                        url=self.request.baseURL+'?%s'%urllib.urlencode( 
     135                        {'SEARCHSTRING':self.FieldStorage['SEARCHSTRING']}) 
     136                else: url=self.requestURL 
     137                self.selector=selector(url,'select',config.get('layout','selectI')) 
    133138                self.serviceFile=self.config.get('services','serviceFile') 
    134139                 
     
    182187                    self.uri=self.FieldStorage['uri'] 
    183188                    content,name=self.__browse() 
    184                 elif 'search' in self.FieldStorage: 
    185                     self.searchType=self.FieldStorage['search'] 
     189                elif 'SEARCHSTRING' in self.FieldStorage: 
     190                    # probably ought to watch out for search=text types ... 
     191                    self.searchType='text'#self.FieldStorage['search'] 
    186192                    content,name=self.__search() 
    187193                elif 'Error' in self.FieldStorage: 
     
    219225                #get the xml document 
    220226                db=self.config.get('db','exist',None) 
    221                 jar=self.config.get('services','jarLoc') 
     227                passwordFile=self.config.get('security','passwords','passwords.txt') 
     228                                 
     229                jar=self.config.get('services','jarLoc') 
    222230                javabin=self.config.get('services','javaBinary') 
    223                 passwordFile=self.config.get('security','passwords','passwords.txt') 
     231 
    224232                xml=insecureGetDoc(self.uri,db=db,format=format,jar=jar,javaBin=javabin, 
    225233                                   passwordFile=passwordFile) 
    226                  
    227                 #create document instance 
     234                # this isn't ideal but it'll do for now ... 
     235                # try again, directly to the exist database 
     236                if xml is None and format=='DIF': 
     237                    existDB=ndg_eXist(db=db,passwordFile=passwordFile) 
     238                    xml=existDB.getDIF(self.uri) 
     239                 
     240                 
     241                #create document instance 
    228242                if format=='NDG-B0': 
    229243                    self.b=stubB(xml,serviceFile=self.serviceFile) 
     
    270284        def __search(self): 
    271285            ''' Handle simple searching within the context of the browse ''' 
     286            stride=20 
    272287            if 'SEARCHSTRING' in self.FieldStorage: 
    273288                searchString=self.FieldStorage['SEARCHSTRING'] 
    274289                if 'searchSession' in self.FieldStorage: 
    275290                    searchSession=self.FieldStorage['searchSession'] 
     291                    start=int(self.FieldStorage['start']) 
     292                    howmany=int(self.FieldStorage['howmany']) 
     293                else: 
     294                    searchSession=None 
     295                    start=1 
     296                    howmany=stride 
    276297                title='Search for '+searchString 
    277298                try: 
    278                     ws=DiscoveryWS(wsdl=self.config.get('services','searchWSDL'), 
    279                                     sessID=searchSession) 
     299                    #ws=DiscoveryWS(wsdl=self.config.get('services','searchWSDL'), 
     300                    #                sessID=searchSession) 
     301         
     302                    db=self.config.get('db','exist',None) 
     303                    passwordFile=self.config.get('security','passwords','passwords.txt') 
     304                    existDB=ndg_eXist(db=db,passwordFile=passwordFile) 
    280305                except Exception, e: 
    281306                    return self.error('<p>%s<br/>%s'%(e,'Unable to connect to Search BackEnd')),'Error' 
    282307                try: 
    283                     hits=ws.SearchFullText(searchString) 
    284                     state=DiscoveryState(ws.sessID,self.requestURL,hits,stride=10) 
    285                     results=ws.GetResults(offset=state.offset,number=state.stride) 
     308                    #hits=ws.SearchFullText(searchString) 
     309                    #state=DiscoveryState(ws.sessID,self.requestURL,hits,stride=stride) 
     310                    #results=ws.GetResults(offset=state.offset,number=state.stride) 
     311                    hits=0 
     312                    if searchSession is not None: 
     313                        try: 
     314                            id=searchSession 
     315                            summary=existDB.querySummary(id) 
     316                            print '<p>%s</p>'%string(summary) 
     317                        except: 
     318                            id,summary=existDB.full_text(searchString) 
     319                    else: 
     320                        id,summary=existDB.full_text(searchString) 
     321                    hits=summary['hits'] 
     322                    if hits==0: return self.error('No records found'),title 
     323                    r=1 
     324                    results=[] 
     325                    j=1 
     326                    while r is not None and j <= howmany: 
     327                        j+=1 
     328                        r=existDB.retrieveNext(id,pos=start+j-1) 
     329                        if r is not None: results.append(r) 
     330                    state=DiscoveryState(id,self.requestURL,hits,stride=stride,offset=start) 
    286331                except TypeError: 
    287332                    # this is not what these web services should do, they should 
    288333                    # return an empty set or something which matches the argument 
    289                     # list, but at least I think this traps the empty set. 
     334                    # list, but at least I think this traps the empty set for 
     335                    # marta's code at least 
    290336                    return self.error('No records found'),title 
    291337                difs=[] 
    292338                 
    293339                for result in results: difs.append(DIF(result,serviceFile=self.serviceFile)) 
     340         
    294341                html=renderDiscoverySet(difs,state,selector=self.selector, 
    295342                               summary=1,spatial=1,temporal=1,services=1) 
  • TI07-MOLES/trunk/PythonCode/browse/portal/cgi/browse/renderDiscoverySet.py

    r1416 r1525  
    105105    #now work out the links to step through a large result set 
    106106    #html+='<p>Results %s to %s of %s'%(state.offset,min(state.offset+state.stride-1,state.hits),state.hits) 
    107     html+='<p>Results %s to %s of %s'%(state.offset,state.offset+len(difSet),state.hits) 
     107    html+='<p>Results %s to %s of %s'%(state.offset,state.offset+len(difSet)-1,state.hits) 
    108108    if state.stride < state.hits and selector is not None: 
    109109        #1,10,21   11,20,21  21,21,21 
Note: See TracChangeset for help on using the changeset viewer.