models.py 文件源码

python
阅读 15 收藏 0 点赞 0 评论 0

项目:tichu-tournament 作者: aragos 项目源码 文件源码
def PutPlayers(self, player_list, no_pairs):
    ''' Create a new PlayerPair Entity corresponding to each player pair for 
        pair numbers 1 ... no_pairs saving any useful information from 
        player_list and put it into Datastore as a child of this Tournament.
        Also, the no_players has changed, generates a unique 
        (for this tournament) id associated with each pair.

    Args:
      player_list: list of dicts with keys pair_no (req), name (opt), 
        and email (opt)
      no_pairs: the total number of pairs in this tournament. Exactly this many
        PlayerPairs are created.
    '''
    pair_dict = {}
    if player_list:
      for player in player_list : 
        pair_no = player['pair_no']
        del player['pair_no']
        if pair_dict.get(pair_no):
          pair_dict[pair_no].append(player)
        else:
          pair_dict[pair_no]= [player]

    player_list = PlayerPair.query(ancestor=self.key).fetch()

    # If the number of players doesn't change, we just override some fields
    # in existing pairs. Otherwise, we delete existing pairs and create new 
    # ones.
    override_existing = len(player_list) == no_pairs
    if not override_existing:
      random_ids = self._RandomId(no_pairs)
      ndb.delete_multi([p.key for p in player_list])
    else:
      player_list.sort(key = lambda pp : pp.pair_no)

    # The create a PlayerPair and put it into Datastore for each possible
    # number.
    for i in range(1, no_pairs + 1):
      pair_members = pair_dict.get(i) 
      str_pair_members = json.dumps(pair_members) if pair_members else ''
      if override_existing:
          player_pair = player_list[i-1]
          player_pair.players = str_pair_members
      else:
        player_pair = PlayerPair(players=str_pair_members,
                                 pair_no=i, id=random_ids[i-1],
                                 parent=self.key)
      player_pair.key = PlayerPair.CreateKey(self, i)
      player_pair.put()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号