Add missing docstrings related to profile methods. (#17559)

This commit is contained in:
Patrick Cloke 2024-08-13 12:04:35 -04:00 committed by GitHub
parent 81c19c4cd2
commit 8fea190a1f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 70 additions and 0 deletions

1
changelog.d/17559.doc Normal file
View File

@ -0,0 +1 @@
Improve docstrings for profile methods.

View File

@ -74,6 +74,17 @@ class ProfileHandler:
self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
async def get_profile(self, user_id: str, ignore_backoff: bool = True) -> JsonDict: async def get_profile(self, user_id: str, ignore_backoff: bool = True) -> JsonDict:
"""
Get a user's profile as a JSON dictionary.
Args:
user_id: The user to fetch the profile of.
ignore_backoff: True to ignore backoff when fetching over federation.
Returns:
A JSON dictionary. For local queries this will include the displayname and avatar_url
fields. For remote queries it may contain arbitrary information.
"""
target_user = UserID.from_string(user_id) target_user = UserID.from_string(user_id)
if self.hs.is_mine(target_user): if self.hs.is_mine(target_user):
@ -107,6 +118,15 @@ class ProfileHandler:
raise e.to_synapse_error() raise e.to_synapse_error()
async def get_displayname(self, target_user: UserID) -> Optional[str]: async def get_displayname(self, target_user: UserID) -> Optional[str]:
"""
Fetch a user's display name from their profile.
Args:
target_user: The user to fetch the display name of.
Returns:
The user's display name or None if unset.
"""
if self.hs.is_mine(target_user): if self.hs.is_mine(target_user):
try: try:
displayname = await self.store.get_profile_displayname(target_user) displayname = await self.store.get_profile_displayname(target_user)
@ -203,6 +223,15 @@ class ProfileHandler:
await self._update_join_states(requester, target_user) await self._update_join_states(requester, target_user)
async def get_avatar_url(self, target_user: UserID) -> Optional[str]: async def get_avatar_url(self, target_user: UserID) -> Optional[str]:
"""
Fetch a user's avatar URL from their profile.
Args:
target_user: The user to fetch the avatar URL of.
Returns:
The user's avatar URL or None if unset.
"""
if self.hs.is_mine(target_user): if self.hs.is_mine(target_user):
try: try:
avatar_url = await self.store.get_profile_avatar_url(target_user) avatar_url = await self.store.get_profile_avatar_url(target_user)
@ -403,6 +432,12 @@ class ProfileHandler:
async def _update_join_states( async def _update_join_states(
self, requester: Requester, target_user: UserID self, requester: Requester, target_user: UserID
) -> None: ) -> None:
"""
Update the membership events of each room the user is joined to with the
new profile information.
Note that this stomps over any custom display name or avatar URL in member events.
"""
if not self.hs.is_mine(target_user): if not self.hs.is_mine(target_user):
return return

View File

@ -144,6 +144,16 @@ class ProfileWorkerStore(SQLBaseStore):
return 50 return 50
async def get_profileinfo(self, user_id: UserID) -> ProfileInfo: async def get_profileinfo(self, user_id: UserID) -> ProfileInfo:
"""
Fetch the display name and avatar URL of a user.
Args:
user_id: The user ID to fetch the profile for.
Returns:
The user's display name and avatar URL. Values may be null if unset
or if the user doesn't exist.
"""
profile = await self.db_pool.simple_select_one( profile = await self.db_pool.simple_select_one(
table="profiles", table="profiles",
keyvalues={"full_user_id": user_id.to_string()}, keyvalues={"full_user_id": user_id.to_string()},
@ -158,6 +168,15 @@ class ProfileWorkerStore(SQLBaseStore):
return ProfileInfo(avatar_url=profile[1], display_name=profile[0]) return ProfileInfo(avatar_url=profile[1], display_name=profile[0])
async def get_profile_displayname(self, user_id: UserID) -> Optional[str]: async def get_profile_displayname(self, user_id: UserID) -> Optional[str]:
"""
Fetch the display name of a user.
Args:
user_id: The user to get the display name for.
Raises:
404 if the user does not exist.
"""
return await self.db_pool.simple_select_one_onecol( return await self.db_pool.simple_select_one_onecol(
table="profiles", table="profiles",
keyvalues={"full_user_id": user_id.to_string()}, keyvalues={"full_user_id": user_id.to_string()},
@ -166,6 +185,15 @@ class ProfileWorkerStore(SQLBaseStore):
) )
async def get_profile_avatar_url(self, user_id: UserID) -> Optional[str]: async def get_profile_avatar_url(self, user_id: UserID) -> Optional[str]:
"""
Fetch the avatar URL of a user.
Args:
user_id: The user to get the avatar URL for.
Raises:
404 if the user does not exist.
"""
return await self.db_pool.simple_select_one_onecol( return await self.db_pool.simple_select_one_onecol(
table="profiles", table="profiles",
keyvalues={"full_user_id": user_id.to_string()}, keyvalues={"full_user_id": user_id.to_string()},
@ -174,6 +202,12 @@ class ProfileWorkerStore(SQLBaseStore):
) )
async def create_profile(self, user_id: UserID) -> None: async def create_profile(self, user_id: UserID) -> None:
"""
Create a blank profile for a user.
Args:
user_id: The user to create the profile for.
"""
user_localpart = user_id.localpart user_localpart = user_id.localpart
await self.db_pool.simple_insert( await self.db_pool.simple_insert(
table="profiles", table="profiles",