Ignore:
Timestamp:
06/02/07 21:23:20 (13 years ago)
Author:
lawrence
Message:

Modifications to show original records

Location:
TI07-MOLES/trunk/PythonCode/wsgi
Files:
4 edited

Legend:

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

    r2098 r2118  
    6767        ''' Return the number of hits associated with the query that created session id ''' 
    6868        return self.xmlrpc.getHits(id) 
     69     
     70    def getDoc(self,collectionName,documentName): 
     71        ''' Lightweight interface to the getDocument method ''' 
     72        name='%s/%s'%(collectionName,documentName) 
     73        r=self.xmlrpc.getDocumentAsString(name,{}) 
     74        return r 
     75     
     76# unfortunately it looks like the exist server doesn't support introspection 
     77#    def showMethods(self): 
     78#        print self.xmlrpc.system.listMethods() 
    6979         
    7080class ndg_eXist(eXist_Connector): 
     
    142152        return r 
    143153         
     154    
     155import unittest 
     156 
     157class TestCase(unittest.TestCase): 
     158     
     159    def testFullText(self): 
     160             
     161        ''' Exercises some of the methods based on something we hope might exist in the database ''' 
     162         
     163        existDB=ndg_eXist(db='glue.badc.rl.ac.uk') 
     164        id,summary=existDB.full_text('neodc') 
     165         
     166        r=existDB.retrieveNext(id) 
     167        d=summary['documents'][0][0] 
     168        print d 
     169        doc=existDB.getDoc('/db/discovery/moles',d) 
     170         
     171        ok=existDB.sessionRelease(id) 
     172        self.assertEqual(1,ok) 
     173 
    144174if __name__=="__main__": 
    145      
    146      
    147     existDB=ndg_eXist() 
    148     gepidaeDB=ndg_eXist(db='gepidae.esc.rl.ac.uk') 
    149      
    150     #these both work fine 
    151     #id,summary=existDB.full_text('coapec') 
    152     #print 'GLUE:',summary 
    153      
    154     #print 'GLUE AGAIN:',existDB.querySummary(id) 
    155      
    156     id,summary=gepidaeDB.full_text('coapec') 
    157     print 'GEPIDAE:\n ',summary 
    158      
    159     #we can retrieve them all and look at them ... 
    160     r=1 
    161     # just get one for now 
    162     #while r is not None: 
    163     r=gepidaeDB.retrieveNext(id) 
    164     if r is not None: print r 
    165  
    166      
    167     #existDB.release(id) 
    168      
    169     gepidaeDB.release(id) 
    170     #print 'done simple' 
    171      
    172     #now try and get the DIF documents alone: 
    173     #works fine: print gepidaeDB.getDIF('badc.nerc.ac.uk:DIF:dataent10') 
    174     #crashes:  
    175     #print existDB.getDIF('badc.nerc.ac.uk:DIF:dataent10') 
    176      
    177     print 'done getDIF' 
    178      
    179     #start,howmany=4,4 
    180     #existDB.chunkedFullText('badc',start,howmany) 
    181      
    182      
    183  
    184      
    185      
     175    unittest.main() 
     176  
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgObject.py

    r2117 r2118  
    77                (2) a printable xml representation ''' 
    88     
    9     def __init__(self,uri,config=None,discoveryOriginal=0): 
     9    def __init__(self,uri,config=None): 
    1010             
    1111        ''' Instantiate an ndg URI, and potentially methods for retrieving documents described by this URI. 
     
    3737        else: 
    3838            self.repository,self.schema,self.localID=repository,schema,localID 
    39         self.ori=discoveryOriginal 
    4039        self.setConfig(config) 
    4140         
     
    5150            self.baseURL='%s&uri=%s__%s__%s'%(fundamental,self.repository,self.schema,self.localID) 
    5251            fmt=self.config.get('DISCOVERY','formatDefault','DIF') 
    53              
    54             if self.ori: 
    55                 #(we'll allow self.uri to differ from the ndg uri "just-in-case") 
    56                 self.original='%s&uri=%s&original=1&type=xml'%(fundamental,self.uri) 
    57                 self.printableOriginal=self.original.replace('type=xml','type=print') 
    58              
     52         
    5953            # Now we indicate the main ways of finding this record 
    6054            if self.schema in ['DIF','DC','MDIP','ISO19139','MOLES-B0','MOLES-B1']: 
     
    6862                #Actually we don't know what this is, so we make the discovery URL the same as the 
    6963                #original one. 
    70                 if self.ori: 
    71                     self.discoveryURL=self.printableOriginal 
    72                     self.printableURL=self.printableOriginal 
    73                     self.xmlURL=self.original 
     64                self.xmlURL='%s&uri=%s&original=1&type=xml'%(fundamental,self.uri) 
     65                self.discoveryURL=self.xmlURL.replace('type=xml','type=print') 
     66                self.printableURL=self.discoveryURL 
    7467                self.gettable=0 
    7568 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgRetrieve.py

    r2098 r2118  
    4343            if format=='DIF': 
    4444                r=DIF(xml,ndgObject=ndgObject) 
    45                 print 'bnl2' 
    4645            elif format=='NDG-B1': 
    4746                r=stubB(xml,self.config) 
     
    8584         
    8685        inputs=dict(parse_querystring(environ)) 
    87         #print inputs 
    8886         
    8987        ctype='text/html'   # default content type (since the default 
    9088                            # may be an error return ...) the actual default 
    9189                            # data type for return is xml. 
    92         if 'uri' not in inputs.keys(): 
     90                             
     91        ctype,r=self._present(inputs,ctype) 
     92         
     93        start_response('200 OK', [('Content-Type', ctype)]) 
     94        return [r] 
     95                 
     96    def _present(self,inputs,ctype): 
     97        ''' This is the entry point for an  inner retrieval loop for document retrieval ''' 
     98        # we seperate this out for ease of building test cases 
     99        ori,format=0,None 
     100         
     101        if 'original' in inputs.keys(): ori=1 
     102         
     103        try: 
     104            outputType=inputs['type'] 
     105        except KeyError: 
     106            outputType='print' 
     107         
     108        if 'uri' not in inputs.keys(): 
    93109            r=self.__prompt() 
    94110            raise ValueError,r 
     
    97113            uri=ndgObject(inputs['uri']) 
    98114            uri.setConfig(self.config) 
     115            self.uri=uri 
    99116            if 'repository' in inputs.keys():  
    100117                db=inputs['repository'] 
     
    108125            ok=1 
    109126            try: 
    110                 if 'format' not in inputs.keys(): 
    111                     format='NDG-B0' 
     127                if ori: 
     128                    print 'and off we go' 
     129                    r=ws.getOriginal(uri.uri) 
     130                    if outputType=='html': outputType='print'  # sanity ...     
    112131                else: 
    113                     format=inputs['format'] 
    114                 r=ws.get(uri.repository,uri.schema,uri.localID,format=format) 
     132                    if 'format' not in inputs.keys(): 
     133                        format='NDG-B0' 
     134                    else: 
     135                        format=inputs['format'] 
     136                    r=ws.get(uri.repository,uri.schema,uri.localID,format=format)        
    115137                if isinstance(r,int): 
    116138                     r='<p> There are %s identifiers matching your request! </p>'%r 
    117139                     ok=0 
    118140            except Exception,e: 
    119                  r='<p> Unable to retrieve [%s], reason was [%s]</p>'%(uri,e) 
     141                 r='<p> Unable to retrieve [%s], reason was [%s]</p>'%(uri.uri,e) 
    120142                 ok=0 
    121             if ok: 
    122                 try: 
    123                     outputType=inputs['type'] 
    124                 except KeyError: 
    125                     outputType='print' 
    126                 if outputType!='xml':  
    127                     try: 
    128                         r=self.shower.get(r,format,otype=outputType,ndgObject=uri) 
    129                     except Exception,e: 
    130                         r='<p> Unable to show document, reason was [%s]<p>'%e 
    131                 else: 
    132                     ctype='text/xml' 
    133             start_response('200 OK', [('Content-Type', ctype)]) 
    134         return [r]     
    135                  
     143         
     144        if not ok: return ctype,r 
     145         
     146        if outputType!='xml':  
     147            try: 
     148                r=self.shower.get(r,format,otype=outputType,ndgObject=self.uri) 
     149            except Exception,e: 
     150                r='<p> Unable to show document, reason was [%s]<p>'%e 
     151        else: 
     152            ctype='text/xml' 
     153        return ctype,r 
    136154     
    137155     
     
    154172        return h 
    155173     
     174import unittest 
     175testURI='noc.soton.ac.uk__DIF__NOCSDAT193' 
     176class TestCase(unittest.TestCase): 
    156177     
     178 
     179    def testRetrieve(self): 
     180        ''' Test fundamental retrieval capability ''' 
     181        ctype='text/html'  
     182        retriever=ndgRetrieve('./') 
     183        inputs={'repository':'glue.badc.rl.ac.uk','uri':testURI,'format':'DIF','type':'html'} 
     184        ctype,r=retriever._present(inputs,ctype) 
     185         
     186    def testOriginal(self): 
     187        ''' Tests the ability to obtain an original document ''' 
     188        ctype='text/html'  
     189        retriever=ndgRetrieve('./') 
     190        inputs={'repository':'glue.badc.rl.ac.uk','uri':testURI,'format':'DIF','type':'html','original':'1'} 
     191        ctype,r=retriever._present(inputs,ctype) 
     192         
     193if __name__=="__main__": 
     194    unittest.main() 
     195     
  • TI07-MOLES/trunk/PythonCode/wsgi/renderEntity.py

    r2104 r2118  
    7272        if entity.ndgObject is not None: 
    7373            print 'Render says gettable is :', entity.ndgObject.gettable 
    74             xicon=hyperlink(image(self.config.get('layout','Xicon'),'[X]'),entity.ndgObject.xmlURL) 
    75             html+='<tr><td width="20%%">%s</td><td> Downloadable XML version of this record </td></tr>'%xicon 
    76             picon=hyperlink(image(self.config.get('layout','printer'),'[Print]'),entity.ndgObject.printableURL) 
    77             html+='<tr><td>%s</td><td> Viewable XML version of this record</td></tr>'%picon 
     74            xx=image(self.config.get('layout','Xicon'),'[X]') 
     75            pp=image(self.config.get('layout','printer'),'[Print]') 
     76            xicon1=hyperlink(xx,entity.ndgObject.xmlURL) 
     77            picon1=hyperlink(pp,entity.ndgObject.printableURL) 
     78            xicon2,picon2='','' 
     79            if entity.ndgObject.gettable:  
     80                xicon2='(Original %s)'%hyperlink(xx,entity.ndgObject.xmlURL+'&original=1') 
     81                picon2='(Original %s)'%hyperlink(pp,entity.ndgObject.printableURL+'&original=1') 
     82            html+='<tr><td width="20%%">%s</td><td> Downloadable XML version of this record %s </td></tr>'%(xicon1,xicon2) 
     83            html+='<tr><td>%s</td><td> Viewable XML version of this record %s</td></tr>'%(picon1,picon2) 
     84            if entity.ndgObject.gettable: 
     85                html+='<tr><td></td><td>(Original records are the raw material harvested from data providers)</td></tr>' 
     86             
    7887        html+='</tbody></table>' 
    7988        return html 
Note: See TracChangeset for help on using the changeset viewer.