Mercurial > hg > events2kml
view eventsRestService.py @ 5:2715bff4628d JS-viewer
Files for JS-viewer (GeoTemCo)
author | Sebastian Kruse <skruse@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 22 Jan 2013 15:07:06 +0100 |
parents | 6d286ce1a64f |
children |
line wrap: on
line source
import web import eventsDB2kml import harvestDataFromEvents import urllib import urlparse urls = ( '/xpath/(.*)', 'xpath', '/xpathSearch', 'xpathSearch', '/sqlSearch', 'sqlSearch', '/sql', 'sql', '/species', 'species', '/applicants', 'applicants', '/locations','locations', '/restricted', 'restricted' ) app = web.application(urls, globals()) #E4D_URL="http://localhost/mmpa/" E4D_URL="http://localhost/~dwinter/mmpa/events2kml/mmpa/" BASE_URL="http://localhost/m/" APPLICANT_FILE_NAME="http://localhost/outApplicants.xml" RESEARCH_FILE_NAME="http://localhost/outResearch.xml" class locations: def GET(self): ret="" url1=urllib.quote_plus(APPLICANT_FILE_NAME) ret+=""" <a href="javascript:callKML('%s','applicants')">applicants</a><br/> """%(url1) url2=urllib.quote_plus(RESEARCH_FILE_NAME) ret+=""" <a href="javascript:callKML('%s','research')">research</a><br/> """%(url2) ret+= """ <a href="javascript:callKMLs('%s','%s')">both</a><br/> """%(url1,url2) return ret class restricted: def GET(self): x=web.input() pathes=x.get("path") print pathes select=x.get("select") newRestriction=x.get("newRestriction") if select is None: select="data" #path kann meherer abfragen enthalten durch | getrennt splittedPath = pathes.split("|") print splittedPath queriesArray=[] for xlinkPath in splittedPath: url = urllib.unquote_plus(xlinkPath); qs=urlparse.urlparse(url).query queries=urlparse.parse_qsl(qs) q="" for query in queries: if query[0]=='q': q=query[1] url= urlparse.urlparse(url).path pathSplitted=url.split("xpath/") if len(pathSplitted)>1: path=pathSplitted[1] queriesArray.append((path,q)) print queriesArray db = eventsDB2kml.DBQuery() if newRestriction is None: # keine weiteren Einschaenkungen dann erzeugen das kml file res= "<events>"+ db.searchXPaths(queriesArray)+"</events>" hv=harvestDataFromEvents.EventKMLTransformer() #x,cnt=hv.readString(res, ".//research_location/place_information", 0) x,cnt=hv.readString(res, ".//place_information", 0) s = hv.toKML(x) return s #sonst suche nach restriction suche muss eine liste von werten ergeben die sich mit der REstriction versteht, dh. restriction =wert wird dann in die Links eingebaut # e.g. man such nach name d.h # select=%20distinct%20cast%28xpath%28%27//applicant/name/text%28%29%27,%20data%29%20as%20text[]%29%20AS%20name # dann muss die Restriction darauf passen i.a. wird die Restriction dem xpath im Suchstring entsprechen, # newRestriction=http%3A%2F%2Flocalhost%2Fm%2Fxpath%2F%2F%2Fapplicant%2Fnam%2Ftext%28%29% newRestriction=urllib.unquote_plus(newRestriction) vals = db.searchXPaths(queriesArray,select,True) ret="" #berechen den neuer link = alter path ergaenzt um neue restriction for val in vals: val=val[0] # result ist immer ein tuple # mehr als ein Treffer pro eintrag for v in val: newQuery="" splittedPath.append(newRestriction+"?q="+v) splittedPathQuoted=[urllib.quote_plus(x) for x in splittedPath] pathNew="|".join(splittedPathQuoted) urlNew=urllib.quote_plus("""%srestricted?path=%s"""%(BASE_URL,pathNew)) ret+="""<a href="%s?kml1=%s&source1=1">%s</a><br/>"""%(E4D_URL,urlNew,v) return ret class sqlSearch: def GET(self): x=web.input() sql=x.get("sql") p=x.get("xpathPlace") output=x.get("output") url="%ssql?q=%s&p=%s"%(BASE_URL,urllib.quote_plus(sql),p) if output=="sql": raise web.seeother(url) url=urllib.quote_plus(url) url="""%s?kml1=%s&source1=1"""%(E4D_URL,url) raise web.seeother(url) class xpathSearch: def GET(self): x=web.input() path=x.get("path") value=x.get("value") url="%sxpath/%s?q=%s"%(BASE_URL,path,value) url=urllib.quote_plus(url) url="""%s?kml1=%s&source1=1"""%(E4D_URL,url) raise web.seeother(url) class sql: def GET(self): x = web.input() q= x.get("q") p= x.get("p") db = eventsDB2kml.DBQuery() res= "<events>"+db.sql(q)+"</events>" hv=harvestDataFromEvents.EventKMLTransformer() #x,cnt=hv.readString(res, ".//research_location/place_information", 0) x,cnt=hv.readString(res, p, 0) s = hv.toKML(x) return s class xpath: def GET(self, path): if not path: return "" x = web.input() q= x.get("q") db = eventsDB2kml.DBQuery() res= "<events>"+db.searchXPath(path, q)+"</events>" hv=harvestDataFromEvents.EventKMLTransformer() #x,cnt=hv.readString(res, ".//research_location/place_information", 0) x,cnt=hv.readString(res, ".//place_information", 0) s = hv.toKML(x) return s class applicants: def GET(self): db = eventsDB2kml.DBQuery() x = web.input() where= x.get("where") whereClause="" #Beispiel: #select distinct # #cast (xpath('//name/text()',data) as text[]) AS name # #from locations # where # 'Astrophytum asterius' = ANY (cast (xpath('//species/text()', data) as text[])) ; if where!="" and where is not None: whereClause="where %s"%where q=""" select cast(xpath('//applicant/name/text()', data) as text[]) AS name from locations %s """%whereClause res=db.query(q) #hole alle species spec=set() for r in res: l=r[0] for x in l: spec.add(x) ret="" spList=[x for x in spec] spList.sort() for x in spList: ret+="""<a href="%sxpath///applicant/name/text()?q=%s">%s</a>"""%(BASE_URL,x,x) url=urllib.quote_plus("%sxpath///applicant/name/text()?q=%s"%(BASE_URL,x)) ret+=""" <a href="javascript:callKML('%s','%s')">e4D</a><br/> """%(url,x) return ret class species: def GET(self): db = eventsDB2kml.DBQuery() x = web.input() where= x.get("where") whereClause="" # Beispiel: #select # #cast (xpath('//species/text()',data) as text[]) AS name # #from locations # where # 'Anna George' = ANY (cast (xpath('//name/text()', data) as text[])) ; # if where!="" and where is not None: whereClause="where %s"%where q=""" select distinct cast(xpath('//species/text()', data) as text[]) AS name from locations %s """%whereClause res=db.query(q) #hole alle species spec=set() for r in res: l=r[0] for x in l: spec.add(x) ret="" spList=[x for x in spec] spList.sort() for x in spList: ret+="""<a href="%sxpath///species/text()?q=%s">%s</a>"""%(BASE_URL,x,x) url=urllib.quote_plus("%sxpath///species/text()?q=%s"%(BASE_URL,x)) ret+=""" <a href="javascript:callKML('%s','%s')">e4D</a><br/> """%(url,x) return ret if __name__ == "__main__": app.run()