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

Improved handling of deployments in browse.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.