def bulk_import_players(players): """ Given a list of player data, bulk import into database. Since team import also brings in players, we are more cautious here as we don't want to disrupt those connections. Therefor, this import process only creates and updates existing player objects. Arguments: players -- List of team data derived from team CSV sheet. (list) """ pass player_count = {'created': 0, 'updated': 0} alias_count = {'created': 0, 'updated': 0, 'deleted': 0, 'skipped': 0} for entry in players: # Skip bogus data if not entry['primary_in-game_name']: continue # Locate existing player object, ignoring case. player = Player.objects.filter( name__iexact=entry['player_name']).first() if player: player_count['updated'] += 1 # Create (but don't commit) player object if not found else: player = Player() player.name = entry['player_name'] player_count['created'] += 1 player.name_phonetic = entry['phoentic'] player.pronouns = entry['pronouns'] player.discord_username = entry['discord_id'] player.twitch_username = entry['twitch_id'] player.save() # Set primary in-game name primary_alias = player.aliases.filter(is_primary=True).first() if primary_alias: if primary_alias.name != entry['primary_in-game_name']: primary_alias.name = entry['primary_in-game_name'] primary_alias.save() alias_count['updated'] += 1 # If primary in game name field completed, set as main alias elif entry['primary_in-game_name']: Alias.objects.create( player=player, name=entry['primary_in-game_name'], is_primary=True ) alias_count['created'] += 1 # If not, just use player name record as primary alias else: Alias.objects.create( player=player, name=player.name, is_primary=True ) alias_count['created'] += 1 # Set secondary alts secondary_aliases = entry['secondary_alts'].split(',') secondary_aliases = [x for x in secondary_aliases if x] # Weed out empty for alt in secondary_aliases: # Skip garbage entries if alt.lower() in ['none']: continue alias = Alias.objects.filter(name__iexact=alt, player=player, is_primary=False).first() if alias: alias.name = alt alias.save() alias_count['updated'] += 1 else: try: Alias.objects.create(name=alt, player=player, is_primary=False) alias_count['updated'] += 1 except IntegrityError: alias_count['skipped'] += 1 return {'players': player_count, 'aliases': alias_count}