Changeset 2379 for TI07-MOLES


Ignore:
Timestamp:
03/04/07 22:50:55 (12 years ago)
Author:
lawrence
Message:

Improved handling of deployments in browse.

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

Legend:

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

    r2097 r2379  
    1616import logging 
    1717 
    18 __NOCONFIG='Missing Config File' 
    19  
    2018class myConfig: 
    2119     
     
    2523   def __init__(self,configfile,logName='NDGLOG'): 
    2624       self.config=ConfigParser.ConfigParser() 
    27        if not os.path.exists(configfile): raise __NOCONFIG, configfile 
     25       if not os.path.exists(configfile):  
     26           raise ValueError("Config file doesn't exist [%s]"%configfile) 
    2827       self.config.read(configfile) 
    2928       logfile=self.get('logging','debugLog',None) 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgObject.py

    r2376 r2379  
    6666                #understood by the ndg exist interface 
    6767                repository=self.config.get('NDG_B_SERVICE',self.repository,'Unknown-B-Repository') 
    68                 self.URL=self.discoveryURL.replace('ndg',repository) 
     68                url=self.discoveryURL.replace('ndg',repository) 
     69                self.URL=url.replace('format=%s'%fmt,'format=%s'%self.schema) 
    6970                self.xmlURL=self.URL.replace('html','xml') 
    7071                self.printableURL=self.URL.replace('html','print') 
     
    7374                #currently we don't know how to get this one 
    7475                self.gettable=-1 
     76                self.URL='unknown' 
    7577                self.discoveryURL,self.baseURL,self.xmlURL,self.printableURL=None,None,None,None 
    7678 
     
    128130     
    129131    def testStubB(self): 
    130         uri='grid.bodc.nerc.ac.uk__MOLES-B1__PCDA47973RS2302' 
     132        ''' Test the url components of a stub-b ''' 
     133        uri='badc.nerc.ac.uk__NDG-B1__dataent_chablis' 
    131134        n=ndgObject(uri,self.getConfig()) 
     135        print n.discoveryURL 
     136        print n.URL 
     137        print n.xmlURL 
     138        print n.printableURL 
     139 
    132140 
    133141    def testHorribleURI(self): 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgRetrieve.py

    r2371 r2379  
    143143                else: 
    144144                    format=inputs['format'] 
    145                 if browse: 
     145                if browse or format=='NDG-B1': 
    146146                    target='/db/ndg_B_metadata' 
    147147                else: 
  • TI07-MOLES/trunk/PythonCode/wsgi/renderEntity.py

    r2366 r2379  
    190190             
    191191def renderRelated(entity): 
    192         ''' take a stub-b and create html for the related entities ''' 
    193         print entity.xml 
    194         if entity.related!=[]: 
    195                 html='''<p><br/></p> 
    196                 <table cellspacing="0" cellpadding="3" border="0" width="100%"> 
    197                 <tbody> 
    198                         <tr> 
    199                                 <td class="lineHead" colspan="2"><span class="headingO">Related Entities</span></td> 
    200                         </tr>''' 
    201                          
    202                 for deployment in entity.related: 
    203                         #really ought to have a row for the deployment name .... 
    204                         for instance  in deployment[1]: 
    205                                 label=instance[0] 
    206                                 for link in instance[1]: 
    207                                         html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%">%s</td></tr>'%(label,link) 
    208                 html+='</tbody></table>' 
    209         else: 
    210                 html='' 
    211         return html 
    212          
     192    ''' take a stub-b and create html for the related entities ''' 
     193    html='' 
     194    if entity.related!=[]: 
     195        html='''<p><br/></p>' 
     196                <table cellspacing="0" cellpadding="3" border="0" width="100%"> 
     197                <tbody> 
     198                <tr><td class="lineHead" colspan="3"><span class="headingO">Related Entities</span></td></tr> 
     199                ''' 
     200        i=0 
     201        for deployment in entity.related: 
     202            #could use a name if we have one, but meanwhile we'll use a numeric ... 
     203            i+=1 
     204            d=str(i)   
     205            for key in deployment.links: 
     206                for l in deployment.links[key]: 
     207                    a='<a href="%s">%s</a>'%(l.URL,l.name) 
     208                    html+='''<tr><td width="10%%">%s</td> 
     209                                <td width="30%%">%s</td> 
     210                                    <td width="60%%">%s</td></tr>'''%(d,key,a) 
     211         
     212        html+='</tbody></table>' 
     213    return html 
     214         
  • TI07-MOLES/trunk/PythonCode/wsgi/stubB.py

    r2371 r2379  
    3232    return uri 
    3333 
     34class ndgLink: 
     35    ''' This is a holder for an ndgObject which has a name (and possibly abbreviation) ''' 
     36    def __init__(self,name,abbrev,ndgO): 
     37        self.ndgObject=ndgO 
     38        self.name=name 
     39        self.abbrev=abbrev 
     40        self.image=None 
     41        self.URL=ndgO.URL 
     42    def toHTML(self): 
     43        ### needs to be finished 
     44        return self.ndgObject.URL 
     45 
    3446class dataGranule: 
    3547        ''' Provides support for data granule structures ''' 
     
    5365        self.e=e 
    5466        if e is None: return 
     67         
    5568class Deployment: 
    56     def __init__(self,e): 
    57         self.e=e 
    58         if e is None: return 
     69    def __init__(self,helper,elem,others,config): 
     70        # not passing the config file, a deployment shouldn't be linkable in it's own right 
     71        n=idconvert(helper,elem)   
     72        self.uri=n.uri 
     73        self.dateRange=(helper.getText(elem,'DateStart'),helper.getText(elem,'DateEnd')) 
     74        self.links={} 
     75        for o in others: 
     76            ids=helper.findall(elem,o) 
     77            if o not in self.links: self.links[o]=[] 
     78            for i in ids: 
     79                link=ndgLink( 
     80                     helper.getText(i,'name'),helper.getText(i,'abbreviation'),idconvert(helper,i,config)) 
     81                self.links[o].append(link) 
    5982         
    6083class DataEntity: 
     
    104127                self.timeCoverage=('',) 
    105128 
     129class dgMetadataDescription: 
     130     
     131    def __init__(self,helper,elem): 
     132        ''' Initialise a Metadata Description ''' 
     133        n=idconvert(helper,elem) 
     134        self.uri=n.uri 
     135        self.abstract=helper.getText(elem,'abstract/abstractText') 
     136        self.description=helper.getText(elem,'descriptionSection/dgDescriptionText') 
     137        self.descriptionType=helper.getText(elem,'descriptionSection/contentType') 
     138        online=helper.findall(elem,'descriptionSection/descriptionOnlineReference/dgSimpleLink') 
     139        self.onlineRefs=[] 
     140        for o in online: 
     141            self.onlineRefs.append((helper.getText(o,'name'),helper.getText(o,'URI'))) 
    106142 
    107143 
     
    131167 
    132168                self.ndgObject=idconvert(helper,self.tree,self.config) 
    133                 self.entryID=self.ndgObject.uri               
     169                self.entryID=self.ndgObject.uri 
     170                 
    134171                #Note that the root of the ElementTree instance is dgMetadataRecord 
    135172                #so we don't need (or want) that in our xpath expressions. 
     
    138175                self.abbreviation=helper.getText(self.tree,'abbreviation') 
    139176                if self.abbreviation=='': self.abbreviation=self.name[0:min(15,len(self.name))] 
    140                 print 'Loading',self.entryID 
    141                 elem=self.tree.find('dgDataEntity') 
    142                 if elem is not None: 
     177                 
     178                for i in ('dgDataEntity','dgActivity','dgDataProductionTool','dgObservationStation'): 
     179                    elem=helper.find(self.tree,i) 
     180                    if elem is not None: break 
     181                     
     182                if elem is None: 
     183                    raise ValueError('StubB record does not contain an Activity, DE, DPT, ObsStn') 
     184                elif elem.tag=='dgDataEntity': 
    143185                        DataEntity.__init__(self,helper,elem) 
    144186                        self.type='dgDataEntity' 
    145187                        self.others=('activity','observationstation','dataproductiontool') 
    146                         related='/RelatedDeployment' 
    147                 elem=self.tree.find('dgActivity') 
    148                 if elem is not None: 
     188                        related='RelatedDeployment' 
     189                elif elem.tag=='dgActivity': 
    149190                        self.type='dgActivity' 
    150191                        #nb activity stub-b seems to have dataentity instead of dataEntity 
    151192                        self.others=('dataentity','dataEntity','observationstation','dataproductiontool') 
    152                         related='/ActivityDeployment' 
    153                          
    154                 elem=self.tree.find('dgDataProductionTool') 
    155                 if elem is not None: 
     193                        related='ActivityDeployment' 
     194                elif elem.tag=='dgDataProductionTool': 
    156195                        self.type='dgDataProductionTool' 
    157196                        self.others=('dataEntity','observationstation','activity') 
    158197                        related='DPTDeployment' 
    159                  
    160                 elem=self.tree.find('dgObservationStation') 
    161                 if elem is not None: 
    162                         related='/ObsStnDeployment' 
     198                elif elem.tag=='dgObservationStation': 
     199                        related='ObsStnDeployment' 
    163200                        self.type='dgObservationStation' 
    164201                        self.others=('dataEntity','dataproductiontool','activity') 
    165202 
    166                 self.abstract=wrapGetText(self.tree,'dgMetadataDescription/abstract/abstractText') 
    167                 print self.abstract 
     203                self.description=dgMetadataDescription(helper,helper.find(self.tree,'dgMetadataDescription')) 
     204                self.abstract=self.description.abstract 
     205               
    168206                # now go get all the related links 
    169207                self.related=[] 
    170                  
    171                 deployment=['empty',[]]  #something should eventually go in the empty slot ... 
    172                 for item in self.others: 
    173                     #multiple types of "related deployment definitions" 
    174                     subitems=self.tree.findall(self.type+'/*/'+item) 
    175                     if subitems != []: 
    176                         aa=[] 
    177                         for subitem in subitems: 
    178                             name=wrapGetText(subitem,'name') 
    179                             uri=idconvert(helper,subitem,self.config) 
    180                             aa.append(uri) 
    181                         deployment[1].append([self.labels[item],aa]) 
    182                 self.related.append(deployment) 
    183                 print 'Loaded:',self.entryID 
     208                for d in helper.findall(elem,related): 
     209                    self.related.append(Deployment(helper,d,self.others,self.config)) 
     210 
    184211        def toHTML(self,config): 
    185212            if self.tree is not None: 
     
    188215            else: 
    189216                return '<p>No Valid Stub-B</p>' 
    190          
     217            
     218         
    191219if __name__=="__main__": 
    192220         
    193221        #xml=open("../../exampleB/methyl.example.xml",'r').read() 
    194         xml=open('COAPC_ObsStn.xml','r').read() 
    195         x=stubB(xml,serviceFile='serviceMap.config') 
     222        xml=open('examples/badc.nerc.ac.uk__NDG-B1__dataent_chablis.xml','r').read() 
     223        config=myConfig('ndgDiscovery.config') 
     224        x=stubB(xml,config) 
    196225        y='''<?xml version="1.0" encoding="UTF-8"?> 
    197226                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
     
    201230                                <title>stubB</title> 
    202231                                <LINK media="all, screen" href="../layout/style.css" type="text/css" rel="stylesheet"/> 
    203                         </head> '''+x.toHTML(myConfig('browse.config')) 
     232                        </head> '''+x.toHTML(config) 
    204233        f=file('output.html','w') 
    205234        f.write(y) 
Note: See TracChangeset for help on using the changeset viewer.