Ignore:
Timestamp:
29/08/07 11:34:04 (12 years ago)
Author:
lawrence
Message:

Revising the query string to support clear distinction
between format (raw,xml,html) and outputSchema (original, DIF etc).

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/retrieve.py

    r2844 r2852  
    2626        if logger: self.logger=logger 
    2727        self.inputs=dict(parse_querystring(request.environ)) 
    28         # it's kind of unfortunate that format=(xml,html) is what we expect in the 
    29         # url but at the retrieval level format is the schema ... oh well ... 
     28        # NB: we could have two types of query string argument: 
     29        #   format= (raw,html) and 
     30        #   outputSchema=(original, someSchema)  
    3031        self.format='' 
    31         if 'original' in self.inputs: 
    32             self.format={'0':'','1':'original'}[self.inputs['original']] 
     32        if 'format' in self.inputs: self.format=self.inputs['format'] 
     33        self.outputSchema='' 
     34        if 'outputSchema' in self.inputs: self.outputSchema=self.inputs['outputSchema'] 
    3335        return 0 
    3436        
     
    3941            c.xml='<p>%s</p>'%status 
    4042            return render_response('error') 
    41         status,x=interface.GetXML(uri,format=self.format) 
     43        status,x=interface.GetXML(uri,outputSchema=self.outputSchema) 
    4244         
    4345        if status: 
     
    5658            c.xml='<p>%s</p>'%status  
    5759            return render_response('error') 
    58         status,x=interface.GetXML(uri,format=self.format) 
     60        status,x=interface.GetXML(uri,outputSchema=self.outputSchema) 
    5961        c.title='Viewing [%s]'%self.uri 
    6062        
    6163        if status: 
    6264            #(the return object x is an xmlHandler object) 
    63             print self.uri.schema 
    64             if self.uri.schema=='NDG-B1': 
    65                 r='stubB' 
    66                 c.doc=stubB.stubB(x.tree,self.cf) 
    67                 c.tbinfo=self.__mytb(c.doc.name) 
    68                 name=c.doc.abbreviation 
    69             elif self.uri.schema=='NDG-A0': 
    70                 r='csml' 
    71                 name=self.uri.localID 
    72                 if 'format' not in self.inputs: self.inputs['format']='xml' 
    73             elif self.uri.schema=='DIF': 
    74                 r='dif' 
    75                 c.doc=DIF.DIF(x.tree,et=1,ndgObj=self.uri) 
    76                 name=c.doc.name 
    77                 print c.doc.ndgObject 
    78             elif self.uri.schema=='NumSim': 
    79                 r='numsim' 
    80                 c.xmlh=x 
    81                 c.tbinfo=self.__mytb('') 
    82                 name=x.getText('NS_Model/NS_Name') 
    83             else: 
    84                 c.xml=x.tohtml() 
    85                 r='content' 
    86             if 'format' in self.inputs: 
    87                 #override previous output choice if format is xml 
    88                 if self.inputs['format']=='xml':  
     65            viewFormat=self.uri.schema 
     66            if self.outputSchema!='': viewFormat=self.outputSchema 
     67            if self.format not in ('xml','raw'): 
     68                if viewFormat=='NDG-B1': 
     69                    r='stubB' 
     70                    c.doc=stubB.stubB(x.tree,self.cf) 
     71                    c.tbinfo=self.__mytb(c.doc.name) 
     72                    name=c.doc.abbreviation 
     73                elif viewFormat=='NDG-A0': 
     74                    r='csml' 
     75                    name=self.uri.localID 
     76                    #for now we'll handle as pretty print xml 
    8977                    c.xml=x.tohtml() 
    9078                    r='content' 
    9179                    c.tab='Display' 
    92             #f=file('debug.xml','w') 
    93             #f.write(x.tohtml()) 
    94             #f.close() 
    95             #g=file('debug2.xml','w') 
    96             #g.write(str(x)) 
    97             #g.close()        
    98         else:  
    99             c.xml='<div class="error">%s</div>'%x 
    100             r='error' 
    101          
    102         if status:  
     80                elif viewFormat=='DIF': 
     81                    r='dif' 
     82                    c.doc=DIF.DIF(x.tree,et=1,ndgObj=self.uri) 
     83                    name=c.doc.name 
     84                    print c.doc.ndgObject 
     85                elif viewFormat=='NumSim': 
     86                    r='numsim' 
     87                    c.xmlh=x 
     88                    c.tbinfo=self.__mytb('') 
     89                    name=x.getText('NS_Model/NS_Name') 
     90                else: 
     91                    c.xml=x.tohtml() 
     92                    r='content' 
     93            else: 
     94                if self.format=='xml': 
     95                    c.xml=x.tohtml() 
     96                    r='content' 
     97                    c.tab='Display' 
     98                elif self.format=='raw': 
     99                    c.xml=x.xmls 
     100                    return Response(c.xml,'application/xml') 
     101             
    103102            needed=0 
    104103            if 'lastViewed' not in session: needed=1 
    105104            session['lastViewed']=h.current_url() 
    106105            if needed: c.pageTabs.append(('Display',session['lastViewed'])) 
    107          
    108         if status and 'ndgSec' in session: 
    109             #we can update the history 
    110             if 'history' not in session: 
    111                 session['history']=[(name,uri),] 
    112             else: 
    113                 rb=Utilities.RingBuffer(10) 
    114                 for i in session['history']: rb.append(i) 
    115                 #delete it first, so we get to the top of the queue. 
    116                 if (name,uri) in rb: rb.remove((name,uri)) 
    117                 rb.append((name,uri)) 
    118                 session['history']=rb.tolist() 
    119          
    120         if status: session.save() 
     106             
     107            if 'ndgSec' in session: 
     108                #we can update the history 
     109                if 'history' not in session: 
     110                    session['history']=[(name,uri),] 
     111                else: 
     112                    rb=Utilities.RingBuffer(10) 
     113                    for i in session['history']: rb.append(i) 
     114                    #delete it first, so we get to the top of the queue. 
     115                    if (name,uri) in rb: rb.remove((name,uri)) 
     116                    rb.append((name,uri)) 
     117                    session['history']=rb.tolist() 
     118            session.save() 
     119        else:  
     120            c.xml='<div class="error">%s</div>'%x 
     121            r='error' 
    121122         
    122123        if r=='content': 
     
    130131                resp=render_response('error') 
    131132        else: 
    132             resp=render_response(r) 
     133            try: 
     134                resp=render_response(r) 
     135            except Exception,e: 
     136                c.xml='<p> Unexpected error [%s] viewing [%s] </p>'%(str(e),uri) 
     137                c.doc='' 
     138                resp=render_response('error') 
    133139        return resp 
    134140     
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/lib/ndgInterface.py

    r2844 r2852  
    9696         
    9797 
    98     def GetXML(self,uri,format=''): 
     98    def GetXML(self,uri,outputSchema=''): 
    9999        ''' This method provides a secure interface to the server 
    100100        document cache and a remote NDG exist. It is assumed that 
     
    118118            cleared=None 
    119119         
    120         if ndgO.schema=='DIF' and format=='original': 
     120        if outputSchema!='': 
    121121            #bypass the cache ... 
    122             status,xmlh=ndgRetrieve.ndgRetrieve(ndgO,request.environ['ndgConfig'],logger,format) 
     122            status,xmlh=ndgRetrieve.ndgRetrieve(ndgO,request.environ['ndgConfig'],logger,outputSchema) 
    123123        else: 
    124124            try: 
     
    131131                    status,xmlH=self.__getLocal(uri) 
    132132                else:     
    133                     status,xmlh=ndgRetrieve.ndgRetrieve(ndgO,request.environ['ndgConfig'],logger,format) 
     133                    status,xmlh=ndgRetrieve.ndgRetrieve(ndgO,request.environ['ndgConfig'],logger,outputSchema) 
    134134                if status: self.XMLHCache[uri]=xmlh 
    135135             
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/models/ndgObject.py

    r2844 r2852  
    5757        else: 
    5858            self.config=config 
     59            qs=None 
    5960            # This NDG object may itself be a discovery record, which makes life easy, but 
    6061            # it might not be, in which case we have to build up all the possible views upon it. 
     
    6263            discoveryBASE='%s/view/%s__%s__%s'%(server,self.repository,self.schema,self.localID) 
    6364            fmt=self.config.get('DISCOVERY','formatDefault','DIF') 
     65            self.BURL=None 
    6466            # We'll build the following even if it can't be used (as would be the case for 
    6567            # a non data entity B record or an A record) because it's a useful template. 
    66             self.discoveryURL=discoveryBASE 
     68            if self.schema!=fmt: qs=('outputSchema',fmt) 
     69            self.discoveryURL=self.__buildURL(discoveryBASE,[qs]) 
    6770            servicehost=self.config.get('NDG_B_SERVICE',self.repository,'unknown') 
    6871            # If this record is itself a discovery record, then we don't have much more to do 
    6972            if self.schema in ['DIF','DC','MDIP','ISO19139']: 
    70                 self.xmlURL=self.discoveryURL.replace('/view/','/retrieve/')+'?format=raw' 
    71                 self.printableURL=self.discoveryURL+'?format=xml' 
    72                 self.gettable=1 
     73                self.xmlURL=self.__buildURL( 
     74                    discoveryBASE.replace('/view/','/retrieve/'),[qs,('format','raw')]) 
     75                self.printableURL=self.__buildURL(discoveryBASE,[qs,('format','xml')]) 
    7376                self.URL=self.discoveryURL 
     77                if servicehost!='unknown':self.gettable=1 
    7478            elif self.schema in ['NDG-B0','NDG-B1','NumSim']: 
    7579                # One day we'll use a service binding to get this 
     
    9094            #now, we'll build a stub-B url as well, in case that comes in handy  
    9195            if self.schema!='NumSim' and self.gettable<>-1: 
    92                 self.BURL=self.URL.replace(self.schema,'NDG-B1') 
     96                self.BURL=discoveryBASE.replace(self.schema,'NDG-B1') 
    9397                self.BURL=self.BURL.replace(server,servicehost) 
    94             else: self.BURL=None 
    9598 
    96              
     99    def __buildURL(self,base,queryStuff): 
     100        ss='' 
     101        for i in queryStuff:  
     102            if i!=None:ss+='&%s=%s'%(i[0],i[1]) 
     103        if ss!='':ss='?'+ss[1:] 
     104        return base+ss 
    97105             
    98106    def get(self,type='xml'): 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/models/ndgRetrieve.py

    r2846 r2852  
    55 
    66 
    7 def ndgRetrieve(uri,config,logger=0,format=''): 
     7def ndgRetrieve(uri,config,logger=0,output=''): 
    88     
    99    ''' Given an ndgObject, uri, retrieve it, with security in place ''' 
     
    4848    else: 
    4949        target='/db/ndg_B_metadata' 
    50     if format=='': format=uri.schema  
     50     
     51    print uri.uri, 'Output format [%s]'%output 
     52      
     53    if output=='': output=uri.schema  
    5154    
    52     print uri.uri 
     55    
    5356  
    5457    #do the actual retrieve: 
     
    5659    try: 
    5760        time1=time.time() 
    58         r=ws.get(uri.repository,uri.schema,uri.localID,format=format,targetCollection=target) 
     61        r=ws.get(uri.repository,uri.schema,uri.localID,format=output,targetCollection=target) 
    5962        time2=time.time()-time1 
    6063        logString='Document retrieve [%s] took [%s]'%(uri,time2) 
     
    104107        doc='neodc.nerc.ac.uk__DIF__NEODC_NEXTMAP' 
    105108        uri=ndgObject.ndgObject(doc) 
    106         status,xml=ndgRetrieve(uri,self.c,format='original') 
     109        status,xml=ndgRetrieve(uri,self.c,output='original') 
    107110        if not status: raise ValueError(xml) 
    108111 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/meta.kid

    r2760 r2852  
    3131            <td>Downloadable XML version of this record 
    3232            <span py:if="c.doc.ndgObject.gettable==1"> 
    33             (Original <span py:replace="linkimage(c.doc.ndgObject.xmlURL+'&amp;original=1',g.icons_xml,'[XML]')"/>) 
     33            (Original <span py:replace="linkimage(c.doc.ndgObject.xmlURL+'&amp;outputSchema=original',g.icons_xml,'[XML]')"/>) 
    3434            </span></td></tr> 
    3535            <tr py:if="c.doc.ndgObject is not None"> 
     
    3737            <td>Viewable XML version of this record 
    3838             <span py:if="c.doc.ndgObject.gettable==1"> 
    39             (Original <span py:replace="linkimage(c.doc.ndgObject.printableURL+'&amp;original=1',g.icons_prn,'[HTML]')"/>) 
     39            (Original <span py:replace="linkimage(c.doc.ndgObject.printableURL+'&amp;outputSchema=original',g.icons_prn,'[HTML]')"/>) 
    4040            </span></td></tr> 
    4141            <span py:if="c.doc.ndgObject.gettable==1"> 
Note: See TracChangeset for help on using the changeset viewer.