Changeset 1279 for TI07-MOLES


Ignore:
Timestamp:
04/07/06 17:06:35 (13 years ago)
Author:
lawrence
Message:

Simple python interface to exist now supports
chunked queries, but fails with the glue
version of eXist (although it works with the
newer version on Kev's). This is proof of concept for
replacing the java server side web services if we
can't easily fix them.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/PythonCode/existInterface/eXistInterface.py

    r1275 r1279  
    3636                                            constants.xmlrpc_base_path 
    3737                                        ) 
     38        print xmlrpc_uri 
    3839        self.xmlrpc = xmlrpclib.Server(xmlrpc_uri) 
    3940 
     
    5354        return self.xmlrpc.retrieve(id,pos,params).data 
    5455  
    55     def executeChunkedQuery(self,query,start,number,params={}): 
     56    def executeChunkedQuery(self,xquery,start,number,params={}): 
    5657        ''' Execute a query, return a specific part of the result set, and 
    5758        dump the session automagically ''' 
    58         r=self.xmlrpc.query(query,number,start,params) 
     59        xquery=xmlrpclib.Binary(xquery) 
     60        r=self.xmlrpc.query(xquery,number,start,params) 
    5961        return r 
    6062         
     
    100102        except xmlrpclib.Fault: 
    101103            return None 
     104        except KeyError: 
     105            return None 
    102106     
    103107    def sessionRelease(self,id): 
     
    110114            return 0 
    111115     
    112     def chunkedFullText(self,query,target='DIF',start=0,number=10): 
     116    def chunkedFullText(self,query,target='DIF',start=1,number=10): 
    113117        ''' Execute a chunked full text query and return the result 
    114118        set ''' 
     
    116120     
    117121     
    118          
    119      
     122    def getDIF(self,entryID,): 
     123        ''' Get a specific DIF document from a repository by using the entryID ''' 
     124        xq='''for $DE in collection('/db/testdif1')/DIF[Entry_ID='%s'] return $DE'''%entryID 
     125        xquery='''for $DE in collection('/db/testdif1')/DIF[Entry_ID='%s'] return $DE'''%entryID 
     126        id,summary=self.executeQuery(xq)#xquery) 
     127        if summary['hits']==1: 
     128            r=self.retrieve(id,0,{}) 
     129            self.sessionRelease(id) 
     130        else: 
     131            r='none' 
     132        return r 
    120133 
    121134if __name__=="__main__": 
    122135     
    123136    existDB=ndg_eXist() 
     137    gepidaeDB=ndg_eXist(myhost='gepidae.esc.rl.ac.uk') 
     138     
     139    #these both work fine 
    124140    id,summary=existDB.full_text('coapec') 
    125     print summary 
     141    print 'GLUE:',summary 
     142    id,summary=gepidaeDB.full_text('coapec') 
     143    print 'GEPIDAE: ',summary 
     144     
     145    #we can retrieve them all and look at them ... 
    126146    r=1 
    127147    while r is not None: 
    128148        r=existDB.retrieveNext(id) 
    129         if r is not None: print r 
     149        #if r is not None: print r 
    130150    existDB.release(id) 
     151     
     152    gepidaeDB.release(id) 
    131153    print 'done simple' 
    132     print dir(existDB.xmlrpc) 
    133154     
    134     print existDB.chunkedFullText('wdcc') 
     155    #now try and get the DIF documents alone: 
     156    #works fine: print gepidaeDB.getDIF('badc.nerc.ac.uk:DIF:dataent10') 
     157    #crashes: print existDB.getDIF('badc.nerc.ac.uk:DIF:dataent10') 
     158     
     159    print 'done getDIF' 
     160     
     161    print existDB.chunkedFullText('badc') 
    135162     
    136163     
Note: See TracChangeset for help on using the changeset viewer.