mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	We used 'savepoint=False' in #31169 which was prior to our discussion in CZO to use 'durable=True' instead. This commit makes changes to use 'durable=True' in the outermost transaction.atomic block.
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from django.db import transaction
 | 
						|
 | 
						|
from zerver.actions.user_settings import do_change_user_setting
 | 
						|
from zerver.lib.user_status import update_user_status
 | 
						|
from zerver.lib.users import get_user_ids_who_can_access_user
 | 
						|
from zerver.models import UserProfile
 | 
						|
from zerver.tornado.django_api import send_event_on_commit
 | 
						|
 | 
						|
 | 
						|
@transaction.atomic(durable=True)
 | 
						|
def do_update_user_status(
 | 
						|
    user_profile: UserProfile,
 | 
						|
    away: bool | None,
 | 
						|
    status_text: str | None,
 | 
						|
    client_id: int,
 | 
						|
    emoji_name: str | None,
 | 
						|
    emoji_code: str | None,
 | 
						|
    reaction_type: str | None,
 | 
						|
) -> None:
 | 
						|
    # Deprecated way for clients to access the user's `presence_enabled`
 | 
						|
    # setting, with away != presence_enabled. Can be removed when clients
 | 
						|
    # migrate "away" (also referred to as "unavailable") feature to directly
 | 
						|
    # use and update the user's presence_enabled setting.
 | 
						|
    if away is not None:
 | 
						|
        user_setting = "presence_enabled"
 | 
						|
        value = not away
 | 
						|
        do_change_user_setting(user_profile, user_setting, value, acting_user=user_profile)
 | 
						|
 | 
						|
    realm = user_profile.realm
 | 
						|
 | 
						|
    update_user_status(
 | 
						|
        user_profile_id=user_profile.id,
 | 
						|
        status_text=status_text,
 | 
						|
        client_id=client_id,
 | 
						|
        emoji_name=emoji_name,
 | 
						|
        emoji_code=emoji_code,
 | 
						|
        reaction_type=reaction_type,
 | 
						|
    )
 | 
						|
 | 
						|
    event = dict(
 | 
						|
        type="user_status",
 | 
						|
        user_id=user_profile.id,
 | 
						|
    )
 | 
						|
 | 
						|
    if away is not None:
 | 
						|
        event["away"] = away
 | 
						|
 | 
						|
    if status_text is not None:
 | 
						|
        event["status_text"] = status_text
 | 
						|
 | 
						|
    if emoji_name is not None:
 | 
						|
        event["emoji_name"] = emoji_name
 | 
						|
        event["emoji_code"] = emoji_code
 | 
						|
        event["reaction_type"] = reaction_type
 | 
						|
    send_event_on_commit(realm, event, get_user_ids_who_can_access_user(user_profile))
 |