Exemplo n.º 1
0
def add_initial_player(session):
    initial_player = session.query(
        Player.platformid == default_player_id()).first()
    if initial_player is not None:
        return
    session.add(Player(platformid=default_player_id()))
    session.commit()
    def setUp(self):
        self.tag_name_alt = TAGS[1]
        self.all_tags = TAGS
        self.test_user_id = TEST_USER_ID
        engine, Session = startup()
        self.session = Session()
        self.test_game_id = TEST_GAME_ID
        self.test_game_ids = self.create_replay_names()

        test_user = self.session.query(Player).filter(Player.platformid == self.test_user_id).first()
        if test_user is None:
            test_user = Player(platformid=self.test_user_id)
            self.session.add(test_user)

        for i in range(len(self.test_game_ids)):
            tag_name = self.all_tags[i]
            tag = self.session.query(Tag).filter(Tag.owner == self.test_user_id, Tag.name == tag_name).first()
            if tag is None:
                tag = Tag(owner=self.test_user_id, name=tag_name)
                self.session.add(tag)

        for game_id in self.test_game_ids:
            game = self.session.query(Game).filter(Game.hash == game_id).first()
            if game is None:
                game = Game(hash=game_id)
                self.session.add(game)

        self.session.commit()

        # add some spice to the games :>
        for i in range(len(self.test_game_ids)):
            game_id = self.test_game_ids[i]
            for j in range(len(self.test_game_ids) - i):
                TagWrapper.add_tag_to_game(self.session, game_id, self.test_user_id, self.all_tags[j])
Exemplo n.º 3
0
    def test_upload_files(self, mock_user, no_errors_are_logged):
        no_errors_are_logged.cancel_check()

        mock_user.set_fake_user(
            Player(platformid='76561198018756583', platformname='fake'))

        replay_list = get_complex_replay_list()[0:4]

        tags = ['TAG1', 'TAG2', 'TAG3', ['TAG4', 'TAG2']]
        privacy = [
            GameVisibilitySetting.DEFAULT.name,
            GameVisibilitySetting.PUBLIC.name,
            GameVisibilitySetting.PRIVATE.name,
            GameVisibilitySetting.PRIVATE.name
        ]
        users = [
            'invalid', '76561198018756583', '76561198018756583',
            '76561198018756583'
        ]

        for index, replay_url in enumerate(replay_list):
            params = {
                'tags': tags[index],
                'visibility': privacy[index],
                'player_id': users[index]
            }
            logger.debug('Testing:', replay_url)
            f = download_replay_discord(replay_url)
            r = requests.post(LOCAL_URL + '/api/upload',
                              files={'replays': ('fake_file.replay', f)},
                              params=params)
            r.raise_for_status()
            assert (r.status_code == 202)

        for i in range(len(replay_list) + 1):
            logger.debug('waiting ', (len(replay_list) - i) * sleep_time,
                         'seconds')
            time.sleep(sleep_time)

        time.sleep(sleep_time)
        r = requests.get(LOCAL_URL + '/api/global/replay_count')

        result = json.loads(r.content)
        assert (int(result) == len(replay_list))

        response = requests.get(LOCAL_URL + '/api/tag')

        result = json.loads(response.content)
        assert result[0]['owner_id'] == "76561198018756583"
        assert result[0]['name'].startswith('TAG')
        assert len(result) == 3

        response = requests.get(
            LOCAL_URL +
            '/api/player/76561198018756583/match_history?page=0&limit=10')
        assert response.status_code == 200
        assert len(response.json()['replays']) >= 1
Exemplo n.º 4
0
def add_or_update_steam_player(profile, session=None):
    match = session.query(Player).filter(Player.platformid == profile['steamid']).first()
    if match:
        match.platformname = profile['personaname']
        match.avatar = profile['avatarfull']
    else:
        u = Player(platformid=profile['steamid'], platformname=profile['personaname'], avatar=profile['avatarfull'],
                   groups=[])
        session.add(u)
    session.commit()
    def setUp(self):
        self.tag_name = TAGS[0]
        self.test_user_id = TEST_USER_ID
        engine, Session = startup()
        self.session = Session()

        test_user = self.session.query(Player).filter(Player.platformid == self.test_user_id).first()
        if test_user is None:
            test_user = Player(platformid=self.test_user_id)
            self.session.add(test_user)

        self.session.commit()
