def get(self, team_name): team = Team.getTeam(team_name) if not team: template = jinja_environment.get_template("templates/error.html") self.response.out.write(template.render({'errmsg':'Invalid team: ' + team_name})) return results = overall_results(team) user_email = users.get_current_user().email() authorised = True if team == Team.MEN: authorised = user_email in mens_results_viewers if team == Team.WOMEN: authorised = user_email in womens_results_viewers params = {'team':team, 'results':results, 'authorised':authorised} template = jinja_environment.get_template("templates/results.html") self.response.out.write(template.render(params))
def post(self): opponent = self.request.get("opponent") date_string = self.request.get("date") venue = self.request.get("venue") player_id_strings = self.request.get_all("players") team = Team.getTeam(self.request.get("team")) weight = float(self.request.get("weight")) date_tokens = date_string.split("/") if len(date_tokens) == 1: date_tokens = date_string.split("-") if int(date_tokens[0]) < 100: date_tokens.reverse() date = datetime.date(int(date_tokens[0]), int(date_tokens[1]), int(date_tokens[2])) game = Game(opponent=opponent, date=date, venue=venue, team=team, weight=weight) player_keys = [ndb.Key('Player', int(pid)) for pid in player_id_strings] game.players = player_keys game.put() template = jinja_environment.get_template("templates/game_added.html") self.response.out.write(template.render({}))
def post(self): game_id = self.request.get("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 if self.request.get("delete"): self.delete_game(game) template = jinja_environment.get_template("templates/game_deleted.html") self.response.out.write(template.render()) return opponent = self.request.get("opponent") date_string = self.request.get("date") venue = self.request.get("venue") player_id_strings = self.request.get_all("players") team = Team.getTeam(self.request.get("team")) weight = float(self.request.get("weight")) date_tokens = date_string.split("/") if len(date_tokens) == 1: date_tokens = date_string.split("-") if int(date_tokens[0]) < 100: date_tokens.reverse() date = datetime.date(int(date_tokens[0]), int(date_tokens[1]), int(date_tokens[2])) game.opponent = opponent game.date = date game.venue = venue game.team = team game.weight = weight player_keys = [ndb.Key('Player', int(pid)) for pid in player_id_strings] game.players = player_keys game.put() template = jinja_environment.get_template("templates/game_saved.html") self.response.out.write(template.render({}))
def get(self, game_id=None): if not game_id: template = jinja_environment.get_template("templates/game_list.html") games = Game.query().order(Game.date).fetch(100) self.response.out.write(template.render({'games':games})) return 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 teams = Team.getAll(); players = Player.query().order(Player.name).fetch(100) playing = [p for p in players if p.key in game.players] not_playing = [p for p in players if p.key not in game.players] template = jinja_environment.get_template("templates/add_edit_game.html") args = {'playing':playing,'not_playing':not_playing,'game':game, 'teams':teams} self.response.out.write(template.render(args))
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)
def get(self): teams = Team.getAll() template = jinja_environment.get_template("templates/results_menu.html") self.response.out.write(template.render({'teams': teams}))
def get(self): template = jinja_environment.get_template("templates/add_edit_game.html") players = Player.query().order(Player.name).fetch(1000) teams = Team.getAll() args = {'players':players, 'teams':teams} self.response.out.write(template.render(args))