Changeset 2371 for TI07-MOLES/trunk


Ignore:
Timestamp:
02/04/07 21:39:56 (12 years ago)
Author:
lawrence
Message:

Interim check in browse update ... (browse still not working properly)

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

Legend:

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

    r2364 r2371  
    5151            print 'bnl',targetCollection,xquery 
    5252             
    53             if hits!=1: raise ValueError,'%s documents returned for uri %s:%s:%s'%(hits,repository,'NDG-B0',localID) 
     53            if hits!=1: raise ValueError,'%s documents returned for uri %s:%s:%s (in %s)'%(hits,repository,'NDG-B0',localID,targetCollection) 
    5454             
    5555            # check output formats 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndg.ini

    r2090 r2371  
    4040[filter-app:ndgWrapGateBrowse] 
    4141use=DiscoveryFrame 
    42 next=GateKeeper 
     42next=Browse 
    4343 
    44 [filter-app:GateKeeper] 
     44[filter-app:Browse] 
     45use=Browse 
     46next=ndgGateKeeper 
     47 
     48[filter-app:ndgGateKeeper] 
    4549use=ndgGateKeeper 
    4650next=retrieve 
     
    5256paste.filter_factory = ndgPageLayout:DiscoveryFrameFactory 
    5357 
     58[filter:Browse] 
     59paste.filter_factory=ndgBrowse:browseFactory 
     60 
    5461[app:ndgDiscovery] 
    5562paste.app_factory = ndgDiscovery:discoveryFactory 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgDiscovery.config

    r2346 r2371  
    6666 
    6767[NDG_B_SERVICE] 
    68 badc.nerc.ac.uk: xxx 
    69 bodc.nerc.ac.uk: %(server)s/retrieve 
    70 nocs.soton.ac.uk: %(server)s/retrieve 
    71 neodc.soton.ac.uk: %(server)s/retrieve 
    72 pml.ac.uk: %(server)s/retrieve 
     68# following is a list of repository servers, actually only one is needed, 
     69# and that is the one owned by  
     70# http://badc.rl.ac.uk/browse?uri=badc.nerc.ac.uk__MOLES-B1__dataset 
     71# needs to be mapped into a specific server ... 
     72badc.nerc.ac.uk: chinook.badc.rl.ac.uk 
     73bodc.nerc.ac.uk: BODC-dummyHost 
     74grid.bodc.nerc.ac.uk: BODC-dumyHOST-G 
     75nocs.soton.ac.uk: NOCS-dummyHost 
     76neodc.soton.ac.uk: NEODC-dummyHost 
     77pml.ac.uk: PML-dummyHost 
    7378icon: %(layout)s/B.gif 
    7479icon_alt: B Service 
    7580icon_title: Links to a METADATA BROWSE view of this dataset 
    7681service_name: B 
    77 instance: repository=%(repository)s&format=NDG-B1&type=html&uri 
     82instance: %(server)s/retrieve&repository=REPOSITORY&format=NDG-B1&type=html&uri 
    7883 
    7984[RELATED] 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgGateKeeper.py

    r2364 r2371  
    8181                    n=ndgObject(inputs['uri']) 
    8282                    inputs['format']=n.schema 
    83                 r=self.shower.get(r,inputs['format'],otype=outputType) 
     83                print 'Desired format',inputs['format'] 
     84                r=self.shower.get(r[0],inputs['format'],otype=outputType) 
    8485        except ValueError,e: 
    8586            r=e 
     
    8788        # now do the real start response 
    8889        start_response('200 OK', [('Content-Type', ctype)]) 
    89         print r 
    9090        xml=r[0] 
    9191 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgObject.py

    r2364 r2371  
    5959                self.gettable=1 
    6060                self.URL=self.discoveryURL 
    61             elif self.schema in ['MOLES-B0','MOLES-B1']: 
     61            elif self.schema in ['NDG-B0','NDG-B1']: 
    6262                #one day we'll use a service binding to get this 
    6363                #this is a mapping from the ndg repository id to an actual repository id 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndgRetrieve.py

    r2364 r2371  
    4545            if format=='DIF': 
    4646                r=DIF(xml,ndgObject=ndgObject) 
    47             elif format=='MOLES-B1': 
     47            elif format=='NDG-B1': 
    4848                r=stubB(xml,self.config) 
    4949            elif format=='DC': 
     
    8989        ''' This is the function which implements the document retrieval ''' 
    9090         
     91        browse=0 
    9192        inputs=dict(parse_querystring(environ)) 
    9293        if environ['SCRIPT_NAME']=='/browse': browse=1 
     
    9697                            # data type for return is xml. 
    9798                             
    98         ctype,r=self._present(inputs,ctype) 
     99        ctype,r=self._present(inputs,ctype,browse=browse) 
    99100         
    100101        start_response('200 OK', [('Content-Type', ctype),('charset','utf-8')]) 
  • TI07-MOLES/trunk/PythonCode/wsgi/stubB.py

    r2364 r2371  
    77from renderEntity import renderEntity 
    88from Utilities import * 
    9 from ServiceBinding import * 
    109from AccessControl import AccessControl 
    1110from geoUtilities import Bounding 
    1211from People import * 
     12from ndgObject import ndgObject 
     13from xmlHandler import xmlHandler 
    1314try: #python 2.5 
    1415    from xml.etree import ElementTree as ET 
     
    2122        from elementtree import ElementTree as ET 
    2223 
     24def idconvert(helper,elem,config=None): 
     25    ''' Given an elementTree element for a dgMetadataID, create 
     26    a standard ndg URI, and produce an ndgObject ''' 
     27    id=helper.find(elem,'dgMetadataID') 
     28    entryID='%s__%s__%s'%(helper.getText(id,'repositoryIdentifier'), 
     29                            helper.getText(id,'schemeIdentifier'), 
     30                            helper.getText(id,'localIdentifier')) 
     31    uri=ndgObject(entryID,config) 
     32    return uri 
     33 
    2334class dataGranule: 
    2435        ''' Provides support for data granule structures ''' 
    25         def __init__(self,elem,config,name=''): 
    26                 self.elem=elem 
    27                 self.constraints=AccessControl(elem.find('accessControlPolicy')) 
    28                 self.binding=ServiceBinding(config,n=name,entryID=idconvert(elem.find('dataModelID'))) 
    29                 self.Aurl=self.binding.url 
    30                  
    31                  
     36        def __init__(self,helper,elem,config,name=''): 
     37            self.elem=elem 
     38            self.constraints=AccessControl(helper.find(elem,'accessControlPolicy')) 
     39            self.name=name 
     40            self.uri=idconvert(helper,elem,config) 
     41            self.entryID=self.uri.uri 
     42 
    3243class ObservationStation: 
    3344    def __init__(self,e): 
     
    4859         
    4960class DataEntity: 
    50         def __init__(self,element): 
    51                 ''' Attempt to instantiate this stubB as a data entity''' 
    52                 self.elem=element 
    53                 #just one curator 
    54                 self.curator=dgContact(self.elem.find('dgDataRoles/dgDataCurator'),ctype='organisation') 
    55                 #possibly multiple creators 
    56                 self.creators=[dgContact(i) for i in self.elem.findall('dgDataRoles/dgDataCreator')] 
    57                 host,service = '','' # dummy for now 
    58                 #possibly multiple granules 
    59                 self.getGranules() 
    60                 #bounding box, handled as a class because this is going to be difficult ... 
    61                 self.bbox=Bounding(self.elem,entity='stubB') 
    62                 self.temporal() 
    63                 #parameters 
    64                 self.parameters=wrapGetText(self.elem,'dgDataSummary/dgParameterSummary/ParameterName',multiple=1) 
    65                  
    66         def getGranules(self): 
    67                 ''' Load up the granule content within the entity ''' 
    68                 granList=self.elem.findall('dgDataGranule') 
    69                 self.granules=[] 
    70                 i=0 
    71                 for item in granList: 
    72                         i+=1 
    73                         #following needs to be refactored when granule definition includes 
    74                         #a proper name ... 
    75                         name=wrapGetText(item,'name') 
    76                         if name=='': name='Granule %s'%i 
    77                         self.granules.append(dataGranule(item,self.config,name=name)) 
    78                  
    79         def temporal(self): 
    80                 '''Instantiate the timeCoverage attribute by parsing for temporal coverage ''' 
    81                 t=self.elem.find('dgDataSummary/dgDataCoverage/dgTemporalCoverage/DateRange') 
    82                 if t is not None: 
    83                         try: 
    84                                 self.timeCoverage=(float(i.text) for i in t) 
    85                         except: 
    86                                 self.timeCoverage=('',) 
     61    def __init__(self,helper,element): 
     62        ''' Attempt to instantiate this stubB as a data entity''' 
     63        self.elem=element 
     64        self.helper=helper 
     65        #just one curator 
     66        self.curator=dgContact(self.elem.find('dgDataRoles/dgDataCurator'),ctype='organisation') 
     67        #possibly multiple creators 
     68        self.creators=[dgContact(i) for i in self.elem.findall('dgDataRoles/dgDataCreator')] 
     69        host,service = '','' # dummy for now 
     70        #possibly multiple granules 
     71        self.getGranules() 
     72        #bounding box, handled as a class because this is going to be difficult ... 
     73        self.bbox=Bounding(self.elem,entity='stubB') 
     74        self.temporal() 
     75        #parameters 
     76        self.parameters=wrapGetText(self.elem,'dgDataSummary/dgParameterSummary/ParameterName',multiple=1) 
     77         
     78    def getGranules(self): 
     79        ''' Load up the granule content within the entity ''' 
     80        granList=self.elem.findall('dgDataGranule') 
     81        self.granules=[] 
     82        i=0 
     83        for item in granList: 
     84            i+=1 
     85            #following needs to be refactored when granule definition includes a proper name ... 
     86            name=wrapGetText(item,'name') 
     87            if name=='': name='Granule %s'%i 
     88            self.granules.append(dataGranule(self.helper,item,self.config,name=name)) 
     89                 
     90    def temporal(self): 
     91        '''Instantiate the timeCoverage attribute by parsing for temporal coverage ''' 
     92        t=self.elem.find('dgDataSummary/dgDataCoverage/dgTemporalCoverage/DateRange') 
     93        if t is not None: 
     94           try: 
     95                self.timeCoverage=(float(i.text) for i in t) 
     96           except: 
     97                self.timeCoverage=('',) 
    8798                                 
    88                 else: 
    89                         t=self.elem.find('dgDataSummary/dgDataCoverage/dgTemporalCoverage/DateSingle') 
    90                         try: 
    91                                 self.timeCoverage=(t.text,) 
    92                         except: 
    93                                 self.timeCoverage=('',) 
     99        else: 
     100           t=self.elem.find('dgDataSummary/dgDataCoverage/dgTemporalCoverage/DateSingle') 
     101           try: 
     102                self.timeCoverage=(t.text,) 
     103           except: 
     104                self.timeCoverage=('',) 
    94105 
    95106 
     
    111122                try: 
    112123                        self.xml=xml 
    113                         self.tree=ET.fromstring(self.xml) 
    114                         self.name=wrapGetText(self.tree,'name') 
     124                        self.xh=xmlHandler(xml,string=1) 
     125                        self.tree=self.xh.tree 
     126                        helper=nsdumb(self.tree) 
     127                        self.name=helper.getText(self.tree,'name') 
    115128                except Exception,e: 
    116129                        raise ValueError('Error instantiating stubB [%s]'%e) 
    117                 id=self.tree.find('dgMetadataID') 
    118                 self.entryID=idconvert(id) 
    119                 self.binding=ServiceBinding(config,n=wrapGetText(self.tree,'abbreviation'), 
    120                                 entryID=self.entryID) 
    121                 self.Burl=self.binding.url 
    122                                
     130                 
     131 
     132                self.ndgObject=idconvert(helper,self.tree,self.config) 
     133                self.entryID=self.ndgObject.uri               
    123134                #Note that the root of the ElementTree instance is dgMetadataRecord 
    124135                #so we don't need (or want) that in our xpath expressions. 
    125136                 
    126                 self.constraints=AccessControl(self.tree.find('dgMetadataSecurity')) 
    127                 self.abbreviation=wrapGetText(self.tree,'abbreviation') 
     137                self.constraints=AccessControl(helper.find(self.tree,'dgMetadataSecurity')) 
     138                self.abbreviation=helper.getText(self.tree,'abbreviation') 
    128139                if self.abbreviation=='': self.abbreviation=self.name[0:min(15,len(self.name))] 
    129                  
     140                print 'Loading',self.entryID 
    130141                elem=self.tree.find('dgDataEntity') 
    131142                if elem is not None: 
    132                         DataEntity.__init__(self,elem) 
     143                        DataEntity.__init__(self,helper,elem) 
    133144                        self.type='dgDataEntity' 
    134145                        self.others=('activity','observationstation','dataproductiontool') 
     
    154165 
    155166                self.abstract=wrapGetText(self.tree,'dgMetadataDescription/abstract/abstractText') 
    156                  
     167                print self.abstract 
    157168                # now go get all the related links 
    158169                self.related=[] 
     
    166177                        for subitem in subitems: 
    167178                            name=wrapGetText(subitem,'name') 
    168                             entryID=idconvert(subitem.find('dgMetadataID')) 
    169                             binding=ServiceBinding(name,entryID=entryID,serviceFile=serviceFile) 
    170                             aa.append(binding) 
     179                            uri=idconvert(helper,subitem,self.config) 
     180                            aa.append(uri) 
    171181                        deployment[1].append([self.labels[item],aa]) 
    172182                self.related.append(deployment) 
    173          
     183                print 'Loaded:',self.entryID 
    174184        def toHTML(self,config): 
    175185            if self.tree is not None: 
Note: See TracChangeset for help on using the changeset viewer.