From 9f9425559325a696ca9a8dbbe94e7f526b0d16d1 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 20 Oct 2009 20:53:08 -0400 Subject: Added statistics interface and added frame to answer store. --- app.yaml | 4 ++++ framed.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ mainpage.html | 10 ++++----- 3 files changed, 74 insertions(+), 12 deletions(-) diff --git a/app.yaml b/app.yaml index 86c90f5..492fe36 100644 --- a/app.yaml +++ b/app.yaml @@ -16,5 +16,9 @@ handlers: login: admin script: framed.py +- url: /statistics + login: admin + script: framed.py + - url: /.* script: framed.py \ No newline at end of file diff --git a/framed.py b/framed.py index bdb6371..e754864 100644 --- a/framed.py +++ b/framed.py @@ -16,6 +16,7 @@ class Title(db.Model): lastThumb = db.IntegerProperty() class Answer(db.Model): title = db.ReferenceProperty(Title) + frame = db.IntegerProperty() answer = db.ListProperty(int) class NewQuestion(webapp.RequestHandler): @@ -23,18 +24,24 @@ class NewQuestion(webapp.RequestHandler): self.response.headers['Content-Type'] = 'application/json' titles = Title.all() title = titles[randint(0, titles.count() - 1)] - url = "http://img.anyclip.com/thumbnails/%s/tmb_%s_480.jpg" % (title.code, randint(1, title.lastThumb / 10) * 10) #frame hard-coded for now + frame = randint(1, title.lastThumb / 10) * 10 + url = "http://img.anyclip.com/thumbnails/%s/tmb_%s_480.jpg" % (title.code, frame) cast = "" for i in range(len(title.actors)): if i != 0: cast += "," cast += "[\"%s\",\"%s\"]" % (title.actors[i], title.characters[i]) - self.response.out.write("{\"title\":\"%s\",\"code\":\"%s\",\"frame\":\"%s\",\"cast\":[%s]}" % (title.title, title.code, url, cast)) + self.response.out.write("{\"title\":\"%s\",\"code\":\"%s\",\"frame\":%s,\"image\":\"%s\",\"cast\":[%s]}" % (title.title, title.code, frame, url, cast)) class AnswerQuestion(webapp.RequestHandler): def get(self): code = self.request.get("code") - answer = self.request.get("inframe") + answer = self.request.get("answer") + frame = self.request.get("frame") + try: + frame = int(frame) + except: + return if code == "" or answer == "": return answers = answer.split(",") @@ -46,13 +53,18 @@ class AnswerQuestion(webapp.RequestHandler): except: return titleQuery = Title.all().filter('code = ', code).fetch(1) - if len(titleQuery) != 1 or len(answers) == 0 or (answers[i] == -1 and len(answers) > 1): + if len(titleQuery) != 1 or len(answers) == 0 or (-1 in answers and len(answers) > 1): return + maxAnswer = len(titleQuery[0].characters) + for ans in answers: + if ans >= maxAnswer: + return answer = Answer() answer.title = titleQuery[0] answer.answer = answers; + answer.frame = frame answer.put() - self.response.out.write(str(answers) + "
" + code); + self.response.out.write(str(answers) + "
" + code + "
" + str(frame)); class LoadNewTitles(webapp.RequestHandler): def __init__(self): @@ -119,12 +131,58 @@ class LoadNewTitles(webapp.RequestHandler): newTitle.actors = cast[0] newTitle.characters = cast[1] newTitle.put() - + +class Statistics(webapp.RequestHandler): + def get(self): + self.response.out.write("Statistics

Statistics

") + query = Answer.all().order("title").order("frame") + lastTitle = None + lastFrame = -1 + frameAnswers = [] + for answer in query: + if lastFrame != answer.frame or lastTitle == None or answer.title.key() != lastTitle.key(): + if len(frameAnswers) != 0: + union = None + intersection = None + for frameAnswer in frameAnswers: + if union == None: + union = set(frameAnswer) + else: + union = union.union(set(frameAnswer)) + if intersection == None: + intersection = set(frameAnswer) + else: + intersection = intersection.intersection(set(frameAnswer)) + self.response.out.write("
  • Frame %s with %s answers:" % (lastFrame, len(frameAnswers))) + self.response.out.write("") + frameAnswers = [] + lastFrame = answer.frame + frameAnswers.append(answer.answer) + if lastTitle == None or answer.title.key() != lastTitle.key(): + if lastTitle != None: + self.response.out.write("") + lastTitle = answer.title + self.response.out.write("