def create_default_player():
    player = Player()
    player.platformid = "3678"
    player.platformname = 'test user with a really long name but even longer'
    if bool(random.getrandbits(1)):
        player.avatar = "https://media.istockphoto.com/photos/golden-retriever-puppy-looking-up-isolated-on-black-backround-picture-id466614709?k=6&m=466614709&s=612x612&w=0&h=AVW-4RuYXFPXxLBMHiqoAKnvLrMGT9g62SduH2eNHxA="
    else:
        player.avatar = "https://cdn3-www.dogtime.com/assets/uploads/2014/12/file_19035_square_100_rainy-day-activity-dog-playing-with-food-toy.jpg"

    return player
Exemplo n.º 7
0
def steam_process():
    if validate_openid(request.args):
        user_id = request.args['openid.claimed_id'].split('/')[-1]
        profile = get_steam_profile_or_random_response(user_id)['response']['players'][0]
        s = current_app.config['db']()
        match = s.query(Player).filter(Player.platformid == user_id).first()
        if match:
            match.platformname = profile['personaname']
            match.avatar = profile['avatarfull']
        else:
            u = Player(platformid=user_id, platformname=profile['personaname'], avatar=profile['avatarfull'], groups=[])
            s.add(u)
        s.commit()
        s.close()
        session['openid'] = user_id
        return redirect(url_for('home'))
    return jsonify({'error': 'invalid openid credentials'})
Exemplo n.º 8
0
def addrole(id, role, session=None):
    """Adds a role to a person given an ID and a role id.

    :param id: platformid of the person to add the role to
    :param role: the id of the role
    :return: redirect to the previous url
    """
    role_id = session.query(Group).filter(Group.name == role).first().id
    print(role, role_id)
    player = session.query(Player).filter(Player.platformid == id).first()
    if player is None:
        p = Player(platformid=id,
                   platformname='',
                   avatar='',
                   ranks='',
                   groups=[role_id])
        session.add(p)
    else:
        if role_id not in player.groups:
            player.groups = player.groups + [role_id]
    session.commit()
    return redirect(redirect_url())
Exemplo n.º 9
0
def steam_process(session=None):
    if validate_openid(request.args):
        user_id = request.args['openid.claimed_id'].split('/')[-1]
        profile = get_steam_profile_or_random_response(
            user_id)['response']['players'][0]
        add_or_update_steam_player(profile)
        match = session.query(Player).filter(
            Player.platformid == user_id).first()
        if match:
            match.platformname = profile['personaname']
            match.avatar = profile['avatarfull']
        else:
            u = Player(platformid=user_id,
                       platformname=profile['personaname'],
                       avatar=profile['avatarfull'],
                       groups=[])
            session.add(u)
        session.commit()
        flask_session['openid'] = user_id
        flask_session.permanent = True
        return redirect(url_for('home'))
    return jsonify({'error': 'invalid openid credentials'})
    def setUp(self):
        self.tag_name = TAGS[0]
        self.tag_name_alt = TAGS[1]
        self.test_user_id = TEST_USER_ID
        engine, Session = startup()
        self.session = Session()
        self.test_game_id = TEST_GAME_ID

        test_user = self.session.query(Player).filter(Player.platformid == self.test_user_id).first()
        if test_user is None:
            test_user = Player(platformid=self.test_user_id)
            self.session.add(test_user)

        tag = self.session.query(Tag).filter(Tag.owner == self.test_user_id, Tag.name == self.tag_name).first()
        if tag is None:
            tag = Tag(owner=self.test_user_id, name=self.tag_name)
            self.session.add(tag)

        game = self.session.query(Game).filter(Game.hash == self.test_game_id).first()
        if game is None:
            game = Game(hash=self.test_game_id)
            self.session.add(game)

        self.session.commit()
