from .models import UserInformation from django.contrib.auth.models import User from typing import Optional async def acreate_user_information(user: User, *, display_name: Optional[str] = None) -> UserInformation: """Async. Create a UserInformation object for the given user. @param user: The user to create the UserInformation object for. @param display_name: The display name for the user. If None, the user's username will be used. @return: The created UserInformation object. """ user_information = await UserInformation.objects.acreate(user=user, display_name=user.username) # Use the given display name if provided. if display_name is not None: user_information.display_name = display_name await user_information.asave() return user_information async def aget_user_information(user: User) -> UserInformation: """Async. Get the UserInformation object for the given user. @param user: The user to get the UserInformation object for. @return: The UserInformation object for the given user. """ return await UserInformation.objects.aget(user) async def aset_user_display_name(user: User, display_name: Optional[str] = None) -> UserInformation: """Async. Set the display name for the given user. @param user: The user to set the display name for. @param display_name: The display name to set for the user. If None, the user's username will be used. @return: The UserInformation object for the given user. """ user_information = await UserInformation.objects.aget(user) # Set the display name to the given display name, or the user's username if None. if display_name is not None: user_information.display_name = display_name else: user_information.display_name = user.username await user_information.asave() return user_information