import hashlib import random from django.contrib.auth import get_user_model from django.utils.crypto import get_random_string from ..users.bans import ban_user from ..users.test import create_test_user from .utils import retry_on_db_error User = get_user_model() AVATAR_SIZES = (400, 200, 100) GRAVATAR_URL = "https://www.gravatar.com/avatar/%s?s=%s&d=retro" PASSWORD = "password" @retry_on_db_error def get_fake_user(fake, rank=None, requires_activation=User.ACTIVATION_NONE): username = get_fake_username(fake) email = fake.email() return create_test_user( username, email.lower(), PASSWORD, avatars=get_fake_avatars(email), rank=rank, requires_activation=requires_activation, ) def get_fake_banned_user(fake, rank=None): user = get_fake_user(fake, rank=rank) ban_user(user) return user def get_fake_inactive_user(fake, rank=None): return get_fake_user(fake, rank=rank, requires_activation=User.ACTIVATION_USER) def get_fake_admin_activated_user(fake, rank=None): return get_fake_user(fake, rank=rank, requires_activation=User.ACTIVATION_ADMIN) def get_fake_deleted_user(fake, rank=None): user = get_fake_user(fake, rank=rank) user.is_active = False user.save(update_fields=["is_active"]) return user def get_fake_username(fake): possible_usernames = [ fake.first_name(), fake.last_name(), fake.name().replace(" ", ""), fake.user_name(), get_random_string(random.randint(4, 8)), ] return random.choice(possible_usernames) def get_fake_avatars(email): email_hash = hashlib.md5(email.lower().encode("utf-8")).hexdigest() return [ {"size": size, "url": GRAVATAR_URL % (email_hash, size)} for size in AVATAR_SIZES ]