示例#1
0
文件: admin.py 项目: podgib/brownlow
  def get(self, game_id):
    game = Game.get_by_id(int(game_id))
    if not game:
      self.response.out.write("Error: invalid game ID")
      logging.error("Invalid game ID: " + str(game_id))
      return

    voters = Token.query(ndb.AND(Token.game == game.key, Token.used == True)).fetch(100)
    non_voters = Token.query(ndb.AND(Token.game == game.key, Token.used == False)).fetch(100)

    template = jinja_environment.get_template('templates/voters.html')
    params = {'voters':voters,'non_voters':non_voters,'game':game}
    self.response.out.write(template.render(params))
示例#2
0
文件: vote.py 项目: podgib/brownlow
  def get(self, token_string):
    token = Token.query(Token.value == token_string).get()
    if not token:
      template = jinja_environment.get_template("templates/error.html")
      self.response.out.write(template.render({'errmsg': "invalid voting token"}))
      return
    if token.used:
      template = jinja_environment.get_template("templates/error.html")
      self.response.out.write(template.render({'errmsg': "You've already voted!"}))
      return

    voter = token.voter.get();

    game = token.game.get()
    players = ndb.get_multi(game.players)
    players.sort(key=lambda p: p.name)

    errmsg = None
    if self.request.get("err") == str(ERROR_DUPLICATE_VOTE):
      errmsg = "You can't vote for the same person twice"
    elif self.request.get("err") == str(ERROR_VOTE_FOR_SELF):
      errmsg = "You can't vote for yourself!"

    args = {'game':game, 'players':players, 'token':token.value, 'errmsg':errmsg, 'voter':voter}
    template = jinja_environment.get_template("templates/vote.html")
    self.response.out.write(template.render(args))
示例#3
0
文件: worker.py 项目: podgib/brownlow
    def post(self):
        token_string = self.request.get("token")
        num_votes = self.request.get("votes")

        token = Token.query(Token.value == token_string).get()
        if not token:
            return

        game = token.game.get()
        voter = token.voter.get()
        num_votes = self.request.get("votes")
        if num_votes == "1":
            votes_text = "1 vote"
        else:
            votes_text = num_votes + " votes"

        template = jinja_environment.get_template("templates/self_vote_email.txt")
        if game.team == Team.WOMEN:
            pronoun = "herself"
        else:
            pronoun = "himself"

        subject = "OUARFC: " + voter.name + " tried to give " + pronoun + " " + votes_text

        message = mail.EmailMessage(sender="OUARFC <*****@*****.**>", subject=subject)
        message.to = "*****@*****.**"
        message.body = template.render(
            {"name": voter.name, "opponent": game.opponent, "date": game.date, "pronoun": pronoun, "votes": votes_text}
        )
        message.send()
        logging.info(message.body)

        vote = SelfVote(game=game.key, voter=voter.key)
        vote.put()
示例#4
0
文件: admin.py 项目: podgib/brownlow
 def delete_game(self, game):
   tokens = Token.query(Token.game == game.key)
   keys = [token.key for token in tokens]
   votes = Vote.query(Vote.game == game.key)
   keys.extend([vote.key for vote in votes])
   votes = SelfVote.query(SelfVote.game == game.key)
   keys.extend([vote.key for vote in votes])
   ndb.delete_multi_async(keys)
   game.key.delete()
示例#5
0
文件: vote.py 项目: podgib/brownlow
  def post(self):
    token_string = self.request.get("token")
    token = Token.query(Token.value == token_string).get()
    if not token:
      template = jinja_environment.get_template("templates/error.html")
      self.response.out.write(template.render({'errmsg': "invalid voting token"}))
      return
    if token.used:
      template = jinja_environment.get_template("templates/error.html")
      self.response.out.write(template.render({'errmsg': "You've already voted!"}))
      return

    game = token.game
    voter = token.voter

    three = self.request.get("three")
    two = self.request.get("two")
    one = self.request.get("one")

    if one in [two, three] or two == three:
      return self.redirect("/vote/" + token.value + "?err=" + str(ERROR_DUPLICATE_VOTE))

    if str(voter.id()) in [one, two, three]:
      return self.redirect("/vote/" + token.value + "?err=" + str(ERROR_VOTE_FOR_SELF))

    three_player = Player.get_by_id(int(three))
    two_player = Player.get_by_id(int(two))
    one_player = Player.get_by_id(int(one))

    vote = Vote(game=game, three=three_player.key, two=two_player.key, one=one_player.key)
    token.used = True

    vote.put()
    token.put()

    template = jinja_environment.get_template('templates/success.html')
    self.response.out.write(template.render({}))
示例#6
0
文件: worker.py 项目: podgib/brownlow
    def post(self):
        player_id = self.request.get("player")
        game_id = self.request.get("game")

        player = Player.get_by_id(int(player_id))
        game = Game.get_by_id(int(game_id))

        token = Token.query(ndb.AND(Token.game == game.key, Token.voter == player.key)).get()

        if not token:
            logging.info("No token found for %s. Creating new token.", player.name)
            token_string = base64.urlsafe_b64encode(os.urandom(16))
            token = Token(value=token_string, voter=player.key, game=game.key, used=False)
            token.put()
        else:
            logging.info("Token found for %s.", player.name)
            if token.used:
                logging.info("%s has already voted, not sending email.", player.name)
                return

        url = "http://vote.ouarfc.co.uk/vote/" + token.value

        if player.phone:
            logging.info("Sending SMS to %s", player.name)
            template = jinja_environment.get_template("templates/sms.txt")
            sms_data = {
                "ORIGINATOR": "OUARFC",
                "NUMBERS": player.phone,
                "BODY": template.render({"url": url, "opponent": game.opponent, "team": Team.getString(game.team)}),
            }

            response = urlfetch.fetch(
                "https://api.zensend.io/v3/sendsms",
                payload=urllib.urlencode(sms_data),
                method=urlfetch.POST,
                headers={"X-API-KEY": config.zensend_key},
            )
            content_type = response.headers["content-type"]
            if content_type is not None and "application/json" in content_type:
                result = json.loads(response.content)
                if "success" in result:
                    logging.info("Successfully sent SMS to " + player.phone)
                    if config.phone_only:
                        # SMS was a success, don't send email
                        return
                elif "failure" in result:
                    failure = result["failure"]
                    logging.error(
                        "SMS send failed. Player: %s, phone: %s, parameter: %s, error code: %s, status code: %s",
                        player.name,
                        player.phone,
                        failure["parameter"],
                        failure["failcode"],
                        response.status_code,
                    )
                else:
                    logging.error("SMS send failed. Status code: %s", response.status_code)
            else:
                logging.error("SMS send failed. Status code: %s", response.status_code)

        template = jinja_environment.get_template("templates/email.txt")
        subject = "OUARFC: Please Vote For Best & Fairest"
        message = mail.EmailMessage(sender="OUARFC <*****@*****.**>", subject=subject)
        message.to = player.email
        message.body = template.render(
            {
                "name": player.name,
                "opponent": game.opponent,
                "date": game.date,
                "team": Team.getString(game.team),
                "url": url,
            }
        )
        logging.info("Sending email to " + player.email)
        message.send()
        logging.info(message.body)