Exemplo n.º 11
0
def convert_pickle_to_db(
        game: game_pb2,
        offline_redis=None) -> (Game, list, list, List[Loadout]):
    """
    Converts pickled games into various database objects.

    :param game: Pickled game to process into Database object
    :return: Game db object, PlayerGame array, Player array
    """
    teamsize = max(len(game.teams[0].player_ids),
                   len(game.teams[1].player_ids))
    player_objs = game.players
    ranks = get_rank_batch([p.id.id for p in player_objs],
                           offline_redis=offline_redis)
    rank_list = []
    mmr_list = []
    for player, rank in ranks.items():
        r = get_rank_obj_by_mapping(rank, playlist=game.game_metadata.playlist)
        rank_list.append(r['tier'])
        mmr_list.append(r['rank_points'])
    replay_id = game.game_metadata.match_guid
    if replay_id == '' or replay_id is None:
        replay_id = game.game_metadata.id
    team0poss = game.teams[0].stats.possession
    team1poss = game.teams[1].stats.possession
    match_date = datetime.datetime.fromtimestamp(game.game_metadata.time)
    match_name = game.game_metadata.name
    g = Game(hash=replay_id,
             players=[str(p.id.id) for p in player_objs],
             ranks=rank_list,
             mmrs=mmr_list,
             map=game.game_metadata.map,
             team0score=game.game_metadata.score.team_0_score,
             team1score=game.game_metadata.score.team_1_score,
             teamsize=teamsize,
             match_date=match_date,
             team0possession=team0poss.possession_time,
             team1possession=team1poss.possession_time,
             name='' if match_name is None else match_name,
             frames=game.game_metadata.frames,
             length=game.game_metadata.length,
             playlist=game.game_metadata.playlist,
             game_server_id=0 if game.game_metadata.game_server_id == '' else
             game.game_metadata.game_server_id,
             server_name=game.game_metadata.server_name,
             replay_id=game.game_metadata.id,
             primary_player=game.game_metadata.primary_player.id)

    player_games = []
    players = []
    teamstats = []
    # print('iterating over players')
    for team in game.teams:
        fields = create_and_filter_proto_field(team,
                                               ['id', 'name', 'is_orange'], [],
                                               TeamStat)
        values = get_proto_values(team, fields)
        kwargs = {k.field_name: v for k, v in zip(fields, values)}
        for k in kwargs:
            if kwargs[k] == 'NaN' or math.isnan(kwargs[k]):
                kwargs[k] = 0.0
        t = TeamStat(game=replay_id, is_orange=team.is_orange, **kwargs)
        teamstats.append(t)

    for p in player_objs:  # type: GamePlayer
        fields = create_and_filter_proto_field(
            p, ['name', 'title_id', 'is_orange'], [
                'api.metadata.CameraSettings', 'api.metadata.PlayerLoadout',
                'api.PlayerId'
            ], PlayerGame)
        values = get_proto_values(p, fields)
        kwargs = {k.field_name: v for k, v in zip(fields, values)}
        for k in kwargs:
            if kwargs[k] == 'NaN' or math.isnan(kwargs[k]):
                kwargs[k] = 0.0
        camera = p.camera_settings
        loadout = p.loadout
        field_of_view = camera.field_of_view
        transition_speed = camera.transition_speed
        pitch = camera.pitch
        swivel_speed = camera.swivel_speed
        stiffness = camera.stiffness
        height = camera.height
        distance = camera.distance
        blue_score = game.game_metadata.score.team_0_score
        orange_score = game.game_metadata.score.team_1_score
        is_orange = p.is_orange

        pid = str(p.id.id)
        rank = None
        mmr = None
        division = None
        if pid in ranks:
            try:
                r = get_rank_obj_by_mapping(
                    ranks[pid], playlist=game.game_metadata.playlist)
                rank = r['tier']
                division = r['division']
                mmr = r['rank_points']
            except:
                rank = 0
                division = 0
                mmr = 0

        if is_orange:
            win = orange_score > blue_score
        else:
            win = blue_score > orange_score
        pg = PlayerGame(player=pid,
                        name=p.name,
                        game=replay_id,
                        field_of_view=field_of_view,
                        transition_speed=transition_speed,
                        pitch=pitch,
                        swivel_speed=swivel_speed,
                        stiffness=stiffness,
                        height=height,
                        distance=distance,
                        car=-1 if loadout is None else loadout.car,
                        is_orange=p.is_orange,
                        rank=rank,
                        division=division,
                        mmr=mmr,
                        win=win,
                        **kwargs)
        player_games.append(pg)
        if len(str(pid)) > 40:
            pid = pid[:40]
        p = Player(platformid=pid,
                   platformname=p.name,
                   avatar="",
                   ranks=[],
                   groups=[])
        players.append(p)

    loadouts = process_loadout_to_obj(game)
    return g, player_games, players, teamstats, loadouts
