import time import logging import requests from django.core.management.base import BaseCommand from django.conf import settings from pingcap_sso.models import User logger = logging.getLogger(__name__) class Command(BaseCommand): def handle(self, *args, **options): has_user_data = True page = 1 while has_user_data: users = self.get_asktug_users(page) for d in users: username = d['username'] avatar_url = 'https://pingkai.cn{}'.format( d['avatar_template'].replace('{size}', '50') ) try: User.objects.filter(username=username).update( avatar_url=avatar_url) user = User.objects.get(username=username) print(user.username, user.avatar_url) except User.DoesNotExist: continue if not users: has_user_data = False page += 1 time.sleep(2) def get_asktug_users(self, page): try: resp = requests.get( f'{settings.DISCOURSE_ENDPOINT_PREFIX}/admin/users/list/active.json' f'?order=created&page={page}', headers={ 'Api-Username': 'system', 'Api-Key': settings.DISCOURSE_API_KEY }, timeout=5 ) if resp.status_code != 200: logger.error('Failed to fetch asktug users, status_code: {}'.format( resp.status_code)) return [] return resp.json() except Exception as e: logger.error('Failed to fetch asktug users, {}'.format(e)) return []