old_contents: from heltour.tournament.models import *
  from heltour.tournament import lichessapi
  from heltour.celery import app
  from celery.utils.log import get_task_logger
  
  logger = get_task_logger(__name__)
  
  # Disabled for now because of rate-limiting
  lichess_teams = [] # ['lichess4545-league']
  
  @app.task(bind=True)
  def update_player_ratings(self):
      players = Player.objects.all()
      player_dict = {p.lichess_username: p for p in players}
  
      # Query players from the bulk user endpoint based on our lichess teams
      for team_name in lichess_teams:
          for username, rating, games_played in lichessapi.enumerate_user_classical_rating_and_games_played(team_name, 0):
              # Remove the player from the dict
              p = player_dict.pop(username, None)
              if p is not None:
                  p.rating, p.games_played = rating, games_played
                  p.save()
  
      # Any players not found above will be queried individually
      for username, p in player_dict.items():
          try:
              p.rating, p.games_played = lichessapi.get_user_classical_rating_and_games_played(username, 0)
              p.save()
          except Exception as e:
              logger.warning('Error getting rating for %s: %s' % (username, e))
  
      return len(players)
  
new_contents: from heltour.tournament.models import *
  from heltour.tournament import lichessapi
  from heltour.celery import app
  from celery.utils.log import get_task_logger
  
  logger = get_task_logger(__name__)
  
  # Disabled for now because of rate-limiting
  lichess_teams = [] # ['lichess4545-league']
  
  @app.task(bind=True)
  def update_player_ratings(self):
      players = Player.objects.all()
      player_dict = {p.lichess_username: p for p in players}
  
      # Query players from the bulk user endpoint based on our lichess teams
      for team_name in lichess_teams:
          for username, rating, games_played in lichessapi.enumerate_user_classical_rating_and_games_played(team_name, 0):
              # Remove the player from the dict
              p = player_dict.pop(username, None)
              if p is not None:
                  p.rating, p.games_played = rating, games_played
                  p.save()
  
      # Any players not found above will be queried individually
      for username, p in player_dict.items():
          try:
              p.rating, p.games_played = lichessapi.get_user_classical_rating_and_games_played(username, 0)
              p.save()
          except Exception as e:
              logger.warning('Error getting rating for %s: %s' % (username, e))
  
      logger.info('Updated ratings for %d players', len(players))
  
subject: Add completion log message to the background task