We add the visualisation log. We first extract the dataset from the datastore (Dataset.get_by_key_name(dataset_name)), and generate a url for the Google Chart API (mapurl).
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import math
def generate_menu(out):
out.write("<p>You can go to:</p>")
for page in ["upload","visualise"]:
out.write("<p><a href='"+page+"'>"+page+"</a></p>")
class Dataset(db.Model):
descrip = db.StringProperty(multiline=True)
content = db.StringListProperty()
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
self.response.out.write('<h1>Welcome to the BESS cloud tutorial!</h1>')
out = self.response.out
generate_menu(out)
class UploadPage(webapp.RequestHandler):
def get(self):
out = self.response.out
out.write('<h1>Welcome to the BESS upload page!</h1>')
out.write("""<form action='/completeupload' method='post'>
<div>Name of dataset:<br/>
<input type='text' name='dataset_name' maxlength='120' size='15'></div>
<div>Description:<br/>
<textarea name='dataset_descrip' rows='3' cols='60'></textarea></div>
<div>Content of dataset:<br/>
<textarea name='dataset_content' rows='10' cols='60'></textarea></div>
<div><input type='submit' value='Upload Dataset'></div>
</form>""")
generate_menu(out)
class CompleteUploadPage(webapp.RequestHandler):
def post(self):
dataset_name = self.request.get('dataset_name')
dataset_cont = self.request.get('dataset_content').split()
dataset = Dataset(key_name=dataset_name)
dataset.content = dataset_cont
dataset.descrip = self.request.get('dataset_descrip')
dataset.put()
out = self.response.out
out.write('<h1>Upload completed</h1>')
out.write("<p>The dataset <b>"+dataset_name + "</b> was uplodaded successfully.</p>")
generate_menu(out)
class VisualisePage(webapp.RequestHandler):
def get(self):
out = self.response.out
self.response.out.write('<h1>Welcome to the BESS visualisation page!</h1>')
dataset_name = self.request.get('dataset')
if dataset_name!="":
out.write("<h2>"+dataset_name+"</h2>")
dataset = Dataset.get_by_key_name(dataset_name)
countries = []
values = []
for pair in dataset.content:
(country,value) = tuple(pair.split(";"))
countries += [country]
values += [math.log(float(value))]
#values += [float(value)]
maxVal = max(values)
minVal = min(values)
values = [ "%.0f"%((value-minVal)*100/(maxVal-minVal)) for value in values ] # scaling to 0-100
countryString = "|".join(countries)
valueString = ",".join(values)
mapurl =\
"https://chart.googleapis.com/chart?"\
+"cht=map:fixed=-60,-180,75,180&chs=565x300&chf=bg,s,D0E0FF"\
+"&chco=f9f9f9,2020ff,00e000,fafa00,ff0000"\
+"&chld="+countryString\
+"&chd=t:"+valueString
out.write("<img src='%s'/>"%mapurl)
application = webapp.WSGIApplication(
[('/' , MainPage ),
('/upload', UploadPage),
('/completeupload' , CompleteUploadPage ),
('/visualise' , VisualisePage )
],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
back