Exemplo n.º 12
0
 def __init__(self):
     self.user = Player(platformid=default_player_id(), platformname="default")
Exemplo n.º 13
0
 def setUser(self, platformId):
     nonlocal fake_user
     fake_user = Player(platformid=platformId)
Exemplo n.º 14
0
    def test_upload_files(self, mock_user, no_errors_are_logged):
        no_errors_are_logged.cancel_check()

        mock_user.set_user(
            Player(platformid='76561198018756583', platformname='fake'))

        replay_list = get_complex_replay_list()[0:4]

        tags = [['TAG1'], ['TAG2'], ['TAG3'], ['TAG4', 'TAG2']]
        privacy = [
            GameVisibilitySetting.DEFAULT.name,
            GameVisibilitySetting.PUBLIC.name,
            GameVisibilitySetting.PRIVATE.name,
            GameVisibilitySetting.PRIVATE.name
        ]
        users = [
            '76561198018756583', 'invalid', '76561198018756583',
            '76561198018756583'
        ]

        tag_keys = ['invalid_key']

        def create_all_tags():
            created_tags = []
            for _tags in tags:
                keys = []
                for _tag in _tags:
                    if _tag not in created_tags:
                        r = requests.put(LOCAL_URL + f'/api/tag/{_tag}')
                        r.raise_for_status()
                        created_tags.append(_tag)

                        # create private id
                        r = requests.put(LOCAL_URL +
                                         f'/api/tag/{_tag}/private_key/{_tag}')
                        r.raise_for_status()
                    json = requests.get(LOCAL_URL +
                                        f'/api/tag/{_tag}/private_key').json()
                    keys.append(json)
                tag_keys.append(keys)

        for index, replay_url in enumerate(replay_list):
            if index == 1:
                logger.error("CREATING INITIAL TAG DATA")
                time.sleep(20)
                create_all_tags()
                time.sleep(1)

            params = {
                'visibility': privacy[index],
                'player_id': users[index],
                'private_tag_keys': tag_keys[index]
            }
            logger.debug('TESTING URL:' + str(replay_url))
            logger.debug('TESTING PARAMS:' + str(params))
            f = download_replay_discord(replay_url)
            r = requests.post(LOCAL_URL + '/api/upload',
                              files={'replays': ('fake_file.replay', f)},
                              params=params)
            r.raise_for_status()
            assert (r.status_code == 202)

        for i in range(len(replay_list) + 1):
            logger.debug('waiting ', (len(replay_list) - i) * sleep_time,
                         'seconds')
            time.sleep(sleep_time)

        time.sleep(sleep_time)
        r = requests.get(LOCAL_URL + '/api/global/replay_count')

        result = json.loads(r.content)
        assert (int(result) == len(replay_list))

        response = requests.get(LOCAL_URL + '/api/tag')
        result = json.loads(response.content)
        assert result[0]['ownerId'] == "76561198018756583"
        assert result[0]['name'].startswith('TAG')
        assert len(result) == 4

        response = requests.get(
            LOCAL_URL +
            '/api/player/76561198018756583/match_history?page=0&limit=10')
        assert response.status_code == 200
        assert len(response.json()['replays']) >= 1
Exemplo n.º 15
0
 def set_user_id(self, user_id: str):
     self.user = Player(platformid=user_id)
Exemplo n.º 16
0
 def __init__(self):
     self.logged_out = False
     self.user = Player(platformid=default_player_id(),
                        platformname="default")