def test_get_tournament_name(self): self.assertEqual(SmashGGScraper.get_tournament_name(TEST_EVENT_NAME_1), 'HTC Throwdown') self.assertEqual(SmashGGScraper.get_tournament_name(TEST_EVENT_NAME_2), 'Tiger Smash 4') self.assertEqual(SmashGGScraper.get_tournament_name(TEST_EVENT_NAME_3), 'Nebulous Prime Melee #47')
def test_get_phase_name(self): self.assertEqual( SmashGGScraper.get_phase_bracket_name(TEST_PHASE_ID_1), 'Round 2 Bracket') self.assertEqual( SmashGGScraper.get_phase_bracket_name(TEST_PHASE_ID_2), 'Final Bracket')
def test_get_event_name(self): self.assertEqual( SmashGGScraper.get_event_name(TEST_EVENT_NAME_1, TEST_PHASE_NAME_1), 'Melee Singles') self.assertEqual( SmashGGScraper.get_event_name(TEST_EVENT_NAME_2, TEST_PHASE_NAME_1), 'Melee Singles')
def test_get_tournament_name_from_url(self): self.assertEqual( SmashGGScraper.get_tournament_name_from_url(TEST_URL_1), 'htc throwdown') self.assertEqual( SmashGGScraper.get_tournament_name_from_url(TEST_URL_2), 'tiger smash 4')
def setUpClass(cls): print 'Pulling tournaments from smash.gg ...' super(TestSmashGGScraper, cls).setUpClass() cls.tournament1 = SmashGGScraper(TEST_URL_1, [1511, 2095, 2096]) cls.tournament2 = SmashGGScraper(TEST_URL_2, [3930, 21317]) #cls.tournament3 = SmashGGScraper(TEST_URL_3, []) cls.tournament4 = SmashGGScraper(TEST_URL_4, [49153, 49705])
def get(self): args = smashGGMap_get_parser.parse_args() url = args['bracket_url'] event_name = SmashGGScraper.get_tournament_event_name_from_url(url) phase_name = SmashGGScraper.get_tournament_phase_name_from_url(url) id_map = SmashGGScraper.get_phasename_id_map(event_name, phase_name) return id_map
def test_get_phasename_id_map(self): self.assertEqual( len( SmashGGScraper.get_phasename_id_map(TEST_EVENT_NAME_1, TEST_PHASE_NAME_1)), 3) self.assertEqual( len( SmashGGScraper.get_phasename_id_map(TEST_EVENT_NAME_2, TEST_PHASE_NAME_1)), 3)
def get(self): parser = reqparse.RequestParser() \ .add_argument('bracket_url', type=str) args = parser.parse_args() url = args['bracket_url'] event_name = SmashGGScraper.get_tournament_event_name_from_url(url) phase_name = SmashGGScraper.get_tournament_phase_name_from_url(url) id_map = SmashGGScraper.get_phasename_id_map(event_name, phase_name) return id_map
def get(self): parser = reqparse.RequestParser() \ .add_argument('bracket_url', type=str) args = parser.parse_args() url = args['bracket_url'] event_name = SmashGGScraper.get_tournament_event_name_from_url(url) phase_name = SmashGGScraper.get_tournament_phase_name_from_url(url) id_map = SmashGGScraper.get_phasename_id_map(event_name, phase_name) return id_map
def test_get_event_name(self): self.assertEqual(SmashGGScraper.get_event_name(TEST_EVENT_NAME_1, TEST_PHASE_NAME_1), 'Melee Singles') self.assertEqual(SmashGGScraper.get_event_name(TEST_EVENT_NAME_2, TEST_PHASE_NAME_1), 'Melee Singles')
def test_get_tournament_name_from_url(self): self.assertEqual(SmashGGScraper.get_tournament_name_from_url(TEST_URL_1), 'htc throwdown') self.assertEqual(SmashGGScraper.get_tournament_name_from_url(TEST_URL_2), 'tiger smash 4')
def test_get_tournament_phase_id_from_url(self): self.assertEqual(SmashGGScraper.get_tournament_phase_id_from_url(TEST_URL_1), 6529) self.assertEqual(SmashGGScraper.get_tournament_phase_id_from_url(TEST_URL_2), 70949)
def test_get_tournament_id_from_url2(self): self.assertEqual(SmashGGScraper.get_tournament_id_from_url(TEST_URL_2), 70949)
def test_get_tournament_id_from_url1(self): self.assertEqual(SmashGGScraper.get_tournament_id_from_url(TEST_URL_1), 6529)
def setUp(self): self.tournament1 = SmashGGScraper(TEST_URL_1) self.tournament2 = SmashGGScraper(TEST_URL_2)
def test_get_phase_name(self): self.assertEqual(SmashGGScraper.get_phase_bracket_name(TEST_PHASE_ID_1), 'Round 2 Bracket') self.assertEqual(SmashGGScraper.get_phase_bracket_name(TEST_PHASE_ID_2), 'Final Bracket')
def test_get_tournament_phase_id_from_url(self): self.assertEqual( SmashGGScraper.get_tournament_phase_id_from_url(TEST_URL_1), 6529) self.assertEqual( SmashGGScraper.get_tournament_phase_id_from_url(TEST_URL_2), 70949)
def test_get_phasename_id_map(self): self.assertEqual(len(SmashGGScraper.get_phasename_id_map(TEST_EVENT_NAME_1, TEST_PHASE_NAME_1)), 3) self.assertEqual(len(SmashGGScraper.get_phasename_id_map(TEST_EVENT_NAME_2, TEST_PHASE_NAME_1)), 3)
def test_get_tournament_name(self): self.assertEqual(SmashGGScraper.get_tournament_name(TEST_EVENT_NAME_1), 'HTC Throwdown') self.assertEqual(SmashGGScraper.get_tournament_name(TEST_EVENT_NAME_2), 'Tiger Smash 4') self.assertEqual(SmashGGScraper.get_tournament_name(TEST_EVENT_NAME_3), 'Nebulous Prime Melee #47')
def post(self, region): dao = get_dao(region) auth_user(request, dao) parser = reqparse.RequestParser() \ .add_argument('type', type=str, location='json') \ .add_argument('data', type=unicode, location='json') \ .add_argument('bracket', type=str, location='json') \ .add_argument('included_phases', type=list, location='json') args = parser.parse_args() if args['data'] is None: err("Tournament data required.") the_bytes = bytearray(args['data'], "utf8") if the_bytes[0] == 0xef: print "found magic numbers" err("Magic numbers!") type = args['type'] data = args['data'] included_phases = args['included_phases'] pending_tournament = None try: if type == 'tio': if args['bracket'] is None: err("Missing bracket name") data_bytes = bytes(data) if data_bytes[0] == '\xef': data = data[:3] scraper = TioScraper(data, args['bracket']) elif type == 'challonge': scraper = ChallongeScraper(data) elif type == 'smashgg': scraper = SmashGGScraper(data, included_phases) else: err("Unknown tournament type") pending_tournament, raw_file = M.PendingTournament.from_scraper( type, scraper, region) except Exception as ex: err('Scraper encountered an error: ' + str(ex)) if not pending_tournament or not raw_file: err('Scraper encountered an error.') try: pending_tournament.alias_to_id_map = alias_service.get_alias_to_id_map_in_list_format( dao, pending_tournament.players) except Exception as e: log_exception() err('Alias service encountered an error') # If the tournament is too large, don't insert the raw file into the db. if len(pending_tournament.players) < 1000: try: raw_file = dao.insert_raw_file(raw_file) except Exception as ex: print ex err('Dao insert_raw_file encountered an error') else: print 'Skipping inserting raw file for tournament because it is too large' try: new_id = dao.insert_pending_tournament(pending_tournament) return_dict = { 'id': str(new_id) } return return_dict except Exception as ex: err('Dao insert_pending_tournament encountered an error') err('Unknown error!')
class TestSmashGGScraper(unittest.TestCase): def setUp(self): self.tournament1 = SmashGGScraper(TEST_URL_1) self.tournament2 = SmashGGScraper(TEST_URL_2) # self.tournament3 = SmashGGScraper(TEST_TOURNAMENT_ID_3) @unittest.skip('skipping test_get_raw1 until api is complete') def test_get_raw1(self): with open(TEST_DATA1) as data1: self.tournament1_json_dict = json.load(data1) self.assertEqual(self.tournament1.get_raw()['smashgg'], self.tournament1_json_dict) @unittest.skip('skipping test_get_raw2 until api is complete') def test_get_raw2(self): with open(TEST_DATA2) as data2: self.tournament2_json_dict = json.load(data2) self.assertEqual(self.tournament2.get_raw()['smashgg'], self.tournament2_json_dict) # @unittest.skip('test is failing, May be API agile iterations manipulating data. Need to revisit') def test_get_raw_sub1(self): tournament = self.tournament1 self.assertIsNotNone(tournament.get_raw()['smashgg']['entities']['sets']) seeds = self.assertIsNotNone(tournament.get_raw()['smashgg']['entities']['seeds']) seeds = tournament.get_raw()['smashgg']['entities']['seeds'] sets = tournament.get_raw()['smashgg']['entities']['sets'] for seed in seeds: self.assertIsNotNone(seed['entrantId']) self.assertIsNotNone(seed['mutations']['players']) this_player = seed['mutations']['players'] for player_id in this_player: id = player_id self.assertIsNotNone(this_player[id]['gamerTag'].strip()) #for set in sets: # self.assertIsNotNone(set['winnerId']) # loserId is allowed to be None because of a Bye # @unittest.skip('test is failing, May be API agile iterations manipulating data. Need to revisit') def test_get_raw_sub2(self): tournament = self.tournament2 self.assertIsNotNone(tournament.get_raw()['smashgg']['entities']['sets']) seeds = self.assertIsNotNone(tournament.get_raw()['smashgg']['entities']['seeds']) seeds = tournament.get_raw()['smashgg']['entities']['seeds'] sets = tournament.get_raw()['smashgg']['entities']['sets'] for seed in seeds: self.assertIsNotNone(seed['entrantId']) self.assertIsNotNone(seed['mutations']['players']) this_player = seed['mutations']['players'] for player_id in this_player: id = player_id self.assertIsNotNone(this_player[id]['gamerTag'].strip()) #for set in sets: # self.assertIsNotNone(set['winnerId']) # loserId is allowed to be None because of a Bye def test_get_tournament_id_from_url1(self): self.assertEqual(SmashGGScraper.get_tournament_id_from_url(TEST_URL_1), 6529) def test_get_tournament_id_from_url2(self): self.assertEqual(SmashGGScraper.get_tournament_id_from_url(TEST_URL_2), 70949) def test_get_tournament_name_from_url1(self): self.assertEqual(SmashGGScraper.get_tournament_name_from_url(TEST_URL_1), 'htc throwdown') def test_get_tournament_name_from_url2(self): self.assertEqual(SmashGGScraper.get_tournament_name_from_url(TEST_URL_2), 'tiger smash 4') def test_get_player_by_entrant_id1(self): player = self.tournament1.get_player_by_entrant_id(TEST_PLAYER_ENTRANTID_1) self.assertEqual(player.name, 'Joseph Marquez') self.assertEqual(player.smash_tag, 'Mang0') self.assertEqual(player.region, 'SoCal') def test_get_player_by_entrant_id2(self): player = self.tournament2.get_player_by_entrant_id(TEST_PLAYER_ENTRANTID_2) self.assertEqual(player.name, 'Sami Muhanna') self.assertEqual(player.smash_tag, 'Druggedfox') self.assertEqual(player.region, 'GA') def test_get_player_by_smashgg_id1(self): player = self.tournament1.get_player_by_smashgg_id(TEST_PLAYER_SMASHGGID_1) self.assertEqual(player.name, 'Joseph Marquez') self.assertEqual(player.smash_tag, 'Mang0') self.assertEqual(player.region, 'SoCal') def test_get_player_by_smashgg_id2(self): player = self.tournament2.get_player_by_smashgg_id(TEST_PLAYER_SMASHGGID_2) self.assertEqual(player.name, 'Sami Muhanna') self.assertEqual(player.smash_tag, 'Druggedfox') self.assertEqual(player.region, 'GA') def test_get_players1(self): self.assertEqual(len(self.tournament1.get_players()), 48) def test_get_players2(self): self.assertEquals(len(self.tournament2.get_players()), 27) def test_get_matches1(self): self.assertEqual(len(self.tournament1.get_matches()), 58) # spot check that mang0 got double elim'd mango_count = 0 for m in self.tournament1.get_matches(): if m.loser == 'Mang0': mango_count += 1 self.assertEqual(2, mango_count, msg="mango didnt get double elim'd?") def test_get_matches2(self): self.assertEquals(len(self.tournament2.get_matches()), 46) # spot check that Druggedfox was only in 5 matches, and that he won all of them sami_count = 0 for m in self.tournament2.get_matches(): if m.winner == 'Druggedfox': sami_count += 1 self.assertFalse(m.loser == 'Druggedfox') self.assertEqual(5, sami_count) def test_get_smashgg_matches1(self): self.assertEqual(len(self.tournament1.get_smashgg_matches()), 58) def test_get_smashgg_matches2(self): self.assertEqual(len(self.tournament2.get_smashgg_matches()), 46) def test_get_date(self): date = self.tournament1.get_date() self.assertEqual(date.year, 2015) self.assertEqual(date.month, 9) self.assertEqual(date.day, 19) date = self.tournament2.get_date() self.assertEqual(date.year, 2016) self.assertEqual(date.month, 3) self.assertEqual(date.day, 27) def test_get_name(self): self.assertEqual(self.tournament1.get_name(), 'htc throwdown') self.assertEqual(self.tournament2.get_name(), 'tiger smash 4') def test_duplicate_tags1(self): tags = self.tournament1.get_players() temp = [] for tag in tags: self.assertEqual(tag in temp, False) temp.append(tag) def test_duplicate_tags2(self): tags = self.tournament2.get_players() temp = [] for tag in tags: self.assertEqual(tag in temp, False) temp.append(tag)