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()
评论列表
文章目录