示例#1
0
文件: models.py 项目: 0101/sctms
    def make_pairs_single_elimination(self, round, ranking):
        previous_round = round.previous_round

        if previous_round and previous_round.type == Round.TYPE_SINGLE_ELIM:
            previous_winners = [m.winner for m in previous_round.matches]
            # this is expected to return items from ranking...
            players = [{'player': p} for p in previous_winners]
            if odd(players):
                # something's wrong, abort
                return []
            return split(players, 2)
        else:
            playoff_rounds_count = (round.tournament.rounds
                                    .filter(type=Round.TYPE_SINGLE_ELIM)
                                    .count())
            player_count = 2 ** playoff_rounds_count
            players = ranking[:player_count]
            half = player_count / 2
            pairs = zip(players[:half], reversed(players[half:]))

            for i in range(1, playoff_rounds_count - 1):
                half = len(pairs) / 2 / i
                pairs = merge(merge(map(
                    lambda x, y: [x, y],
                    split(pairs, i)[:half],
                    reversed(split(pairs, i)[half:])
                )))
            return pairs
示例#2
0
 def trigger(self, obj, action):
     keys = [(obj.__class__, action),
             (obj.__class__, ANY),
             (ANY, ANY),]
     for fn in merge([self._registry.get(key, []) for key in keys]):
         fn(obj.__class__, obj, action)