def GET(self): """Research http://news.ycombinator.com/item?id=1781013 how hacker news voting works and emulate XXX Restrict voting to session().logged users + element id must not already exist in user['votes'] set. XXX Requires accounting + record keeping XXX Preserve the web.ctx GET query params to preserve sorting / ordering Algo: 1. Add karma to paper['submitter'] if vote 2. Record vote in user['votes'] set by id - calc unique vote id via some linear combination of paper pid (and or comment id [cid], if it exists) """ i = web.input(pid=None, sort="popular") if not session().logged: raise web.seeother('/register') if i.pid: i.pid = int(i.pid) u = Academic(session()['uname']) p = Paper(i.pid) if canvote(u, i.pid): try: # move set_vote to paper api p.votes += 1 p.save() record_vote(u['username'], p.submitter, i.pid) except IndexError: return "No such items exists to vote on" raise web.seeother('/?sort=%s' % i.sort)
def clear(pid): """Clear comments for an item""" paper = Paper(pid) paper.comments = [] return paper.save()