def test_lotv_categorizing_1v1(self): al, ap = gen_api_data(1, 301, mmq="LOTV_SOLO", league="MASTER", join_time=self.time) version, mode, league = get_version_mode_league(1, self.s16, al, ap) self.assertEqual(Mode.TEAM_1V1, mode) self.assertEqual(League.MASTER, league) self.assertEqual(Version.LOTV, version)
def test_lotv_categorizing_random_2v2(self): al, ap = gen_api_data(1, 301, mmq="LOTV_TWOS", league="MASTER", join_time=self.time) version, mode, league = get_version_mode_league(1, self.s16, al, ap) self.assertEqual(Mode.RANDOM_2V2, mode) self.assertEqual(League.MASTER, league) self.assertEqual(Version.LOTV, version)
def test_categorize_without_ap_season_10_to_wol(self): al, ap = gen_api_data(1, 301, mmq="WOL_SOLO", league="MASTER", join_time=self.time) version, mode, league = get_version_mode_league(1, self.s10, al, None) self.assertEqual(Mode.UNKNOWN, mode) self.assertEqual(League.UNKNOWN, league) self.assertEqual(Version.WOL, version)
def test_lotv_categorizing_archon(self): al, ap = gen_api_data(1, 301, 302, mmq="LOTV_TWOS_COMP", league="MASTER", join_time=self.time) version, mode, league = get_version_mode_league(1, self.s16, al, ap) self.assertEqual(Mode.ARCHON, mode) self.assertEqual(League.MASTER, league) self.assertEqual(Version.LOTV, version)
def test_categorize_without_ap_team_2v2(self): al, ap = gen_api_data(1, 301, 302, mmq="LOTV_TWOS", league="MASTER", join_time=self.time) version, mode, league = get_version_mode_league(1, self.s16, al, None) self.assertEqual(Mode.TEAM_2V2, mode) self.assertEqual(League.UNKNOWN, league) self.assertEqual(Version.UNKNOWN, version)
def test_lotv_categorizing_team_3v3(self): al, ap = gen_api_data(1, 301, 302, 303, mmq="LOTV_THREES", league="MASTER", join_time=self.time) version, mode, league = get_version_mode_league(1, self.s16, al, ap) self.assertEqual(Mode.TEAM_3V3, mode) self.assertEqual(League.MASTER, league) self.assertEqual(Version.LOTV, version)
def test_mmq_version_and_league_from_player_info(self): al, ap = gen_api_data(1, 301, mmq="SOLO", league="BRONZE", join_time=self.time) version, mode, league = get_version_mode_league(1, self.s16, al, ap) self.assertEqual(Mode.TEAM_1V1, mode) self.assertEqual(League.BRONZE, league) self.assertEqual(Version.WOL, version) al, ap = gen_api_data(2, 302, mmq="HOTS_TWOS", league="GOLD", join_time=self.time) version, mode, league = get_version_mode_league(2, self.s16, al, ap) self.assertEqual(Mode.RANDOM_2V2, mode) self.assertEqual(League.GOLD, league) self.assertEqual(Version.HOTS, version) al, ap = gen_api_data(3, 303, mmq="THREES", league="PLATINUM", join_time=self.time) version, mode, league = get_version_mode_league(3, self.s16, al, ap) self.assertEqual(Mode.RANDOM_3V3, mode) self.assertEqual(League.PLATINUM, league) self.assertEqual(Version.WOL, version) al, ap = gen_api_data(4, 304, 314, 324, mmq="HOTS_THREES", league="DIAMOND", join_time=self.time) version, mode, league = get_version_mode_league(4, self.s16, al, ap) self.assertEqual(Mode.TEAM_3V3, mode) self.assertEqual(League.DIAMOND, league) self.assertEqual(Version.HOTS, version) al, ap = gen_api_data(5, 305, mmq="THREES", league="MASTER", join_time=self.time) version, mode, league = get_version_mode_league(5, self.s16, al, ap) self.assertEqual(Mode.RANDOM_3V3, mode) self.assertEqual(League.MASTER, league) self.assertEqual(Version.WOL, version) al, ap = gen_api_data(6, 306, mmq="FOURS", league="GRANDMASTER", join_time=self.time) version, mode, league = get_version_mode_league(6, self.s16, al, ap) self.assertEqual(Mode.RANDOM_4V4, mode) self.assertEqual(League.GRANDMASTER, league) self.assertEqual(Version.WOL, version) al, ap = gen_api_data(7, 307, 317, 327, 337, mmq="HOTS_FOURS", league="GRANDMASTER", race=337, join_time=self.time) version, mode, league = get_version_mode_league(7, self.s16, al, ap) self.assertEqual(Mode.TEAM_4V4, mode) self.assertEqual(League.GRANDMASTER, league) self.assertEqual(Version.HOTS, version)
def run(self, args, logger): seasons = list(Season.objects.filter(pk__gte=args.ss_id, pk__lte=args.es_id)) for region in args.regions: logger.info("processing region %s" % region) for ladder in Ladder.objects.filter(season__in=seasons, region=region, bid__gte=args.bid).order_by('bid'): self.check_stop() context = "ladder %d, region %s, bid %d, %s" %\ (ladder.id, Region.key_by_ids[region], ladder.bid, ladder.info()) try: lcs = ladder.cached_raw.filter(type=Cache.LADDER).order_by('id') if len(lcs) != 1: raise Exception("expected one ladder cache for ladder %d, found %s" % (ladder.id, [c.id for c in lcs])) lc = lcs[0] if lc.bid != ladder.bid or lc.region != ladder.region: raise Exception("bid or region did not match lc on %s" % ladder.id) al = ApiLadder(loads(lc.data), lc.url) pcs = ladder.cached_raw.filter(type=Cache.PLAYER_LADDERS) if len(pcs) > 1: raise Exception("expected one player ladders cache for ladder %d, found %s" % (ladder.id, [c.id for c in pcs])) pc = pcs[0] if pcs else None if pc: if pc.region != ladder.region: raise Exception("region did not match pc on %s, %s" % ladder.id) ap = ApiPlayerLadders(loads(pc.data), pc.url) else: ap = None new = Ladder() join_season, join_valid = get_season_based_on_join_times(al.first_join(), al.last_join()) if ap: match = ap.refers(ladder.bid) if not match: logger.error("%s: failed match" % context) continue context += ", match %s" % match new.season, valid = determine_season(fetch_time=lc.updated, match=match, join_season=join_season, join_valid=join_valid) else: new.season, valid = join_season, join_valid context += ", match None" new.version, new.mode, new.league = get_version_mode_league(ladder.bid, new.season, al, ap) new.strangeness = get_strangeness(lc.updated, al, ap) for what in args.verify.split(','): nv = getattr(new, what) ov = getattr(ladder, what) if nv != ov: if new.strangeness in (Ladder.GOOD, Ladder.NOP): log = logger.error else: log = logger.warning log("%s: failed %s, old %s, new %s" % (context, what, ov, nv)) break else: logger.info("%s: success" % context) except Exception as e: logger.error("%s: %s(\"%s\")" % (context, e.__class__.__name__, e)) return 0