Mercurial > hg > events2kml
diff eventsRestService.py @ 1:283badd62593
new version for embedded e4D
author | dwinter |
---|---|
date | Fri, 12 Oct 2012 08:36:57 +0200 |
parents | 26c06d568e1d |
children | f198c86dd1f6 |
line wrap: on
line diff
--- a/eventsRestService.py Thu Sep 13 16:56:49 2012 +0200 +++ b/eventsRestService.py Fri Oct 12 08:36:57 2012 +0200 @@ -2,49 +2,208 @@ import eventsDB2kml import harvestDataFromEvents import urllib +import urlparse + urls = ( '/xpath/(.*)', 'xpath', + '/xpathSearch', 'xpathSearch', + '/sqlSearch', 'sqlSearch', + '/sql', 'sql', '/species', 'species', '/applicants', 'applicants', - '/locations','locations' + '/locations','locations', + '/restricted', 'restricted' ) app = web.application(urls, globals()) -E4D_URL="http://localhost:8180/e4D/" -BASE_URL="http://localhost:8080/" +E4D_URL="http://localhost/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("http://localhost/outApplicants.xml") + url1=urllib.quote_plus(APPLICANT_FILE_NAME) ret+=""" <a href=" %s?kml1=%s&source1=1" - target="e4D">applicants</a><br/> + >applicants</a><br/> """%(E4D_URL,url1) - url2=urllib.quote_plus("http://localhost/outResearch.xml") + url2=urllib.quote_plus(RESEARCH_FILE_NAME) ret+=""" <a href=" %s?kml1=%s&source1=1" - target="e4D">research</a><br/> + >research</a><br/> """%(E4D_URL,url2) ret+= """ <a href=" %s?kml1=%s&source1=1&kml2=%s&source2=1" - target="e4D">both</a><br/> + >both</a><br/> """%(E4D_URL,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): @@ -76,11 +235,31 @@ 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 @@ -97,15 +276,15 @@ spList.sort() for x in spList: - print x - ret+="""<a href="/xpath///applicant/name/text()?q=%s">%s</a>"""%(x,x) + + 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=" %s?kml1=%s&source1=1" - target="e4D">e4D</a><br/> + >e4D</a><br/> """%(E4D_URL,url) return ret @@ -113,12 +292,32 @@ 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 + select distinct cast(xpath('//species/text()', data) as text[]) AS name from locations - """ - + %s + """%whereClause + + res=db.query(q) #hole alle species spec=set() @@ -134,15 +333,15 @@ spList.sort() for x in spList: - print x - ret+="""<a href="/xpath///species/text()?q=%s">%s</a>"""%(x,x) + + 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=" %s?kml1=%s&source1=1" - target="e4D">e4D</a><br/> + >e4D</a><br/> """%(E4D_URL,url) return ret