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])
def test_add_tag_to_replay_success(self): TagWrapper.add_tag_to_game(self.session, self.test_game_id, self.test_user_id, self.tag_name) tag = self.session.query(Tag).filter(Tag.owner == self.test_user_id, Tag.name == self.tag_name).first() game = self.session.query(Game).filter(Game.hash == self.test_game_id).first() self.assertIsNotNone(tag) self.assertIsNotNone(game) self.assertIn(tag, game.tags)
def apply_tags_to_game(query_params: Dict[str, any] = None, game_id=None, session=None): if query_params is None: return None if 'tags' not in query_params and 'private_tag_keys' not in query_params: return None tags = query_params['tags'] if 'tags' in query_params else [] private_ids = query_params[ 'private_tag_keys'] if 'private_tag_keys' in query_params else [] if len(tags) > 0: player_id = query_params['player_id'] if session.query(Player).filter( Player.platformid == player_id).first() is None: log_error(PlayerNotFound()) else: for tag in tags: created_tag = Tag.create(tag, session=session, player_id=player_id) TagWrapper.add_tag_to_game(session, game_id, created_tag.db_tag) for private_id in private_ids: tag_id, private_key = Tag.decode_tag(private_id) tag = TagWrapper.get_tag_by_id(session, tag_id) if tag.private_id is not None and tag.private_id == private_key: TagWrapper.add_tag_to_game(session, game_id, tag)
def test_remove_tag_from_replay_success(self): # a bit dirty to do it like this... TagWrapper.add_tag_to_game(self.session, self.test_game_id, self.test_user_id, self.tag_name) TagWrapper.remove_tag_from_game(self.session, self.test_game_id, self.test_user_id, self.tag_name) tag = self.session.query(Tag).filter(Tag.owner == self.test_user_id, Tag.name == self.tag_name).first() game = self.session.query(Game).filter(Game.hash == self.test_game_id).first() self.assertIsNotNone(tag) self.assertIsNotNone(game) self.assertNotIn(tag, game.tags)
def initialize_database_tags(initialize_database_small_replays): from backend.blueprints.spa_api.service_layers.replay.json_tag import JsonTag from backend.database.wrapper.tag_wrapper import TagWrapper session = initialize_database_small_replays.get_session() replay_ids = initialize_database_small_replays.get_ids() tags = [ ("tag1", 0, 5, "private_id1"), # grabs the first 5 replays in the list ("tag2", 2, 2, None), # starts at the 2nd replay and then gets the next 2 ("tag3", -5, 4, "private_id2"), # grabs the last 4 replays in the list ("tag4", -6, 4, None), # starts 6 back from the end and grabs 4 replays ] tagged_games = {} for tag in tags: tagged_games[tag[0]] = [] created_tag = JsonTag.create(tag[0], session=session, player_id=default_player_id(), private_id=tag[3]) game_ids = replay_ids[tag[1]:tag[1] + tag[2]] for game_id in game_ids: tagged_games[tag[0]].append(game_id) TagWrapper.add_tag_to_game(session, game_id, created_tag.db_tag) class wrapper: def get_session(self): return session def get_protos(self): return initialize_database_small_replays.get_protos() def get_ids(self): return replay_ids def get_tags(self): return tags def get_tagged_games(self): return tagged_games return wrapper()
def add_tag_to_game(name: str, replay_id: str, session=None) -> None: try: TagWrapper.add_tag_to_game(session, replay_id, g.user.platformid, name) except DBTagNotFound: raise TagNotFound()
def test_add_tag_to_replay_tag_not_found(self): with self.assertRaises(DBTagNotFound): TagWrapper.add_tag_to_game(self.session, self.test_game_id, self.test_user_id, TAGS[1])