Changeset 3069
- Timestamp:
- 29/11/07 10:15:03 (13 years ago)
- Location:
- TI05-delivery/ows_framework/trunk/ows_server/ows_server
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/discovery.py
r3014 r3069 5 5 from ows_server.models import ndgSearch as NS 6 6 from ows_server.models.DocumentRetrieve import DocumentRetrieve as DR 7 from ows_server.models.DocumentRetrieve import ndgVocabPOX as VS 7 8 from ows_server.models.DIF import DIF 8 9 from ows_server.templates.renderDiscoverySet import renderDiscoverySet … … 12 13 from ows_server.lib.mailer import mailHandler 13 14 from ows_server.models.xmlHandler2 import xmlHandler 15 debug=0 14 16 15 17 … … 155 157 print howmany,hits 156 158 c.state=DiscoveryState(id,searchString,request.environ,hits,searchConstraints,start,howmany) 159 c.querystring=request.environ['QUERY_STRING'] 157 160 print c.state 158 161 … … 202 205 203 206 c.difs=difs 204 if 'searchString' in self.inputs: 205 c.querystring='searchString=%s&textTarget=%s'%(self.inputs['searchString'],self.inputs['textTarget']) 206 else: 207 c.querystring='' 207 208 208 session['results']=h.current_url() 209 209 session.save() … … 292 292 293 293 def semantic(self): 294 c.constraints=request.environ['QUERY_STRING'] 294 self.__setup() 295 vs=VS(proxyServer=self.cf.get('DEFAULT','proxyServer')) 296 if 'searchString' in self.inputs: 297 [broader,narrower]=vs.getRelated(self.inputs['searchString']) 298 c.narrower=narrower 299 c.broader=broader 300 #get a base string for the links to new searches 301 if 'start' in self.inputs: del self.inputs['start'] 302 if 'howmany' in self.inputs: del self.inputs['howmany'] 303 self.inputs['searchString']='###SEARCHSSTRING###' 304 q='%s/discovery?'%g.server 305 for i in self.inputs: q+='%s=%s&'%(i,self.inputs[i]) 306 url=q[0:-1] 307 # and now build the links 308 c.narrower=[] 309 c.broader=[] 310 for i in narrower: 311 c.narrower.append((i,url.replace('###SEARCHSSTRING###',i))) 312 for i in broader: 313 c.broader.append((i,url.replace('###SEARCHSSTRING###',i))) 314 else: 315 broader,narrower=[],[] 316 295 317 return render_response('semantic',fragment=True) 296 318 -
TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/retrieve.py
r2976 r3069 100 100 r='content' 101 101 else: 102 name=str(self.uri) 102 103 if self.format=='xml': 103 104 c.xml=x.tohtml() -
TI05-delivery/ows_framework/trunk/ows_server/ows_server/models/DocumentRetrieve.py
r2976 r3069 2 2 from ndg_xqueries import * 3 3 from xml.dom import minidom 4 try: 5 from xml.etree import ElementTree as ET 6 except: 7 import ElementTree as ET 4 8 import urllib2 5 9 #from stripped_xqueries import strip_de_xquery … … 35 39 xquery=xquery.replace('TargetCollection',targetCollection) 36 40 xquery=xquery.replace('LocalID',localID) 37 print xquery41 if debug:print xquery 38 42 id,summary=self.executeQuery(xquery) 39 43 if summary['hits']==1: … … 118 122 return r 119 123 120 class ndgHTTP: 121 ''' Provides a get method to obtain an xml document from a remote NDG repository ''' 122 def __init__(self,remoteHost,proxyServer=None): 123 self.remoteHost=remoteHost 124 class genericHTTP(object): 125 ''' Provides a generic HTTP request class ''' 126 def __init__(self,proxyServer=None): 124 127 if proxyServer is None: 125 128 proxyHandler=urllib2.ProxyHandler({}) … … 130 133 self.opener=urllib2.build_opener(proxyHandler) 131 134 132 def uriget(self,uri): 133 n=ndgObject(uri) 134 return self.get(n.repository,n.schema,n.localID) 135 136 def get(self,repository,schema,localID,format='NDG-B0',targetCollection=None): 137 #last two arguments for compatibiltiy with API, not for use in restful get ... 138 #TODO what about security? Probably means we need to get the headers of our responses sorted ... 139 url='%s/view/%s__%s__%s?format=raw&outputSchema=%s'%(self.remoteHost,repository,schema,localID,format) 140 #http://docs.python.org/lib/urllib2-examples.html 135 def get(self,url): 141 136 request=urllib2.Request(url) 142 137 response='Error obtaining remote file: ' … … 156 151 return f.read() 157 152 else: 158 raise IOError(response) 153 raise IOError(response) 154 155 class ndgHTTP(genericHTTP): 156 ''' Provides a get method to obtain an xml document from a remote NDG repository ''' 157 def __init__(self,remoteHost,proxyServer=None): 158 self.remoteHost=remoteHost 159 genericHTTP.__init__(self,proxyServer) 160 161 def uriget(self,uri): 162 n=ndgObject(uri) 163 return self.get(n.repository,n.schema,n.localID) 164 165 def get(self,repository,schema,localID,format='NDG-B0',targetCollection=None): 166 #last two arguments for compatibiltiy with API, not for use in restful get ... 167 #TODO what about security? Probably means we need to get the headers of our responses sorted ... 168 url='%s/view/%s__%s__%s?format=raw&outputSchema=%s'%(self.remoteHost,repository,schema,localID,format) 169 #http://docs.python.org/lib/urllib2-examples.html 170 return genericHTTP.get(self,url) 159 171 160 172 def setSecurity(self,location,usercode,password): … … 162 174 pass 163 175 176 class ndgVocabPOX(genericHTTP): 177 ''' Provides a POX interface to the vocab server ''' 178 def __init__(self,path="http://vocab.ndg.nerc.ac.uk/axis2/services/vocab/",proxyServer=None): 179 genericHTTP.__init__(self,proxyServer) 180 self.path="http://vocab.ndg.nerc.ac.uk/axis2/services/vocab/" 181 self.ns="http://vocab.ndg.nerc.ac.uk/" 182 def getRelated(self,subject): 183 ''' Get a related record ''' 184 url='%sgetRelatedRecordByCriteria?subjectText=%s&predicate=255&inferences=True&objectList=%slist/P211/current'%(self.path,subject,self.ns) 185 self.url=url 186 doc=genericHTTP.get(self,url) 187 x=ET.fromstring(doc) 188 b=x.findall('*/{urn:vocab/types}broadMatch') 189 n=x.findall('*/{urn:vocab/types}narrowMatch') 190 self.broader=[(i.find('{urn:vocab/types}entryTerm').text or '') for i in b] 191 self.narrower=[(i.find('{urn:vocab/types}entryTerm').text or '') for i in n] 192 return [self.broader,self.narrower] -
TI05-delivery/ows_framework/trunk/ows_server/ows_server/models/ndgRetrieve.py
r2976 r3069 100 100 def testSOAP(self): 101 101 ''' test link to SOAP web service for DIF''' 102 103 102 self.setup() 104 doc='neodc.nerc.ac.uk__DIF__ NEODC_NEXTMAP'103 doc='neodc.nerc.ac.uk__DIF__dataent_11707799142713994' 105 104 uri=ndgObject.ndgObject(doc) 106 105 status,xml=ndgRetrieve(uri,self.c) … … 109 108 def testOriSOAP(self): 110 109 ''' test link to SOAP web service for DIF (original version)''' 111 112 110 self.setup() 113 doc='neodc.nerc.ac.uk__DIF__ NEODC_NEXTMAP'111 doc='neodc.nerc.ac.uk__DIF__dataent_11707799142713994' 114 112 uri=ndgObject.ndgObject(doc) 115 113 status,xml=ndgRetrieve(uri,self.c,output='original') … … 120 118 users will need to ensure that the document is actually 121 119 in your exist database! ''' 122 123 120 self.setup() 124 121 doc='badc.nerc.ac.uk__NDG-B0__activity_activity_cwvc' 125 doc='neodc.nerc.ac.uk__NDG-B1__ NEODC_NCAVEO_LCM2000'122 doc='neodc.nerc.ac.uk__NDG-B1__dataent_11924879127625221' 126 123 uri=ndgObject.ndgObject(doc) 127 124 status,xml=ndgRetrieve(uri,self.c) … … 130 127 def testNoSOAP(self): 131 128 ''' Test that we get a sensible error if a DIF doesn't exist ''' 132 133 129 self.setup() 134 130 doc='badc.nerc.ac.uk__DIF__blah' … … 139 135 def testNoB(self): 140 136 ''' Test that we get a sensible error if a NDG-B doc doesn't exist ''' 141 142 137 self.setup() 143 138 doc='badc.nerc.ac.uk__NDG-B0__blah' … … 159 154 ''' Attempt a remote get ''' 160 155 self.setup() 161 doc='www.npm.ac.uk__NDG-B1__data_entity. 692'156 doc='www.npm.ac.uk__NDG-B1__data_entity.363' 162 157 uri=ndgObject.ndgObject(doc) 163 158 status,xml=ndgRetrieve(uri,self.c,remote=1) 164 if not status: print xml 159 if not status: print xml #ie print error message if there is one! 165 160 self.assertEqual(status,1) 166 161 … … 169 164 self.setup() 170 165 doc='badc.nerc.ac.uk__NumSim__HadAM2_CodeBase' 166 doc='badc.nerc.ac.uk__NumSim__HadGEM1_Control_Experiment' 171 167 uri=ndgObject.ndgObject(doc) 172 168 status,xml=ndgRetrieve(uri,self.c) 173 print status,xml 169 self.assertEqual(status,1) 170 171 def testHTTPget(self): 172 ''' Try a remote get with no frills''' 173 s='http://www.google.co.uk' 174 x=DocumentRetrieve.genericHTTP(proxyServer='http://wwwcache3.rl.ac.uk:8080/') 175 y=x.get(s) 176 177 def testVocabServer(self): 178 ''' Test the vocabServer ''' 179 v=DocumentRetrieve.ndgVocabPOX(proxyServer="http://wwwcache3.rl.ac.uk:8080/") 180 print v.getRelated('rain') 181 182 174 183 175 184 -
TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/results.kid
r2882 r3069 23 23 <div id="context"> 24 24 ${c.state.hits} results for ${c.state.searchString} (${XML(c.state.constraints)})</div> 25 <div id="SemanticSearchBox"/> 26 25 <div id="SemanticSearchBox"><div id="SemanticSearchResults"> 26 <div py:if="c.state.searchString!=''"> 27 Not found what you are looking for? Try ${XML(h.link_to_remote("Alternative Searches",dict(update="SemanticSearchBox", 28 url='%s?%s'%(h.url_for(action='semantic'),c.querystring))))}. 29 </div></div> 30 </div> 27 31 <?python 28 32 n,p=c.state.getNext() … … 32 36 ?> 33 37 <div class="resultsBar"> 34 <div class="resultsLeft"> 35 ${XML(h.link_to_remote("Semantic Search",dict(update="SemanticSearchBox", 36 url='%s?%s'%(h.url_for(action='semantic'),c.querystring))))} 37 <span py:replace="helpIcon('semser_help')"/> 38 </div> 39 <div> 40 <a href="${c.state.constrainedurl}"> Refine Search</a><span py:replace="helpIcon('refser_help')"/> 41 | Found ${c.state.hits} | Showing ${c.state.offset}-$upper 42 <span py:if="p!=[]"> | <a href="$purl"> Previous ${p[1]}</a> </span> 43 <span py:if="n!=[]"> | <a href="$nurl"> Next ${n[1]}</a></span> | </div> 44 <div id="semser_help" class="hidden"> 45 <div class="helptxt"><p> 46 The semantic search option allows you to see how many hits a search using your current parameters would return if you 47 used a slightly different vocabulary in your search term. 48 </p></div> 49 </div> 50 <div id="refser_help" class="hidden"> 38 <div> 39 <a href="${c.state.constrainedurl}"> Refine Search</a><span py:replace="helpIcon('refser_help')"/> 40 | Found ${c.state.hits} | Showing ${c.state.offset}-$upper 41 <span py:if="p!=[]"> | <a href="$purl"> Previous ${p[1]}</a> </span> 42 <span py:if="n!=[]"> | <a href="$nurl"> Next ${n[1]}</a></span> | 43 </div><div id="refser_help" class="hidden"> 51 44 <div class="helptxt"><p> 52 45 The refined search option allows you to constrain your search by returning you to the advanced search page, but retaining your current search parameters -
TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/semantic.kid
r2763 r3069 2 2 <body> 3 3 <div id="SemanticSearchResults"> 4 Semantic Search not yet implemented ($c.constraints) 4 <span py:if="c.narrower!=[] or c.broader!=[]">You could also try </span> 5 <span py:if="c.narrower !=[]"> 6 narrower search(s): <span py:for="i,url in c.narrower"><a href="$url">$i</a> </span> 7 </span> 8 <span py:if="c.narrower !=[] and c.broader!=[]">;</span> 9 <span py:if="c.broader !=[]"> 10 broader search(s): <span py:for="i,url in c.broader"><a href="$url">$i</a> </span> 11 </span> 12 <span py:if="c.narrower==[] and c.broader==[]">No alternatives available</span> 5 13 </div> 6 14 </body>
Note: See TracChangeset
for help on using the changeset viewer.