def _update_session()

in source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller/app/api/virtual_desktop_api.py [0:0]


    def _update_session(self, new_session: VirtualDesktopSession) -> VirtualDesktopSession:
        old_session = self.session_db.get_from_db(idea_session_id=new_session.idea_session_id, idea_session_owner=new_session.owner)

        if Utils.is_empty(old_session):
            new_session.failure_reason = f'invalid RES session id: {new_session.idea_session_id}:{new_session.name} or owner {new_session.owner}. Not updating the session.'
            self._logger.error(new_session.failure_reason)
            return new_session

        operation_failed = False
        is_session_updated = False
        is_server_updated = False

        if not operation_failed and Utils.is_not_empty(new_session.name) and new_session.name != old_session.name:
            is_session_updated = True
            old_session.name = new_session.name

        if not operation_failed and Utils.is_not_empty(new_session.description) and new_session.description != old_session.description:
            is_session_updated = True
            old_session.description = new_session.description

        if not operation_failed and Utils.is_not_empty(new_session.server) and Utils.is_not_empty(new_session.server.instance_type):
            old_server = self.server_db.get(instance_id=new_session.server.instance_id)
            if Utils.is_not_empty(old_server) and old_server.instance_type != new_session.server.instance_type:
                if old_session.hibernation_enabled:
                    error = f'Not allowed to change Instance type for session: {new_session.idea_session_id} because hibernation is enabled'
                    success = False
                else:
                    error, success = self.controller_utils.change_instance_type(instance_id=new_session.server.instance_id, instance_type_name=new_session.server.instance_type)

                if not success:
                    new_session.failure_reason = error
                    operation_failed = True
                else:
                    old_session.server.instance_type = new_session.server.instance_type
                    is_server_updated = True
                    is_session_updated = True

        if not operation_failed and Utils.is_not_empty(new_session.schedule):
            old_session = self.schedule_utils.update_schedule_for_session(new_session.schedule, old_session)
            is_session_updated = True

        if not operation_failed and is_server_updated:
            _ = self.server_db.update(old_session.server)

        if not operation_failed and is_session_updated:
            new_session = self.session_db.update(old_session)
            self.controller_utils.create_tag(new_session.server.instance_id, constants.IDEA_TAG_NAME, f'{self.context.cluster_name()}-{new_session.name}-{new_session.owner}')

        return new_session