Changeset 2345


Ignore:
Timestamp:
28/03/07 20:48:55 (12 years ago)
Author:
lawrence
Message:

Now using the SOAP call for all discovery D calls, rather than XMLRPC
for discovery portability ...

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

Legend:

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

    r2330 r2345  
    105105        self.sessionRelease(id) 
    106106        return r 
    107              
    108     def getOriginal(self,docName): 
    109         ''' Get a specific document from the originals collection collection ''' 
    110  
    111         #xquery='''let $doc := collection('%s')//root()[util:document-name(.) = '%s' ]  
    112         #          for $i in $doc return <document>{document-uri($i)}</document>'''%(collection,docName) 
    113         # 
    114         #id,summary=self.executeQuery(xquery) 
    115         #hits=summary['hits'] 
    116         #if hits!=1: raise ValueError,'%s original documents returned for uri %s'%(hits,docName) 
    117         #r=self.retrieve(id,0,{}) 
    118         #self.sessionRelease(id) 
    119         #return r 
    120          
    121         from ndgSearch import ndgSearch 
    122         ndgWS=ndgSearch() 
    123         result=ndgWS.getDoc(docName+'.xml') 
    124         return result 
    125          
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgObject.py

    r2118 r2345  
    1  
     1# 
     2# 
    23 
    34class ndgObject: 
     
    4647        else: 
    4748            self.config=config 
    48             fundamental='%s?repository=%s'%(self.config.get('DISCOVERY','default'), 
    49                                         self.config.get('DEFAULT','repository')) 
    50             self.baseURL='%s&uri=%s__%s__%s'%(fundamental,self.repository,self.schema,self.localID) 
    51             fmt=self.config.get('DISCOVERY','formatDefault','DIF') 
    52          
    53             # Now we indicate the main ways of finding this record 
    54             if self.schema in ['DIF','DC','MDIP','ISO19139','MOLES-B0','MOLES-B1']: 
    55                 # The record is itself a discovery record, but we'll assume by default 
    56                 # we want to show a specific rendered version 
    57                 self.discoveryURL=self.baseURL+'&format=%s&type=html'%fmt 
     49            # this NDG object may itself be a discovery record, which makes life easy, but 
     50            # it might not be, in which case we have to build up all the possible views upon it. 
     51            discoveryBASE='%s&uri=%s__%s__%s'%( 
     52                self.config.get('DISCOVERY','default'),self.repository,self.schema,self.localID) 
     53            fmt=self.config.get('DISCOVERY','formatDefault','DIF') 
     54            self.discoveryURL=discoveryBASE+'&format=%s&type=html'%fmt 
     55            # If this record is itself a discovery record, then we don't have much more to do 
     56            if self.schema in ['DIF','DC','MDIP','ISO19139']: 
    5857                self.xmlURL=self.discoveryURL.replace('html','xml') 
    5958                self.printableURL=self.discoveryURL.replace('html','print') 
    60                 self.gettable=1 
     59                self.gettable=1 
     60                self.URL=self.discoveryURL 
     61            elif self.schema in ['MOLES-B0','MOLES-B1']: 
     62                #one day we'll use a service binding to get this 
     63                #this is a mapping from the ndg repository id to an actual repository id 
     64                #understood by the ndg exist interface 
     65                repository=self.config.get('NDG_B_SERVICE',self.repository) 
     66                self.URL=self.discoveryURL.replace('ndg',repository) 
     67                self.xmlURL=self.URL.replace('html','xml') 
     68                self.printableURL=self.URL.replace('html','print') 
     69                self.gettable=0 
    6170            else: 
    62                 #Actually we don't know what this is, so we make the discovery URL the same as the 
    63                 #original one. 
    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 
    67                 self.gettable=0 
     71                #currently we don't know how to get this one 
     72                self.gettable=-1 
     73                self.discoveryURL,self.baseURL,self.xmlURL,self.printableURL=None,None,None,None 
    6874 
    6975             
     
    113119        n.setConfig(config) 
    114120        if n.gettable: 
    115             self.assertEqual(n.baseURL[0:5],'http:') 
     121            self.assertEqual(n.discoveryURL[0:5],'http:') 
     122            print n.discoveryURL 
     123             
    116124 
    117125if __name__=="__main__": 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgRetrieve.py

    r2332 r2345  
    88from ndgObject import ndgObject 
    99from MDIP import MDIP 
     10from ndgSearch import ndgSearch 
    1011 
    1112# any class with a get method can be used here, and then only 
     
    1415 
    1516from DocumentRetrieve import DocumentRetrieve 
    16 debug=0 
     17debug=1 
    1718def retrieveFactory(global_config,**local_conf): 
    1819     
     
    5051            elif format=='MDIP': 
    5152                r=MDIP(xml) 
     53            else: 
     54                raise ValueError,'Unknown format [%s] for rendering'%format 
    5255            r=self.renderer.render(r) 
    5356        elif otype=='print': 
     
    103106         
    104107        if 'original' in inputs.keys(): ori=1 
    105          
    106108        try: 
    107109            outputType=inputs['type'] 
     
    124126                ws=self.WScursors[db] 
    125127            else: 
    126                 ws=DocumentRetrieve(db) 
     128                if db.upper()=='NDG': 
     129                    ws=ndgSearch() 
     130                else: 
     131                    ws=DocumentRetrieve(db) 
    127132                self.WScursors[db]=ws 
    128133            ok=1 
    129134            try: 
    130135                if ori: 
    131                     print 'Original Document Request' 
    132                     r=ws.getOriginal(uri.uri) 
    133                     print 'Succeeded' 
     136                #    r=ws.getOriginal(uri.uri) 
    134137                    if outputType=='html': outputType='print'  # sanity ...     
     138                #else: 
     139                if 'format' not in inputs.keys(): 
     140                    format='NDG-B0' 
    135141                else: 
    136                      
    137                     if 'format' not in inputs.keys(): 
    138                         format='NDG-B0' 
    139                     else: 
    140                         format=inputs['format'] 
    141                     print 'Request for %s format document'%inputs['format'] 
    142                     r=ws.get(uri.repository,uri.schema,uri.localID,format=format)        
     142                    format=inputs['format'] 
     143                print 'Request for %s format document'%inputs['format'] 
     144                r=ws.get(uri.repository,uri.schema,uri.localID,format=format)    
    143145                if isinstance(r,int): 
    144146                     r='<p> There are %s identifiers matching your request! </p>'%r 
     
    191193class TestCase(unittest.TestCase): 
    192194         
    193     def testOriginal(self): 
    194         ''' Tests the ability to obtain an original document ''' 
     195    def AtestOriginal(self): 
     196        ''' Tests the ability to obtain an original document via xmlrpc ''' 
    195197        inputs={'repository':'glue.badc.rl.ac.uk','uri':testURI,'format':'original','type':'html','original':'1'} 
    196198        ctype,r=retriever._present(inputs,'text/html') 
    197199        if r[0:3]=='<p>':raise ValueError,r 
    198     def testDIF(self): 
     200    def testSOAPOriginal(self): 
     201        ''' Tests the ability to obtain an original document via soap ''' 
     202        inputs={'repository':'ndg','uri':testURI,'format':'original','type':'html','original':'1'} 
     203        ctype,r=retriever._present(inputs,'text/html') 
     204        if r[0:3]=='<p>':raise ValueError,r 
     205    def AtestDIF(self): 
    199206        ''' Tests the ability to obtain a DIF document ''' 
    200207        inputs={'repository':'glue.badc.rl.ac.uk','uri':testURI,'format':'DIF','type':'html'} 
    201208        ctype,r=retriever._present(inputs,'text/html') 
    202209        if r[0:3]=='<p>':raise ValueError,r 
    203     def testMDIP(self): 
     210    def AtestMDIP(self): 
    204211        ''' Tests the ability to obtain an MDIP document ''' 
    205212        inputs={'repository':'glue.badc.rl.ac.uk','uri':testURI,'format':'MDIP','type':'html'} 
    206213        ctype,r=retriever._present(inputs,'text/html') 
    207214        if r[0:3]=='<p>':raise ValueError,r 
    208     def testISO(self): 
     215    def AtestISO(self): 
    209216        ''' Tests the ability to obtain an ISO document ''' 
    210217        inputs={'repository':'glue.badc.rl.ac.uk','uri':testURI,'format':'ISO19139','type':'html'} 
    211218        ctype,r=retriever._present(inputs,'text/html') 
    212219        if r[0:3]=='<p>':raise ValueError,r 
    213     def testDC(self): 
     220    def AtestDC(self): 
    214221        ''' Tests the ability to obtain a DC document ''' 
    215222        inputs={'repository':'glue.badc.rl.ac.uk','uri':testURI,'format':'DC','type':'html'} 
     
    217224        if r[0:3]=='<p>':raise ValueError,r 
    218225         
    219          
    220          
    221226if __name__=="__main__": 
    222227    unittest.main() 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgSearch.py

    r2319 r2345  
    9393        return self.documents 
    9494 
    95     def getDoc(self,document): 
     95    def getDoc(self,document,format='original'): 
    9696        ''' Return a single document from the backend database ''' 
    9797         
     
    102102        request.Documents=DocList 
    103103        DocList.Document=[document,] 
    104         request.Format='original' 
     104        request.Format=format 
    105105        #try: 
    106106        searchResult=self.server.doPresent(request) 
     
    189189        return results 
    190190         
     191    def get(self,repository,schema,localID,format='original'): 
     192        ''' Obtain a document via it's NDG id split up ''' 
     193        uri='%s__%s__%s'%(repository,schema,localID) 
     194        fileName=uri+'.xml' 
     195        return self.getDoc(fileName,format) 
     196         
    191197         
    192198import unittest 
     
    243249        print s.hits 
    244250        print 'Hopefully this is also zero: if not, expect the Sequence test to fail:',s.hits 
    245  
    246          
     251         
     252    def testGet(self): 
     253        ''' Tests getting via uri components ''' 
     254        (r,s,l)='neodc.nerc.ac.uk','DIF','NEODC_ARSF_ATM_DAED' 
     255        ss=ndgSearch() 
     256        x=ss.get(r,s,l,format='DC') 
    247257 
    248258if __name__=="__main__": 
Note: See TracChangeset for help on using the changeset viewer.