bessgoogleapp-step7.py

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

 
Last generated on 17 Sep 2015       francois.taiani@irisa.fr     Valid HTML 4.0!