def saveparticipant(self,new,eid,player,pseudonym="",id=0,submit=""): if(new): try: for q in Event.get(eid).participants: if(q.player.user_name==player): flash("Error: %s is already a participant in this event"%player) raise redirect(url("/editevent/"+str(eid))) p=Participant(event=Event.get(eid),player=User.by_user_name(player),pseudonym=Pseudonym.byName(player)) except SQLObjectNotFound: flash("Error: Tried to add a participant to a nonexistent event") raise redirect(url("/news")) else: try: p=Participant.get(id) except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent participant") raise redirect(url("/news")) try: p.player=User.by_user_name(player) p.pseudonym=Pseudonym.byName(pseudonym) except SQLObjectNotFound: flash("Error: Tried to change pseudonym to one that doesn't exist, or change pseudonym for a player that doesn't exist") raise redirect(url("/news")) flash("Participant updated!") raise redirect(url("/editevent/"+str(eid)))
def saveparticipant(self, new, eid, player, pseudonym="", id=0, submit=""): if (new): try: for q in Event.get(eid).participants: if (q.player.user_name == player): flash( "Error: %s is already a participant in this event" % player) raise redirect(url("/editevent/" + str(eid))) p = Participant(event=Event.get(eid), player=User.by_user_name(player), pseudonym=Pseudonym.byName(player)) except SQLObjectNotFound: flash( "Error: Tried to add a participant to a nonexistent event") raise redirect(url("/news")) else: try: p = Participant.get(id) except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent participant") raise redirect(url("/news")) try: p.player = User.by_user_name(player) p.pseudonym = Pseudonym.byName(pseudonym) except SQLObjectNotFound: flash( "Error: Tried to change pseudonym to one that doesn't exist, or change pseudonym for a player that doesn't exist" ) raise redirect(url("/news")) flash("Participant updated!") raise redirect(url("/editevent/" + str(eid)))
def savereport(self, new, eid, player, text, id=0): if (new): try: r = Report(speaker=User.by_user_name(player), event=Event.get(eid), content=text) except SQLObjectNotFound: flash( "Error: Tried to add report by a nonexistent player, or to a nonexistent event" ) raise redirect(url("/news")) else: try: r = Report.get(id) r.content = text #nothing else really should be being edited, but will update it all for future compatibility r.speaker = User.by_user_name(player) r.event = Event.get(eid) except SQLObjectNotFound: flash( "Error: Tried to edit a nonexistent report, or a report for a nonexistent event, or write a report as a nonexistent player." ) raise redirect(url("/news")) flash("Report updated!") raise redirect(url("/news"))
def saveuser(self,oldname,name,address,college,water,notes,password,email,adjustment): if(oldname): try: u=User.by_user_name(oldname) except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent player") raise redirect(url("/scoresname")) #u.user_name=name #don't give too much opportunity to break things u.address=address u.college=college u.water=water u.notes=notes if(password): u.password=password u.email_address=email if(adjustment!=u.adjustment and not identity.in_group('admin')): flash("Error: Tried to change a score adjustment while not umpire") raise redirect(url('/scoresname')) u.adjustment=adjustment else: u=User(user_name=name,address=address,college=college,water=water,notes=notes,password=password,email_address=email,score=0.0,adjustment=adjustment) p=Pseudonym(name=name,player=u) self.updatescores() flash("Player updated!") raise redirect(url("/scoresname"))
def updatescores(self): glicko={} innocent_vector=[0,1,2,4,6,9,13,17,23] for u in User.select(): glicko[u.user_name]=(1500,350,0.06) kills=Kill.select() gamestart=datetime.datetime(2008,6,13,17,0,0) for i in range(42): glicko = glickostep( glicko, [x for x in kills if x.event.datetime >= gamestart + datetime.timedelta(i*14400) and x.event.datetime < gamestart + datetime.timedelta((i+1)*14400)]) for u in glicko: p=User.by_user_name(u) i = 0 for ik in InnocentKill.select(): if(ik.killer==p and not ik.licit): i +=1 p.score=glicko[u][0]-glicko[u][1]+p.adjustment - 35 * innocent_vector[min(i,8)] return
def savereport(self,new,eid,player,text,id=0): if(new): try: r=Report(speaker=User.by_user_name(player),event=Event.get(eid),content=text) except SQLObjectNotFound: flash("Error: Tried to add report by a nonexistent player, or to a nonexistent event") raise redirect(url("/news")) else: try: r=Report.get(id) r.content=text #nothing else really should be being edited, but will update it all for future compatibility r.speaker=User.by_user_name(player) r.event=Event.get(eid) except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent report, or a report for a nonexistent event, or write a report as a nonexistent player.") raise redirect(url("/news")) flash("Report updated!") raise redirect(url("/news"))
def saveinnocentkill(self,eid,killer,licit): try: k=InnocentKill(event=Event.get(eid),killer=User.by_user_name(killer),licit=licit) self.updatescores() flash("Innocent Kill added!") for l in Kill.select(): if((l.victim == k.killer) and l.event.datetime < k.event.datetime and l.event.datetime >= (k.event.datetime - datetime.timedelta(0,14400))): flash("Warning: %s is listed as being killed in the event %s, which was less than four hours before this event."%(l.victim.user_name,str(l.event))) raise redirect(url("/editevent/"+str(eid))) except SQLObjectNotFound: flash("Error: Tried to add an innocent kill to a nonexistent event.") raise redirect(url("/news"))
def savekill(self,eid,killer,victim): try: for k in Event.get(eid).kills: if(k.victim==User.by_user_name(victim)): flash("Error: %s is already marked as being killed in this event, by %s. If they didn't kill %s, delete that kill first."%(victim,k.killer,victim)) raise redirect(url("/editevent/"+str(eid))) k=Kill(event=Event.get(eid),killer=User.by_user_name(killer),victim=User.by_user_name(victim)) self.updatescores() flash("Kill added!") for l in Kill.select(): if(l.id!=k.id): if((l.victim == k.victim or l.victim==k.killer) and l.event.datetime < k.event.datetime and l.event.datetime >= (k.event.datetime - datetime.timedelta(0,14400))): flash("Warning: %s is listed as being killed in the event %s, which was less than four hours before this event."%(l.victim.user_name,str(l.event))) if(l.victim == k.victim and k.event.datetime <= l.event.datetime and k.event.datetime >= (l.event.datetime - datetime.timedelta(0,14400))): flash("Warning: %s is listed as dying again in the event %s, which is less than four hours after this event."%(k.victim.user_name,str(l.event))) if(l.killer == k.victim and k.event.datetime < l.event.datetime and k.event.datetime >= (l.event.datetime - datetime.timedelta(0,14400))): flash("Warning: %s is listed as killing someone else in the event %s, which is less than four hours after this event."%(k.victim.user_name,str(l.event))) raise redirect(url("/editevent/"+str(eid))) except SQLObjectNotFound: flash("Error: Tried to add a kill to a nonexistent event.") raise redirect(url("/news"))
def savekill(self, eid, killer, victim): try: for k in Event.get(eid).kills: if (k.victim == User.by_user_name(victim)): flash( "Error: %s is already marked as being killed in this event, by %s. If they didn't kill %s, delete that kill first." % (victim, k.killer, victim)) raise redirect(url("/editevent/" + str(eid))) k = Kill(event=Event.get(eid), killer=User.by_user_name(killer), victim=User.by_user_name(victim)) self.updatescores() flash("Kill added!") for l in Kill.select(): if (l.id != k.id): if ((l.victim == k.victim or l.victim == k.killer) and l.event.datetime < k.event.datetime and l.event.datetime >= (k.event.datetime - datetime.timedelta(0, 14400))): flash( "Warning: %s is listed as being killed in the event %s, which was less than four hours before this event." % (l.victim.user_name, str(l.event))) if (l.victim == k.victim and k.event.datetime <= l.event.datetime and k.event.datetime >= (l.event.datetime - datetime.timedelta(0, 14400))): flash( "Warning: %s is listed as dying again in the event %s, which is less than four hours after this event." % (k.victim.user_name, str(l.event))) if (l.killer == k.victim and k.event.datetime < l.event.datetime and k.event.datetime >= (l.event.datetime - datetime.timedelta(0, 14400))): flash( "Warning: %s is listed as killing someone else in the event %s, which is less than four hours after this event." % (k.victim.user_name, str(l.event))) raise redirect(url("/editevent/" + str(eid))) except SQLObjectNotFound: flash("Error: Tried to add a kill to a nonexistent event.") raise redirect(url("/news"))
def updatescores(self): glicko = {} innocent_vector = [0, 1, 2, 4, 6, 9, 13, 17, 23] for u in User.select(): glicko[u.user_name] = (1500, 350, 0.06) kills = Kill.select() gamestart = datetime.datetime(2008, 6, 13, 17, 0, 0) for i in range(42): glicko = glickostep(glicko, [ x for x in kills if x.event.datetime >= gamestart + datetime.timedelta(i * 14400) and x.event.datetime < gamestart + datetime.timedelta((i + 1) * 14400) ]) for u in glicko: p = User.by_user_name(u) i = 0 for ik in InnocentKill.select(): if (ik.killer == p and not ik.licit): i += 1 p.score = glicko[u][0] - glicko[u][ 1] + p.adjustment - 35 * innocent_vector[min(i, 8)] return
def saveuser(self, oldname, name, address, college, water, notes, password, email, adjustment): if (oldname): try: u = User.by_user_name(oldname) except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent player") raise redirect(url("/scoresname")) #u.user_name=name #don't give too much opportunity to break things u.address = address u.college = college u.water = water u.notes = notes if (password): u.password = password u.email_address = email if (adjustment != u.adjustment and not identity.in_group('admin')): flash( "Error: Tried to change a score adjustment while not umpire" ) raise redirect(url('/scoresname')) u.adjustment = adjustment else: u = User(user_name=name, address=address, college=college, water=water, notes=notes, password=password, email_address=email, score=0.0, adjustment=adjustment) p = Pseudonym(name=name, player=u) self.updatescores() flash("Player updated!") raise redirect(url("/scoresname"))
def savepseudonym(self,new,name,playerid,id=0,submit=""): if(new): try: p=Pseudonym(player=User.get(playerid),name=name) except SQLObjectNotFound: flash("Error: Tried to add a pseudonym to a nonexistent user") raise redirect(url("/scoresname")) else: try: p=Pseudonym.get(id) except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent pseudonym") raise redirect(url("/scoresname")) p.name=name flash("Pseudonym updated!") raise redirect(url("/edituser/"+p.player.user_name))
def savepseudonym(self, new, name, playerid, id=0, submit=""): if (new): try: p = Pseudonym(player=User.get(playerid), name=name) except SQLObjectNotFound: flash("Error: Tried to add a pseudonym to a nonexistent user") raise redirect(url("/scoresname")) else: try: p = Pseudonym.get(id) except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent pseudonym") raise redirect(url("/scoresname")) p.name = name flash("Pseudonym updated!") raise redirect(url("/edituser/" + p.player.user_name))
def saveinnocentkill(self, eid, killer, licit): try: k = InnocentKill(event=Event.get(eid), killer=User.by_user_name(killer), licit=licit) self.updatescores() flash("Innocent Kill added!") for l in Kill.select(): if ((l.victim == k.killer) and l.event.datetime < k.event.datetime and l.event.datetime >= (k.event.datetime - datetime.timedelta(0, 14400))): flash( "Warning: %s is listed as being killed in the event %s, which was less than four hours before this event." % (l.victim.user_name, str(l.event))) raise redirect(url("/editevent/" + str(eid))) except SQLObjectNotFound: flash( "Error: Tried to add an innocent kill to a nonexistent event.") raise redirect(url("/news"))
def scoresrank(self): return {'players': User.select(orderBy='score')}
def scorescollege(self): return {'players': User.select(orderBy='college')}
def scoresname(self): return {'players': User.select(orderBy='user_name')}
def edituser(self,player): try: return {'user':User.by_user_name(player),'new':False} except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent user") raise redirect(url("/scoresname"))
def edituser(self, player): try: return {'user': User.by_user_name(player), 'new': False} except SQLObjectNotFound: flash("Error: Tried to edit a nonexistent user") raise redirect(url("/scoresname"))