def get(self): players = {} levels = {} fetch = Level.all().fetch(100000) for l in fetch: levels[l.id] = l if not players.has_key(l.udid): players[l.udid] = Player() players[l.udid].uploaded.append(l) ratings = {} fetch = LevelStatistics.all().fetch(100000) for r in fetch: if not players.has_key(r.udid): players[r.udid] = Player() players[r.udid].ratings.append(r) self.w("players: %d<br>" % len(players)) self.w("<table border=1>") for udid, p in players.items(): self.w("<tr>") self.w("<td valign=top>%s</td>" % udid) self.w("<td valign=top>") for u in p.uploaded: self.response.out.write("%s" % u.name) self.w("</td>") self.w("<td valign=top>") for r in p.ratings: if levels.has_key(r.levelid): self.response.out.write("%s" % levels[r.levelid].name) else: self.response.out.write("<deleted>") self.w("</td>") self.w("</tr>") self.w("</table>")
def do(self, limit): levels_query = Level.all(keys_only=True) if limit == "rated": levels_query.filter("rated =", True) elif limit == "new": one_month_ago = datetime.datetime.now() - datetime.timedelta(days=31) levels_query.filter("rated =", True) levels_query.filter("added >", one_month_ago) elif limit == "top": levels_query.filter("rated =", True) levels_query.order("-rating") levelkeys = levels_query.fetch(1000) levels = db.get(levelkeys) if self.format == "rss": last = datetime.datetime.now() if len(levels) > 0: last = levels[0].added def name(l): if l.author == "": return l.name return l.name + " by " + l.author self.raw = True self.response.headers["Content-Type"] = "application/rss+xml" self.value = PyRSS2Gen.RSS2( title="Slippy recent levels", link="http://www.inwader.com/slippy/", description="Recently uploaded levels for Slippy the puzzel game", lastBuildDate=last, items=[ PyRSS2Gen.RSSItem( title=name(l), link="http://www.inwader.com/slippy/", description="", guid=PyRSS2Gen.Guid(l.id, isPermaLink=False), pubDate=l.added) for l in levels ]).to_xml(encoding="utf-8") else: self.value = { "version": 0, "levels": [l.dict() for l in levels] }
def get(self): while True: old = db.get(LevelStatistics.all(keys_only=True).filter("new =", False).fetch(1000)) if len(old) == 0: break updated = [] for o in old: o.new = True updated.append(o) db.put(updated) updated = [] for l in db.get(Level.all(keys_only=True).fetch(1000)): l.ratings = 0 l.ratingsum = 0 updated.append(l) db.put(updated) logging.debug("reset ratings")