Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
    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