Ignore:
Timestamp:
02/02/07 16:28:09 (13 years ago)
Author:
lawrence
Message:

Sundry modifications associated with the deployment on glue, and better
options for viewing and downloading the underlying xml records (not yet
complete)

Location:
TI07-MOLES/trunk/PythonCode/wsgi
Files:
1 added
12 edited

Legend:

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

    r2045 r2097  
    3131    note ... not a complete implementation, currently minimum to 
    3232    show a reasonable piece of content ''' 
    33     def __init__(self,xml,et=0,debug=0,url=None): 
     33    def __init__(self,xml,et=0,debug=0,ndgObject=None): 
    3434         
    3535        '''Initialise a python dif instance based on an xml document (expected 
    3636        to be an input string if et=0, otherwise an ElementTree instance) ''' 
    37          
    3837        if et: 
    3938            try: 
     
    5655        self.debug=debug 
    5756         
     57        # if this is an ndgObject that'll have been sorted externally ... 
     58        self.ndgObject=ndgObject 
     59         
    5860        # now try and interpret it  
    5961         
     
    7072        self.abbreviation=self.name[0:min(5,len(self.name))] 
    7173         
    72         # The binding is an external piece of information which says how discovery 
    73         # information for this DIF instance (or it's latest version) can be recovered  
    74         # from the Internet (of course, it may simply recover itself ...) 
    75          
    76         if url is not None: 
    77             self.binding=DIFService('DISCOVERY',url,'The discovery record for this dataset') 
    78         else: 
    79             self.binding=None 
    80                      
    8174        #Note that entity.constraints.html is about access control on the metadata, 
    8275        #and so we don't populate this here ... 
     
    120113        #services 
    121114        self.services=[] 
     115 
    122116        for item in helper.findall(self.tree,'Related_URL'): 
    123117            self.services.append( 
     
    126120                 helper.getText(item,'URL'), 
    127121                 helper.getText(item,'Description') )) 
    128           
    129         if self.debug: 
     122         
     123        if self.ndgObject is not None: 
     124            if self.ndgObject.gettable: 
     125                self.binding=DIFService('DISCOVERY',self.ndgObject.baseURL,'Discovery record') 
     126        else: 
     127            self.binding=None 
     128         
     129        if self.debug: 
    130130           f=open('difs.log','a') 
    131131           f.write('%s##\n%s\n##################################\n'%(self.entryID,self.xml)) 
    132132           f.close() 
    133              
    134133             
    135134    def toHTML(self,config): 
  • TI07-MOLES/trunk/PythonCode/wsgi/DiscoveryGUI.py

    r1958 r2097  
    66from DiscoveryState import DiscoveryState 
    77from Utilities import myConfig 
     8from ndgObject import ndgObject 
    89 
    910class DiscoveryGUI: 
     
    132133            difs=[] 
    133134            for result in results:  
    134                 url='%s?%s=%s'%(self.config.get('DISCOVERY','default'), 
    135                 self.config.get('DISCOVERY','instance'),result[0]) 
    136                 difs.append(DIF(result[1],url=url)) 
     135                obj=ndgObject(result[0]) 
     136                obj.setConfig(self.config) 
     137                difs.append(DIF(result[1],ndgObject=obj)) 
    137138            if results==[]: 
    138139               self.html+='<p>No results for "%s"!</p>'%searchString 
  • TI07-MOLES/trunk/PythonCode/wsgi/DocumentRetrieve.py

    r2045 r2097  
    4747            id,summary=self.executeQuery(xquery) 
    4848            hits=summary['hits'] 
    49             print 'bnl',targetCollection,xquery 
     49            #print 'bnl',targetCollection,xquery 
    5050             
    5151            if hits!=1: raise ValueError,'%s documents returned for uri %s:%s:%s'%(hits,repository,'NDG-B0',localID) 
  • TI07-MOLES/trunk/PythonCode/wsgi/People.py

    r1958 r2097  
    3333            self.data={'personName':Name(None),'personEmail':'','personPhone':'','orgURL':'','orgName':'','searchlink':''} 
    3434        def toHTML(self,prefix=''): 
    35             print self.data 
     35            #print self.data 
    3636            if self.elem is None: return '' 
    3737            html=prefix #para start? 
  • TI07-MOLES/trunk/PythonCode/wsgi/Utilities.py

    r2045 r2097  
    154154    else: 
    155155        raise TypeError,'idget does not support datatype [%s]'%dataType 
     156     
    156157 
    157158import unittest 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgDiscovery.config

    r1955 r2097  
    88# 
    99[DEFAULT] 
    10 server:         http://localhost.localdomain:8001/ 
    11 layoutdir:      /home/bnl/sandboxes/ndg/TI07-MOLES/trunk/PythonCode/browse/portal/cgi/layout/ 
     10# 
     11# the following is the server on which this browse/discovery instance runs! 
     12server:         http://localhost.localdomain:8001 
     13# 
     14# the following is the server on which the NDG discovery service is running! (Not to be confused with 
     15# the server on which the NDG discover web service is running) 
     16# 
     17ndgServer:      %(server)s 
     18# 
     19# this is the physical file location of the layout directory on this machine  
     20#  
     21layoutdir:      /home/bnl/sandboxes/ndg/TI07-MOLES/trunk/PythonCode/wsgi/layout/ 
     22# 
     23# this should never be changed 
     24# 
    1225layout:         /layout/ 
     26# 
     27# this is the home of the browse repository which will normally be the same as the server 
     28# but it isn't in Bryan's test environment :-) 
     29# 
    1330repository:       glue.badc.rl.ac.uk 
    1431 
    1532[SEARCH] 
    16 advancedURL:        %(server)sdiscovery?advanced=1 
    17 discoveryURL:       %(server)sdiscovery 
    18 helpURL:            %(server)sdiscovery?help=1 
     33advancedURL:        %(ndgServer)s/discovery?advanced=1 
     34discoveryURL:       %(ndgServer)s/discovery 
     35helpURL:            %(ndgServer)s/discovery?help=1 
    1936 
    2037[logging] 
     
    7087badc.nerc.ac.uk: %(server)s/retrieve 
    7188default: %(server)s/retrieve 
    72 instance: repository=%(repository)s&format=DC&type=html&uri 
     89instance: repository=%(repository)s&format=DIF&type=html&uri 
    7390icon_title: Links to the DISCOVERY RECORD for this dataset 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgDiscovery.py

    r1955 r2097  
    4040        start_response('200 OK', [('Content-Type', 'text/html')]) 
    4141        #h='<p>%s:%s</p>'%(str(inputs),self.config.get('SEARCH','advancedURL')) 
    42          
    4342        return [d.html] 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgPageLayout.py

    r1934 r2097  
    7070        ''' Let's prepend and postpend some stuff''' 
    7171        if ('type','xml') in parse_querystring(environ): 
    72             response=['''<?xml version="1.0" encoding="utf-8"?>'''] 
     72            response='''<?xml version="1.0" encoding="utf-8"?>''' 
    7373            footer=0 
    7474        else: 
    7575            footer=1 
    76             response=[self.pageStart,self.header] 
     76            response=self.pageStart+self.header 
    7777        if environ['SCRIPT_NAME']=='/discovery': 
    7878            insert=self.disclaimer 
     
    8080            insert=self.discovery+self.disclaimer 
    8181        self.footer='''<div id="Footer">%s</div></div></body></html>'''%insert 
    82         for i in self.wrapTarget(environ,start_response): response.append(i) 
    83         if footer: response.append(self.footer) 
    84         return response 
     82        for i in self.wrapTarget(environ,start_response): response+=i 
     83        if footer: response+=self.footer 
     84        #currently need to coerce response into a string for flup ... 
     85        return [str(response)] 
    8586         
    8687         
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgRetrieve.py

    r2046 r2097  
    66from DIF import DIF 
    77from stubB import stubB 
     8from ndgObject import ndgObject 
    89 
    910# any class with a get method can be used here, and then only 
     
    4142        if otype=='html': 
    4243            if format=='DIF': 
    43                 r=DIF(xml,self.config) 
     44                r=DIF(xml) 
    4445            elif format=='NDG-B1': 
    4546                r=stubB(xml,self.config) 
     
    8384         
    8485        inputs=dict(parse_querystring(environ)) 
    85         print inputs 
     86        #print inputs 
    8687         
    8788        ctype='text/html'   # default content type (since the default 
     
    9293            raise ValueError,r 
    9394        else: 
    94             uri=inputs['uri'].strip() 
     95            #this will raise a ValueError if there is a problem 
     96            uri=ndgObject(inputs['uri']) 
     97            if 'repository' in inputs.keys():  
     98                db=inputs['repository'] 
     99            else: 
     100                db=uri.repository 
     101            if db in self.WScursors.keys(): 
     102                ws=self.WScursors[db] 
     103            else: 
     104                ws=DocumentRetrieve(db) 
     105                self.WScursors[db]=ws 
    95106            ok=1 
    96             bits=uri.split(':') 
    97             bits2=uri.split('__') 
    98             if len(bits)==3: 
    99                 repository,schema,localID=bits 
    100             elif len(bits2)==3: 
    101                 repository,schema,localID=bits2 
    102             else: 
    103                 bits=uri.split('/') 
    104                 if len(bits)==2: 
    105                     schema='NDG-B0' 
    106                     repository,localID=bits 
    107                 else: ok=0 
    108             if not ok: 
    109                 r='URI [%s] is not a valid NDG style URI'%uri 
    110             else: 
    111                 if 'repository' in inputs.keys():  
    112                     db=inputs['repository'] 
     107            try: 
     108                if 'format' not in inputs.keys(): 
     109                    format='NDG-B0' 
    113110                else: 
    114                     db=repository 
    115                 if db in self.WScursors.keys(): 
    116                     ws=self.WScursors[db] 
    117                 else: 
    118                     ws=DocumentRetrieve(db) 
    119                     self.WScursors[db]=ws 
     111                    format=inputs['format'] 
     112                r=ws.get(uri.repository,uri.schema,uri.localID,format=format) 
     113                if isinstance(r,int): 
     114                     r='<p> There are %s identifiers matching your request! </p>'%r 
     115                     ok=0 
     116            except Exception,e: 
     117                 r='<p> Unable to retrieve [%s], reason was [%s]</p>'%(uri,e) 
     118                 ok=0 
     119            if ok: 
    120120                try: 
    121                     if 'format' not in inputs.keys(): 
    122                         format='NDG-B0' 
    123                     else: 
    124                         format=inputs['format'] 
    125                     r=ws.get(repository,schema,localID,format=format) 
    126                     if isinstance(r,int): 
    127                         r='<p> There are %s identifiers matching your request! </p>'%r 
    128                         ok=0 
    129                 except Exception,e: 
    130                     r='<p> Unable to retrieve [%s], reason was [%s]</p>'%(uri,e) 
    131                     ok=0 
    132             if ok: 
    133                 outputType=inputs['type'] 
     121                    outputType=inputs['type'] 
     122                except KeyError: 
     123                    outputType='print' 
    134124                if outputType!='xml':  
    135                     r=self.shower.get(r,format,otype=outputType) 
     125                    try: 
     126                        r=self.shower.get(r,format,otype=outputType) 
     127                    except Exception,e: 
     128                        r='<p> Unable to show document, reason was [%s]<p>'%e 
    136129                else: 
    137130                    ctype='text/xml' 
     
    158151        ''' 
    159152        return h 
     153     
     154     
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgSearch.py

    r2089 r2097  
    194194        ''' Test fundamental search capability ''' 
    195195        term='temperature' 
    196         s=ndgSearch() 
     196        s=ndgSearch(tracefile) 
    197197        howmany=10 
    198198        docs=s.search(term,start=1,howmany=howmany) 
  • TI07-MOLES/trunk/PythonCode/wsgi/renderDiscoverySet.py

    r1958 r2097  
    7676    i=1 
    7777    for item in difSet: 
     78        #print item.entryID 
    7879        d=item # we used to do the diffing here ... but we don't anymore 
    7980        bgc={1:'rbgWhite',-1:'rbgGrey'}[i] 
  • TI07-MOLES/trunk/PythonCode/wsgi/renderEntity.py

    r1958 r2097  
    7474            html+='<tr><td>%s</td><td>%s</td></tr>'%(s.get(item),item.description) 
    7575        html+='</tbody></table>' 
    76         
     76         
     77        if entity.ndgObject is not None: 
     78            if entity.ndgObject.gettable: 
     79                xicon=hyperlink(image(self.config.get('layout','Xicon'),'[X]'),entity.ndgObject.xmlURL) 
     80                html+='<tr><td width="20%%">%s</td><td> Downloadable XML version of this record </td></tr>'%xicon 
     81                picon=hyperlink(image(self.config.get('layout','printer'),'[Print]'),entity.ndgObject.printableURL) 
     82                html+='<tr><td>%s</td><td> Viewable XML version of this record</td></tr>'%picon 
    7783        return html 
    7884 
     
    9399        #try: 
    94100        #currently all entities are parsed for these ...  
     101         
     102        if len(entity.parameters)==0: 
     103            html+='''<tr><td> Why does this record have no parameters? ''' 
     104        else: 
     105            if len(entity.parameters)==1:  
     106                html+='''<tr><td class="line" width="20%%">%s</td><td>'''%'Parameter' 
     107            else: 
     108                html+='''<tr><td class="line" width="20%%">%s</td><td>'''%'Parameters' 
     109            html+=entity.parameters[0] 
     110            for item in entity.parameters[1:]: 
     111                i=item.replace(' ','&nbsp;') 
     112                html+=',&nbsp;&nbsp; %s'%i 
     113            html+='</td></tr>' 
    95114             
    96         if len(entity.parameters)==1:  
    97             html+='''<tr><td class="line" width="20%%">%s</td><td>'''%'Parameter' 
    98         else: 
    99             html+='''<tr><td class="line" width="20%%">%s</td><td>'''%'Parameters' 
    100         html+=entity.parameters[0] 
    101         for item in entity.parameters[1:]: 
    102             i=item.replace(' ','&nbsp;') 
    103             html+=',&nbsp;&nbsp; %s'%i 
    104         html+='</td></tr>' 
     115             
    105116        html+=''' 
    106             <tr><td class="line">Spatial Coverage<br/></td> 
     117                <tr><td class="line">Spatial Coverage<br/></td> 
    107118                    <td>%s</td></tr>'''%entity.bbox.toHTML() 
    108119     
Note: See TracChangeset for help on using the changeset viewer.