def record_match_validations(req, args):
    bad = None
    dt = None
    player_2 = None
    valid_games = None

    try:
        bad = basic_validation(args, record_match_args)
        if bad: raise Exception()

        dt = datetime_valid(args['date'], args['month'], args['year'])
        bad = "invalid date"
        if not dt: raise Exception()

        bad = must_be_int(args, record_match_games_full)
        if bad: raise Exception()

        bad = paired_games(args, record_match_pairs)
        if bad: raise Exception()

        bad = "invalid player"
        player_2 = req.db.User.find_one(args['other_player_id'])
        if player_2 is None: raise Exception()

        valid_games = []
        for i, game in enumerate(record_match_all_games):
            if i % 2 == 0:
                score1 = args.get(record_match_all_games[i])
                score2 = args.get(record_match_all_games[i+1])
                if (score1 is not None) and (score2 is not None):
                    valid_games.append((score1, score2))


        games_1_won = sum([1 if (game[0] > game[1]) else 0 for game in valid_games])
        games_2_won = sum([1 if (game[1] > game[0]) else 0 for game in valid_games])
        win_count = games_1_won if (games_1_won > games_2_won) else games_2_won

        bad = 'no outright winner'
        if games_1_won == games_2_won: raise Exception()
        
        bad = 'even number of won games'
        if win_count % 2 == 0: raise Exception()

        bad = None

    except Exception as e:
        #raise e
        pass

    return bad, dt, player_2, valid_games
Example #2
0
    def get(self):
        args = sanitised_params(self.request.arguments)
        bad = basic_validation(args, respond_challenge_args)

        if bad:
            self.write(bad_response(bad))
            return
        else:
            state = args['state']
            challenge_id = ObjectId(args['challenge_id'])
            challenge = self.db.Challenge.find_one(challenge_id)

            if not challenge:
                self.write(bad_response('invalid challenge'))
                return

            if state == 'accept':
                comment = args.get('comment')
                sender_id = ObjectId(args.get('sender_id'))
                valid = (challenge['recipient_id'] == self.current_user['_id']) and (challenge['sender_id'] == sender_id)
                if not valid:
                    self.write(bad_response('invalid challenge'))
                    return

                challenge['state'] = ChallengeState.Accepted
                if comment is not None: challenge['comments'].append(comment)

                self.db.Challenge.update(challenge['_id'], challenge)
                self.write(good_response())

            elif state == 'decline':
                valid = challenge['recipient_id'] == self.current_user['_id']

                if not valid:
                    self.write(bad_response('invalid challenge'))
                    return

                self.db.Challenge.delete(challenge_id)
                self.write(good_response())

            elif state == 'close':
                valid = challenge['sender_id'] == self.current_user['_id']

                if not valid:
                    self.write(bad_response('invalid challenge'))
                    return

                self.db.Challenge.delete(challenge_id)
                self.write(good_response())
Example #3
0
    def get(self):
        args = sanitised_params(self.request.arguments)
        bad = basic_validation(args, make_comment_args)
        
        if bad:
            self.write(bad_response(bad))
        else:
            comment = self.db.Comment.get_default()
            comment['sender_id'] = self.current_user['_id']
            comment['body'] = args['comment']
            self.db.Comment.insert(comment)

            comment = tidy_comment(comment, { self.current_user['_id']: tidy_user(self.current_user) })
            
            self.write(good_response(comment))
Example #4
0
    def get(self):
        args = sanitised_params(self.request.arguments)
        bad = basic_validation(args, send_challenge_args)

        if bad:
            self.write(bad_response(bad))
            return
        else:
            recipient_id = ObjectId(args['user_id'])
            recipient = self.db.User.find_one(recipient_id)
            if not recipient:
                self.write(bad_response('invalid recipient'))
                return

            comment = args.get('comment')
                
            c = self.db.Challenge.get_default()
            c['sender_id'] = self.current_user['_id']
            c['recipient_id'] = recipient_id
            if comment is not None: c['comments'].append(comment)

            c = self.db.Challenge.insert(c)            
            self.write(good_response())