Source code for nkdsu.apps.vote.placeholder_avatars

from typing import Optional
from zlib import crc32

from django.contrib.staticfiles import finders

from .voter import Voter


__all__ = ['placeholder_avatar_for']


[docs] def placeholder_avatar_for(voter: Voter) -> str: uid: tuple[str, Optional[int], Optional[int]] = ('nkdsu-voter',) + voter.voter_id hashed: int = crc32(str(uid).encode('ascii')) return _static_path_from_filename(AVATAR_FILENAMES[hashed % len(AVATAR_FILENAMES)])
AVATAR_FILENAMES = [ f'icon{i}-{deg}.svg' for i in range(1, 5) for deg in range(0, 360, 15) ] def _static_path_from_filename(avatar_filename: str) -> str: return f'i/placeholder-avatars/{avatar_filename}' def _verify_avatar_list() -> None: """ Make sure all the avatars are actually present. """ for avatar_filename in AVATAR_FILENAMES: if finders.find(_static_path_from_filename(avatar_filename)) is None: raise AssertionError(f'{avatar_filename} placeholder avatar not present') _verify_avatar_list()