diff --git a/getstream/chat/async_channel.py b/getstream/chat/async_channel.py index e13b1d30..c77204fb 100644 --- a/getstream/chat/async_channel.py +++ b/getstream/chat/async_channel.py @@ -9,7 +9,7 @@ def __init__( self, client, channel_type: str, - channel_id: str = None, + channel_id: str | None = None, custom_data: Dict = None, ): self.channel_id = channel_id @@ -285,6 +285,47 @@ async def get_many_messages( self._sync_from_response(response.data) return response + @attach_channel_cid_async + async def get_pinned_messages( + self, + limit: Optional[int] = None, + offset: Optional[int] = None, + id_gte: Optional[str] = None, + id_gt: Optional[str] = None, + id_lte: Optional[str] = None, + id_lt: Optional[str] = None, + pinned_at_after_or_equal: Optional[datetime] = None, + pinned_at_after: Optional[datetime] = None, + pinned_at_before_or_equal: Optional[datetime] = None, + pinned_at_before: Optional[datetime] = None, + id_around: Optional[str] = None, + pinned_at_around: Optional[datetime] = None, + user_id: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + member_custom_include: Optional[List[str]] = None, + ) -> StreamResponse[GetPinnedMessagesResponse]: + response = await self.client.get_pinned_messages( + type=self.channel_type, + id=self.channel_id, + limit=limit, + offset=offset, + id_gte=id_gte, + id_gt=id_gt, + id_lte=id_lte, + id_lt=id_lt, + pinned_at_after_or_equal=pinned_at_after_or_equal, + pinned_at_after=pinned_at_after, + pinned_at_before_or_equal=pinned_at_before_or_equal, + pinned_at_before=pinned_at_before, + id_around=id_around, + pinned_at_around=pinned_at_around, + user_id=user_id, + sort=sort, + member_custom_include=member_custom_include, + ) + self._sync_from_response(response.data) + return response + @attach_channel_cid_async async def get_or_create( self, diff --git a/getstream/chat/async_rest_client.py b/getstream/chat/async_rest_client.py index 1c2ff216..d06634ca 100644 --- a/getstream/chat/async_rest_client.py +++ b/getstream/chat/async_rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes ChatClient with BaseClient instance @@ -110,7 +110,7 @@ async def get_campaign( next: Optional[str] = None, limit: Optional[int] = None, ) -> StreamResponse[GetCampaignResponse]: - query_params = build_query_param(**{"prev": prev, "next": next, "limit": limit}) + query_params = build_query_param(prev=prev, next=next, limit=limit) path_params = { "id": id, } @@ -268,7 +268,7 @@ async def mark_delivered( user_id: Optional[str] = None, latest_delivered_messages: Optional[List[DeliveredMessagePayload]] = None, ) -> StreamResponse[MarkDeliveredResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) json = MarkDeliveredRequest( latest_delivered_messages=latest_delivered_messages ).to_dict() @@ -345,7 +345,7 @@ async def get_or_create_distinct_channel( async def delete_channel( self, type: str, id: str, hard_delete: Optional[bool] = None ) -> StreamResponse[DeleteChannelResponse]: - query_params = build_query_param(**{"hard_delete": hard_delete}) + query_params = build_query_param(hard_delete=hard_delete) path_params = { "type": type, "id": id, @@ -374,18 +374,16 @@ async def get_channel( user_id: Optional[str] = None, ) -> StreamResponse[ChannelStateResponse]: query_params = build_query_param( - **{ - "state": state, - "messages_limit": messages_limit, - "members_limit": members_limit, - "watchers_limit": watchers_limit, - "messages_id_lt": messages_id_lt, - "messages_id_lte": messages_id_lte, - "messages_id_gt": messages_id_gt, - "messages_id_gte": messages_id_gte, - "messages_id_around": messages_id_around, - "user_id": user_id, - } + state=state, + messages_limit=messages_limit, + members_limit=members_limit, + watchers_limit=watchers_limit, + messages_id_lt=messages_id_lt, + messages_id_lte=messages_id_lte, + messages_id_gt=messages_id_gt, + messages_id_gte=messages_id_gte, + messages_id_around=messages_id_around, + user_id=user_id, ) path_params = { "type": type, @@ -485,7 +483,7 @@ async def delete_draft( parent_id: Optional[str] = None, user_id: Optional[str] = None, ) -> StreamResponse[Response]: - query_params = build_query_param(**{"parent_id": parent_id, "user_id": user_id}) + query_params = build_query_param(parent_id=parent_id, user_id=user_id) path_params = { "type": type, "id": id, @@ -505,7 +503,7 @@ async def get_draft( parent_id: Optional[str] = None, user_id: Optional[str] = None, ) -> StreamResponse[GetDraftResponse]: - query_params = build_query_param(**{"parent_id": parent_id, "user_id": user_id}) + query_params = build_query_param(parent_id=parent_id, user_id=user_id) path_params = { "type": type, "id": id, @@ -537,7 +535,7 @@ async def send_event( async def delete_channel_file( self, type: str, id: str, url: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) path_params = { "type": type, "id": id, @@ -596,7 +594,7 @@ async def hide_channel( async def delete_channel_image( self, type: str, id: str, url: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) path_params = { "type": type, "id": id, @@ -640,7 +638,7 @@ async def update_member_partial( unset: Optional[List[str]] = None, set: Optional[Dict[str, object]] = None, ) -> StreamResponse[UpdateMemberPartialResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "type": type, "id": id, @@ -700,7 +698,7 @@ async def get_many_messages( member_custom_include: Optional[List[str]] = None, ) -> StreamResponse[GetManyMessagesResponse]: query_params = build_query_param( - **{"ids": ids, "member_custom_include": member_custom_include} + ids=ids, member_custom_include=member_custom_include ) path_params = { "type": type, @@ -713,6 +711,55 @@ async def get_many_messages( path_params=path_params, ) + @telemetry.operation_name("getstream.api.chat.get_pinned_messages") + async def get_pinned_messages( + self, + type: str, + id: str, + limit: Optional[int] = None, + offset: Optional[int] = None, + id_gte: Optional[str] = None, + id_gt: Optional[str] = None, + id_lte: Optional[str] = None, + id_lt: Optional[str] = None, + pinned_at_after_or_equal: Optional[datetime] = None, + pinned_at_after: Optional[datetime] = None, + pinned_at_before_or_equal: Optional[datetime] = None, + pinned_at_before: Optional[datetime] = None, + id_around: Optional[str] = None, + pinned_at_around: Optional[datetime] = None, + user_id: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + member_custom_include: Optional[List[str]] = None, + ) -> StreamResponse[GetPinnedMessagesResponse]: + query_params = build_query_param( + limit=limit, + offset=offset, + id_gte=id_gte, + id_gt=id_gt, + id_lte=id_lte, + id_lt=id_lt, + pinned_at_after_or_equal=pinned_at_after_or_equal, + pinned_at_after=pinned_at_after, + pinned_at_before_or_equal=pinned_at_before_or_equal, + pinned_at_before=pinned_at_before, + id_around=id_around, + pinned_at_around=pinned_at_around, + user_id=user_id, + sort=sort, + member_custom_include=member_custom_include, + ) + path_params = { + "type": type, + "id": id, + } + return await self.get( + "/api/v2/chat/channels/{type}/{id}/pinned_messages", + GetPinnedMessagesResponse, + query_params=query_params, + path_params=path_params, + ) + @telemetry.operation_name("getstream.api.chat.get_or_create_channel") async def get_or_create_channel( self, @@ -970,6 +1017,7 @@ async def update_channel_type( custom_events: Optional[bool] = None, delivery_events: Optional[bool] = None, mark_messages_pending: Optional[bool] = None, + message_retention: Optional[str] = None, mutes: Optional[bool] = None, partition_size: Optional[int] = None, partition_ttl: Optional[str] = None, @@ -1010,6 +1058,7 @@ async def update_channel_type( custom_events=custom_events, delivery_events=delivery_events, mark_messages_pending=mark_messages_pending, + message_retention=message_retention, mutes=mutes, partition_size=partition_size, partition_ttl=partition_ttl, @@ -1157,7 +1206,7 @@ async def export_channels( async def query_members( self, payload: Optional[QueryMembersPayload] = None ) -> StreamResponse[MembersResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return await self.get( "/api/v2/chat/members", MembersResponse, query_params=query_params ) @@ -1187,7 +1236,7 @@ async def delete_message( delete_for_me: Optional[bool] = None, ) -> StreamResponse[DeleteMessageResponse]: query_params = build_query_param( - **{"hard": hard, "deleted_by": deleted_by, "delete_for_me": delete_for_me} + hard=hard, deleted_by=deleted_by, delete_for_me=delete_for_me ) path_params = { "id": id, @@ -1203,9 +1252,7 @@ async def delete_message( async def get_message( self, id: str, show_deleted_message: Optional[bool] = None ) -> StreamResponse[GetMessageResponse]: - query_params = build_query_param( - **{"show_deleted_message": show_deleted_message} - ) + query_params = build_query_param(show_deleted_message=show_deleted_message) path_params = { "id": id, } @@ -1357,7 +1404,7 @@ async def send_reaction( async def delete_reaction( self, id: str, type: str, user_id: Optional[str] = None ) -> StreamResponse[DeleteReactionResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "id": id, "type": type, @@ -1373,7 +1420,7 @@ async def delete_reaction( async def get_reactions( self, id: str, limit: Optional[int] = None, offset: Optional[int] = None ) -> StreamResponse[GetReactionsResponse]: - query_params = build_query_param(**{"limit": limit, "offset": offset}) + query_params = build_query_param(limit=limit, offset=offset) path_params = { "id": id, } @@ -1470,7 +1517,7 @@ async def cast_poll_vote( async def delete_poll_vote( self, message_id: str, poll_id: str, vote_id: str, user_id: Optional[str] = None ) -> StreamResponse[PollVoteResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "message_id": message_id, "poll_id": poll_id, @@ -1487,7 +1534,7 @@ async def delete_poll_vote( async def delete_reminder( self, message_id: str, user_id: Optional[str] = None ) -> StreamResponse[DeleteReminderResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "message_id": message_id, } @@ -1554,16 +1601,14 @@ async def get_replies( member_custom_include: Optional[List[str]] = None, ) -> StreamResponse[GetRepliesResponse]: query_params = build_query_param( - **{ - "limit": limit, - "id_gte": id_gte, - "id_gt": id_gt, - "id_lte": id_lte, - "id_lt": id_lt, - "id_around": id_around, - "sort": sort, - "member_custom_include": member_custom_include, - } + limit=limit, + id_gte=id_gte, + id_gt=id_gt, + id_lte=id_lte, + id_lt=id_lt, + id_around=id_around, + sort=sort, + member_custom_include=member_custom_include, ) path_params = { "parent_id": parent_id, @@ -1579,7 +1624,7 @@ async def get_replies( async def query_message_flags( self, payload: Optional[QueryMessageFlagsPayload] = None ) -> StreamResponse[QueryMessageFlagsResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return await self.get( "/api/v2/chat/moderation/flags/message", QueryMessageFlagsResponse, @@ -1616,11 +1661,88 @@ async def unmute_channel( "/api/v2/chat/moderation/unmute/channel", UnmuteResponse, json=json ) + @telemetry.operation_name("getstream.api.chat.get_predefined_filters") + async def get_predefined_filters( + self, + include_stats: Optional[bool] = None, + sort: Optional[List[SortParamRequest]] = None, + ) -> StreamResponse[QueryPredefinedFiltersResponse]: + query_params = build_query_param(include_stats=include_stats, sort=sort) + return await self.get( + "/api/v2/chat/predefined_filters", + QueryPredefinedFiltersResponse, + query_params=query_params, + ) + + @telemetry.operation_name("getstream.api.chat.create_predefined_filter") + async def create_predefined_filter( + self, + name: str, + operation: str, + filter: Dict[str, object], + description: Optional[str] = None, + sort: Optional[List[Dict[str, object]]] = None, + ) -> StreamResponse[CreatePredefinedFilterResponse]: + json = CreatePredefinedFilterRequest( + name=name, + operation=operation, + filter=filter, + description=description, + sort=sort, + ).to_dict() + return await self.post( + "/api/v2/chat/predefined_filters", CreatePredefinedFilterResponse, json=json + ) + + @telemetry.operation_name("getstream.api.chat.delete_predefined_filter") + async def delete_predefined_filter(self, name: str) -> StreamResponse[Response]: + path_params = { + "name": name, + } + return await self.delete( + "/api/v2/chat/predefined_filters/{name}", Response, path_params=path_params + ) + + @telemetry.operation_name("getstream.api.chat.get_predefined_filter") + async def get_predefined_filter( + self, name: str + ) -> StreamResponse[GetPredefinedFilterResponse]: + path_params = { + "name": name, + } + return await self.get( + "/api/v2/chat/predefined_filters/{name}", + GetPredefinedFilterResponse, + path_params=path_params, + ) + + @telemetry.operation_name("getstream.api.chat.update_predefined_filter") + async def update_predefined_filter( + self, + name: str, + operation: str, + filter: Dict[str, object], + description: Optional[str] = None, + sort: Optional[List[Dict[str, object]]] = None, + ) -> StreamResponse[UpdatePredefinedFilterResponse]: + path_params = { + "name": name, + } + json = UpdatePredefinedFilterRequest( + operation=operation, filter=filter, description=description, sort=sort + ).to_dict() + return await self.put( + "/api/v2/chat/predefined_filters/{name}", + UpdatePredefinedFilterResponse, + path_params=path_params, + json=json, + ) + @telemetry.operation_name("getstream.api.chat.query_banned_users") async def query_banned_users( self, payload: Optional[QueryBannedUsersPayload] = None ) -> StreamResponse[QueryBannedUsersResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return await self.get( "/api/v2/chat/query_banned_users", QueryBannedUsersResponse, @@ -1631,7 +1753,7 @@ async def query_banned_users( async def query_future_channel_bans( self, payload: Optional[QueryFutureChannelBansPayload] = None ) -> StreamResponse[QueryFutureChannelBansResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return await self.get( "/api/v2/chat/query_future_channel_bans", QueryFutureChannelBansResponse, @@ -1716,7 +1838,7 @@ async def get_retention_policy_runs( async def search( self, payload: Optional[SearchPayload] = None ) -> StreamResponse[SearchResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return await self.get( "/api/v2/chat/search", SearchResponse, query_params=query_params ) @@ -1875,6 +1997,7 @@ async def query_team_usage_stats( month: Optional[str] = None, next: Optional[str] = None, start_date: Optional[str] = None, + team: Optional[str] = None, ) -> StreamResponse[QueryTeamUsageStatsResponse]: json = QueryTeamUsageStatsRequest( end_date=end_date, @@ -1882,6 +2005,7 @@ async def query_team_usage_stats( month=month, next=next, start_date=start_date, + team=team, ).to_dict() return await self.post( "/api/v2/chat/stats/team_usage", QueryTeamUsageStatsResponse, json=json @@ -1924,11 +2048,9 @@ async def get_thread( member_limit: Optional[int] = None, ) -> StreamResponse[GetThreadResponse]: query_params = build_query_param( - **{ - "reply_limit": reply_limit, - "participant_limit": participant_limit, - "member_limit": member_limit, - } + reply_limit=reply_limit, + participant_limit=participant_limit, + member_limit=member_limit, ) path_params = { "message_id": message_id, @@ -1966,7 +2088,7 @@ async def update_thread_partial( async def unread_counts( self, user_id: Optional[str] = None ) -> StreamResponse[WrappedUnreadCountsResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return await self.get( "/api/v2/chat/unread", WrappedUnreadCountsResponse, diff --git a/getstream/chat/channel.py b/getstream/chat/channel.py index d291d1b5..af24273e 100644 --- a/getstream/chat/channel.py +++ b/getstream/chat/channel.py @@ -9,7 +9,7 @@ def __init__( self, client, channel_type: str, - channel_id: str = None, + channel_id: str | None = None, custom_data: Dict = None, ): self.channel_id = channel_id @@ -285,6 +285,47 @@ def get_many_messages( self._sync_from_response(response.data) return response + @attach_channel_cid + def get_pinned_messages( + self, + limit: Optional[int] = None, + offset: Optional[int] = None, + id_gte: Optional[str] = None, + id_gt: Optional[str] = None, + id_lte: Optional[str] = None, + id_lt: Optional[str] = None, + pinned_at_after_or_equal: Optional[datetime] = None, + pinned_at_after: Optional[datetime] = None, + pinned_at_before_or_equal: Optional[datetime] = None, + pinned_at_before: Optional[datetime] = None, + id_around: Optional[str] = None, + pinned_at_around: Optional[datetime] = None, + user_id: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + member_custom_include: Optional[List[str]] = None, + ) -> StreamResponse[GetPinnedMessagesResponse]: + response = self.client.get_pinned_messages( + type=self.channel_type, + id=self.channel_id, + limit=limit, + offset=offset, + id_gte=id_gte, + id_gt=id_gt, + id_lte=id_lte, + id_lt=id_lt, + pinned_at_after_or_equal=pinned_at_after_or_equal, + pinned_at_after=pinned_at_after, + pinned_at_before_or_equal=pinned_at_before_or_equal, + pinned_at_before=pinned_at_before, + id_around=id_around, + pinned_at_around=pinned_at_around, + user_id=user_id, + sort=sort, + member_custom_include=member_custom_include, + ) + self._sync_from_response(response.data) + return response + @attach_channel_cid def get_or_create( self, diff --git a/getstream/chat/rest_client.py b/getstream/chat/rest_client.py index b032f656..79cdee20 100644 --- a/getstream/chat/rest_client.py +++ b/getstream/chat/rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes ChatClient with BaseClient instance @@ -108,7 +108,7 @@ def get_campaign( next: Optional[str] = None, limit: Optional[int] = None, ) -> StreamResponse[GetCampaignResponse]: - query_params = build_query_param(**{"prev": prev, "next": next, "limit": limit}) + query_params = build_query_param(prev=prev, next=next, limit=limit) path_params = { "id": id, } @@ -264,7 +264,7 @@ def mark_delivered( user_id: Optional[str] = None, latest_delivered_messages: Optional[List[DeliveredMessagePayload]] = None, ) -> StreamResponse[MarkDeliveredResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) json = MarkDeliveredRequest( latest_delivered_messages=latest_delivered_messages ).to_dict() @@ -339,7 +339,7 @@ def get_or_create_distinct_channel( def delete_channel( self, type: str, id: str, hard_delete: Optional[bool] = None ) -> StreamResponse[DeleteChannelResponse]: - query_params = build_query_param(**{"hard_delete": hard_delete}) + query_params = build_query_param(hard_delete=hard_delete) path_params = { "type": type, "id": id, @@ -368,18 +368,16 @@ def get_channel( user_id: Optional[str] = None, ) -> StreamResponse[ChannelStateResponse]: query_params = build_query_param( - **{ - "state": state, - "messages_limit": messages_limit, - "members_limit": members_limit, - "watchers_limit": watchers_limit, - "messages_id_lt": messages_id_lt, - "messages_id_lte": messages_id_lte, - "messages_id_gt": messages_id_gt, - "messages_id_gte": messages_id_gte, - "messages_id_around": messages_id_around, - "user_id": user_id, - } + state=state, + messages_limit=messages_limit, + members_limit=members_limit, + watchers_limit=watchers_limit, + messages_id_lt=messages_id_lt, + messages_id_lte=messages_id_lte, + messages_id_gt=messages_id_gt, + messages_id_gte=messages_id_gte, + messages_id_around=messages_id_around, + user_id=user_id, ) path_params = { "type": type, @@ -479,7 +477,7 @@ def delete_draft( parent_id: Optional[str] = None, user_id: Optional[str] = None, ) -> StreamResponse[Response]: - query_params = build_query_param(**{"parent_id": parent_id, "user_id": user_id}) + query_params = build_query_param(parent_id=parent_id, user_id=user_id) path_params = { "type": type, "id": id, @@ -499,7 +497,7 @@ def get_draft( parent_id: Optional[str] = None, user_id: Optional[str] = None, ) -> StreamResponse[GetDraftResponse]: - query_params = build_query_param(**{"parent_id": parent_id, "user_id": user_id}) + query_params = build_query_param(parent_id=parent_id, user_id=user_id) path_params = { "type": type, "id": id, @@ -531,7 +529,7 @@ def send_event( def delete_channel_file( self, type: str, id: str, url: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) path_params = { "type": type, "id": id, @@ -590,7 +588,7 @@ def hide_channel( def delete_channel_image( self, type: str, id: str, url: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) path_params = { "type": type, "id": id, @@ -634,7 +632,7 @@ def update_member_partial( unset: Optional[List[str]] = None, set: Optional[Dict[str, object]] = None, ) -> StreamResponse[UpdateMemberPartialResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "type": type, "id": id, @@ -694,7 +692,7 @@ def get_many_messages( member_custom_include: Optional[List[str]] = None, ) -> StreamResponse[GetManyMessagesResponse]: query_params = build_query_param( - **{"ids": ids, "member_custom_include": member_custom_include} + ids=ids, member_custom_include=member_custom_include ) path_params = { "type": type, @@ -707,6 +705,55 @@ def get_many_messages( path_params=path_params, ) + @telemetry.operation_name("getstream.api.chat.get_pinned_messages") + def get_pinned_messages( + self, + type: str, + id: str, + limit: Optional[int] = None, + offset: Optional[int] = None, + id_gte: Optional[str] = None, + id_gt: Optional[str] = None, + id_lte: Optional[str] = None, + id_lt: Optional[str] = None, + pinned_at_after_or_equal: Optional[datetime] = None, + pinned_at_after: Optional[datetime] = None, + pinned_at_before_or_equal: Optional[datetime] = None, + pinned_at_before: Optional[datetime] = None, + id_around: Optional[str] = None, + pinned_at_around: Optional[datetime] = None, + user_id: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + member_custom_include: Optional[List[str]] = None, + ) -> StreamResponse[GetPinnedMessagesResponse]: + query_params = build_query_param( + limit=limit, + offset=offset, + id_gte=id_gte, + id_gt=id_gt, + id_lte=id_lte, + id_lt=id_lt, + pinned_at_after_or_equal=pinned_at_after_or_equal, + pinned_at_after=pinned_at_after, + pinned_at_before_or_equal=pinned_at_before_or_equal, + pinned_at_before=pinned_at_before, + id_around=id_around, + pinned_at_around=pinned_at_around, + user_id=user_id, + sort=sort, + member_custom_include=member_custom_include, + ) + path_params = { + "type": type, + "id": id, + } + return self.get( + "/api/v2/chat/channels/{type}/{id}/pinned_messages", + GetPinnedMessagesResponse, + query_params=query_params, + path_params=path_params, + ) + @telemetry.operation_name("getstream.api.chat.get_or_create_channel") def get_or_create_channel( self, @@ -962,6 +1009,7 @@ def update_channel_type( custom_events: Optional[bool] = None, delivery_events: Optional[bool] = None, mark_messages_pending: Optional[bool] = None, + message_retention: Optional[str] = None, mutes: Optional[bool] = None, partition_size: Optional[int] = None, partition_ttl: Optional[str] = None, @@ -1002,6 +1050,7 @@ def update_channel_type( custom_events=custom_events, delivery_events=delivery_events, mark_messages_pending=mark_messages_pending, + message_retention=message_retention, mutes=mutes, partition_size=partition_size, partition_ttl=partition_ttl, @@ -1145,7 +1194,7 @@ def export_channels( def query_members( self, payload: Optional[QueryMembersPayload] = None ) -> StreamResponse[MembersResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return self.get( "/api/v2/chat/members", MembersResponse, query_params=query_params ) @@ -1175,7 +1224,7 @@ def delete_message( delete_for_me: Optional[bool] = None, ) -> StreamResponse[DeleteMessageResponse]: query_params = build_query_param( - **{"hard": hard, "deleted_by": deleted_by, "delete_for_me": delete_for_me} + hard=hard, deleted_by=deleted_by, delete_for_me=delete_for_me ) path_params = { "id": id, @@ -1191,9 +1240,7 @@ def delete_message( def get_message( self, id: str, show_deleted_message: Optional[bool] = None ) -> StreamResponse[GetMessageResponse]: - query_params = build_query_param( - **{"show_deleted_message": show_deleted_message} - ) + query_params = build_query_param(show_deleted_message=show_deleted_message) path_params = { "id": id, } @@ -1345,7 +1392,7 @@ def send_reaction( def delete_reaction( self, id: str, type: str, user_id: Optional[str] = None ) -> StreamResponse[DeleteReactionResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "id": id, "type": type, @@ -1361,7 +1408,7 @@ def delete_reaction( def get_reactions( self, id: str, limit: Optional[int] = None, offset: Optional[int] = None ) -> StreamResponse[GetReactionsResponse]: - query_params = build_query_param(**{"limit": limit, "offset": offset}) + query_params = build_query_param(limit=limit, offset=offset) path_params = { "id": id, } @@ -1458,7 +1505,7 @@ def cast_poll_vote( def delete_poll_vote( self, message_id: str, poll_id: str, vote_id: str, user_id: Optional[str] = None ) -> StreamResponse[PollVoteResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "message_id": message_id, "poll_id": poll_id, @@ -1475,7 +1522,7 @@ def delete_poll_vote( def delete_reminder( self, message_id: str, user_id: Optional[str] = None ) -> StreamResponse[DeleteReminderResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "message_id": message_id, } @@ -1542,16 +1589,14 @@ def get_replies( member_custom_include: Optional[List[str]] = None, ) -> StreamResponse[GetRepliesResponse]: query_params = build_query_param( - **{ - "limit": limit, - "id_gte": id_gte, - "id_gt": id_gt, - "id_lte": id_lte, - "id_lt": id_lt, - "id_around": id_around, - "sort": sort, - "member_custom_include": member_custom_include, - } + limit=limit, + id_gte=id_gte, + id_gt=id_gt, + id_lte=id_lte, + id_lt=id_lt, + id_around=id_around, + sort=sort, + member_custom_include=member_custom_include, ) path_params = { "parent_id": parent_id, @@ -1567,7 +1612,7 @@ def get_replies( def query_message_flags( self, payload: Optional[QueryMessageFlagsPayload] = None ) -> StreamResponse[QueryMessageFlagsResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return self.get( "/api/v2/chat/moderation/flags/message", QueryMessageFlagsResponse, @@ -1604,11 +1649,88 @@ def unmute_channel( "/api/v2/chat/moderation/unmute/channel", UnmuteResponse, json=json ) + @telemetry.operation_name("getstream.api.chat.get_predefined_filters") + def get_predefined_filters( + self, + include_stats: Optional[bool] = None, + sort: Optional[List[SortParamRequest]] = None, + ) -> StreamResponse[QueryPredefinedFiltersResponse]: + query_params = build_query_param(include_stats=include_stats, sort=sort) + return self.get( + "/api/v2/chat/predefined_filters", + QueryPredefinedFiltersResponse, + query_params=query_params, + ) + + @telemetry.operation_name("getstream.api.chat.create_predefined_filter") + def create_predefined_filter( + self, + name: str, + operation: str, + filter: Dict[str, object], + description: Optional[str] = None, + sort: Optional[List[Dict[str, object]]] = None, + ) -> StreamResponse[CreatePredefinedFilterResponse]: + json = CreatePredefinedFilterRequest( + name=name, + operation=operation, + filter=filter, + description=description, + sort=sort, + ).to_dict() + return self.post( + "/api/v2/chat/predefined_filters", CreatePredefinedFilterResponse, json=json + ) + + @telemetry.operation_name("getstream.api.chat.delete_predefined_filter") + def delete_predefined_filter(self, name: str) -> StreamResponse[Response]: + path_params = { + "name": name, + } + return self.delete( + "/api/v2/chat/predefined_filters/{name}", Response, path_params=path_params + ) + + @telemetry.operation_name("getstream.api.chat.get_predefined_filter") + def get_predefined_filter( + self, name: str + ) -> StreamResponse[GetPredefinedFilterResponse]: + path_params = { + "name": name, + } + return self.get( + "/api/v2/chat/predefined_filters/{name}", + GetPredefinedFilterResponse, + path_params=path_params, + ) + + @telemetry.operation_name("getstream.api.chat.update_predefined_filter") + def update_predefined_filter( + self, + name: str, + operation: str, + filter: Dict[str, object], + description: Optional[str] = None, + sort: Optional[List[Dict[str, object]]] = None, + ) -> StreamResponse[UpdatePredefinedFilterResponse]: + path_params = { + "name": name, + } + json = UpdatePredefinedFilterRequest( + operation=operation, filter=filter, description=description, sort=sort + ).to_dict() + return self.put( + "/api/v2/chat/predefined_filters/{name}", + UpdatePredefinedFilterResponse, + path_params=path_params, + json=json, + ) + @telemetry.operation_name("getstream.api.chat.query_banned_users") def query_banned_users( self, payload: Optional[QueryBannedUsersPayload] = None ) -> StreamResponse[QueryBannedUsersResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return self.get( "/api/v2/chat/query_banned_users", QueryBannedUsersResponse, @@ -1619,7 +1741,7 @@ def query_banned_users( def query_future_channel_bans( self, payload: Optional[QueryFutureChannelBansPayload] = None ) -> StreamResponse[QueryFutureChannelBansResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return self.get( "/api/v2/chat/query_future_channel_bans", QueryFutureChannelBansResponse, @@ -1702,7 +1824,7 @@ def get_retention_policy_runs( def search( self, payload: Optional[SearchPayload] = None ) -> StreamResponse[SearchResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return self.get( "/api/v2/chat/search", SearchResponse, query_params=query_params ) @@ -1859,6 +1981,7 @@ def query_team_usage_stats( month: Optional[str] = None, next: Optional[str] = None, start_date: Optional[str] = None, + team: Optional[str] = None, ) -> StreamResponse[QueryTeamUsageStatsResponse]: json = QueryTeamUsageStatsRequest( end_date=end_date, @@ -1866,6 +1989,7 @@ def query_team_usage_stats( month=month, next=next, start_date=start_date, + team=team, ).to_dict() return self.post( "/api/v2/chat/stats/team_usage", QueryTeamUsageStatsResponse, json=json @@ -1908,11 +2032,9 @@ def get_thread( member_limit: Optional[int] = None, ) -> StreamResponse[GetThreadResponse]: query_params = build_query_param( - **{ - "reply_limit": reply_limit, - "participant_limit": participant_limit, - "member_limit": member_limit, - } + reply_limit=reply_limit, + participant_limit=participant_limit, + member_limit=member_limit, ) path_params = { "message_id": message_id, @@ -1950,7 +2072,7 @@ def update_thread_partial( def unread_counts( self, user_id: Optional[str] = None ) -> StreamResponse[WrappedUnreadCountsResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return self.get( "/api/v2/chat/unread", WrappedUnreadCountsResponse, diff --git a/getstream/common/async_rest_client.py b/getstream/common/async_rest_client.py index ee55da5a..d5348240 100644 --- a/getstream/common/async_rest_client.py +++ b/getstream/common/async_rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes CommonClient with BaseClient instance @@ -168,9 +168,7 @@ async def list_block_lists( cursor: Optional[str] = None, limit: Optional[int] = None, ) -> StreamResponse[ListBlockListResponse]: - query_params = build_query_param( - **{"team": team, "cursor": cursor, "limit": limit} - ) + query_params = build_query_param(team=team, cursor=cursor, limit=limit) return await self.get( "/api/v2/blocklists", ListBlockListResponse, query_params=query_params ) @@ -222,7 +220,7 @@ async def import_block_list( async def delete_block_list( self, name: str, team: Optional[str] = None, user_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"team": team, "user_id": user_id}) + query_params = build_query_param(team=team, user_id=user_id) path_params = { "name": name, } @@ -237,7 +235,7 @@ async def delete_block_list( async def get_block_list( self, name: str, team: Optional[str] = None ) -> StreamResponse[GetBlockListResponse]: - query_params = build_query_param(**{"team": team}) + query_params = build_query_param(team=team) path_params = { "name": name, } @@ -337,14 +335,14 @@ async def check_sqs( async def delete_device( self, id: str, user_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"id": id, "user_id": user_id}) + query_params = build_query_param(id=id, user_id=user_id) return await self.delete("/api/v2/devices", Response, query_params=query_params) @telemetry.operation_name("getstream.api.common.list_devices") async def list_devices( self, user_id: Optional[str] = None ) -> StreamResponse[ListDevicesResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return await self.get( "/api/v2/devices", ListDevicesResponse, query_params=query_params ) @@ -496,7 +494,7 @@ async def create_import( async def list_import_v2_tasks( self, state: Optional[int] = None ) -> StreamResponse[ListImportV2TasksResponse]: - query_params = build_query_param(**{"state": state}) + query_params = build_query_param(state=state) return await self.get( "/api/v2/imports/v2", ListImportV2TasksResponse, query_params=query_params ) @@ -603,13 +601,44 @@ async def get_import(self, id: str) -> StreamResponse[GetImportResponse]: @telemetry.operation_name("getstream.api.common.get_og") async def get_og(self, url: str) -> StreamResponse[GetOGResponse]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) return await self.get("/api/v2/og", GetOGResponse, query_params=query_params) @telemetry.operation_name("getstream.api.common.list_permissions") async def list_permissions(self) -> StreamResponse[ListPermissionsResponse]: return await self.get("/api/v2/permissions", ListPermissionsResponse) + @telemetry.operation_name("getstream.api.common.create_permission") + async def create_permission( + self, + action: str, + id: str, + name: str, + condition: Dict[str, object], + description: Optional[str] = None, + owner: Optional[bool] = None, + same_team: Optional[bool] = None, + ) -> StreamResponse[Response]: + json = CreatePermissionRequest( + action=action, + id=id, + name=name, + condition=condition, + description=description, + owner=owner, + same_team=same_team, + ).to_dict() + return await self.post("/api/v2/permissions", Response, json=json) + + @telemetry.operation_name("getstream.api.common.delete_permission") + async def delete_permission(self, id: str) -> StreamResponse[Response]: + path_params = { + "id": id, + } + return await self.delete( + "/api/v2/permissions/{id}", Response, path_params=path_params + ) + @telemetry.operation_name("getstream.api.common.get_permission") async def get_permission( self, id: str @@ -623,6 +652,32 @@ async def get_permission( path_params=path_params, ) + @telemetry.operation_name("getstream.api.common.update_permission") + async def update_permission( + self, + id: str, + action: str, + name: str, + condition: Dict[str, object], + description: Optional[str] = None, + owner: Optional[bool] = None, + same_team: Optional[bool] = None, + ) -> StreamResponse[Response]: + path_params = { + "id": id, + } + json = PermissionRequest( + action=action, + name=name, + condition=condition, + description=description, + owner=owner, + same_team=same_team, + ).to_dict() + return await self.put( + "/api/v2/permissions/{id}", Response, path_params=path_params, json=json + ) + @telemetry.operation_name("getstream.api.common.create_poll") async def create_poll( self, @@ -701,7 +756,7 @@ async def query_polls( sort: Optional[List[SortParamRequest]] = None, filter: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryPollsResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) json = QueryPollsRequest( limit=limit, next=next, prev=prev, sort=sort, filter=filter ).to_dict() @@ -716,7 +771,7 @@ async def query_polls( async def delete_poll( self, poll_id: str, user_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "poll_id": poll_id, } @@ -731,7 +786,7 @@ async def delete_poll( async def get_poll( self, poll_id: str, user_id: Optional[str] = None ) -> StreamResponse[PollResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "poll_id": poll_id, } @@ -810,7 +865,7 @@ async def update_poll_option( async def delete_poll_option( self, poll_id: str, option_id: str, user_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "poll_id": poll_id, "option_id": option_id, @@ -847,7 +902,7 @@ async def query_poll_votes( sort: Optional[List[SortParamRequest]] = None, filter: Optional[Dict[str, object]] = None, ) -> StreamResponse[PollVotesResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "poll_id": poll_id, } @@ -903,10 +958,7 @@ async def get_push_templates( self, push_provider_type: str, push_provider_name: Optional[str] = None ) -> StreamResponse[GetPushTemplatesResponse]: query_params = build_query_param( - **{ - "push_provider_type": push_provider_type, - "push_provider_name": push_provider_name, - } + push_provider_type=push_provider_type, push_provider_name=push_provider_name ) return await self.get( "/api/v2/push_templates", @@ -945,14 +997,12 @@ async def get_rate_limits( endpoints: Optional[str] = None, ) -> StreamResponse[GetRateLimitsResponse]: query_params = build_query_param( - **{ - "server_side": server_side, - "android": android, - "ios": ios, - "web": web, - "unity": unity, - "endpoints": endpoints, - } + server_side=server_side, + android=android, + ios=ios, + web=web, + unity=unity, + endpoints=endpoints, ) return await self.get( "/api/v2/rate_limits", GetRateLimitsResponse, query_params=query_params @@ -977,13 +1027,11 @@ async def search_roles( include_global_roles: Optional[bool] = None, ) -> StreamResponse[SearchRolesResponse]: query_params = build_query_param( - **{ - "query": query, - "limit": limit, - "name_gt": name_gt, - "role_type": role_type, - "include_global_roles": include_global_roles, - } + query=query, + limit=limit, + name_gt=name_gt, + role_type=role_type, + include_global_roles=include_global_roles, ) return await self.get( "/api/v2/roles/search", SearchRolesResponse, query_params=query_params @@ -1009,7 +1057,7 @@ async def get_task(self, id: str) -> StreamResponse[GetTaskResponse]: @telemetry.operation_name("getstream.api.common.delete_file") async def delete_file(self, url: Optional[str] = None) -> StreamResponse[Response]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) return await self.delete( "/api/v2/uploads/file", Response, query_params=query_params ) @@ -1023,7 +1071,7 @@ async def upload_file( @telemetry.operation_name("getstream.api.common.delete_image") async def delete_image(self, url: Optional[str] = None) -> StreamResponse[Response]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) return await self.delete( "/api/v2/uploads/image", Response, query_params=query_params ) @@ -1049,12 +1097,7 @@ async def list_user_groups( team_id: Optional[str] = None, ) -> StreamResponse[ListUserGroupsResponse]: query_params = build_query_param( - **{ - "limit": limit, - "id_gt": id_gt, - "created_at_gt": created_at_gt, - "team_id": team_id, - } + limit=limit, id_gt=id_gt, created_at_gt=created_at_gt, team_id=team_id ) return await self.get( "/api/v2/usergroups", ListUserGroupsResponse, query_params=query_params @@ -1088,13 +1131,7 @@ async def search_user_groups( team_id: Optional[str] = None, ) -> StreamResponse[SearchUserGroupsResponse]: query_params = build_query_param( - **{ - "query": query, - "limit": limit, - "name_gt": name_gt, - "id_gt": id_gt, - "team_id": team_id, - } + query=query, limit=limit, name_gt=name_gt, id_gt=id_gt, team_id=team_id ) return await self.get( "/api/v2/usergroups/search", @@ -1106,7 +1143,7 @@ async def search_user_groups( async def delete_user_group( self, id: str, team_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"team_id": team_id}) + query_params = build_query_param(team_id=team_id) path_params = { "id": id, } @@ -1121,7 +1158,7 @@ async def delete_user_group( async def get_user_group( self, id: str, team_id: Optional[str] = None ) -> StreamResponse[GetUserGroupResponse]: - query_params = build_query_param(**{"team_id": team_id}) + query_params = build_query_param(team_id=team_id) path_params = { "id": id, } @@ -1195,7 +1232,7 @@ async def remove_user_group_members( async def query_users( self, payload: Optional[QueryUsersPayload] = None ) -> StreamResponse[QueryUsersResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return await self.get( "/api/v2/users", QueryUsersResponse, query_params=query_params ) @@ -1218,7 +1255,7 @@ async def update_users( async def get_blocked_users( self, user_id: Optional[str] = None ) -> StreamResponse[GetBlockedUsersResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return await self.get( "/api/v2/users/block", GetBlockedUsersResponse, query_params=query_params ) @@ -1281,7 +1318,7 @@ async def delete_users( async def get_user_live_locations( self, user_id: Optional[str] = None ) -> StreamResponse[SharedLocationsResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return await self.get( "/api/v2/users/live_locations", SharedLocationsResponse, @@ -1297,7 +1334,7 @@ async def update_live_location( longitude: Optional[float] = None, user_id: Optional[str] = None, ) -> StreamResponse[SharedLocationResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) json = UpdateLiveLocationRequest( message_id=message_id, end_at=end_at, latitude=latitude, longitude=longitude ).to_dict() diff --git a/getstream/common/rest_client.py b/getstream/common/rest_client.py index 41987bb2..50e94f91 100644 --- a/getstream/common/rest_client.py +++ b/getstream/common/rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes CommonClient with BaseClient instance @@ -168,9 +168,7 @@ def list_block_lists( cursor: Optional[str] = None, limit: Optional[int] = None, ) -> StreamResponse[ListBlockListResponse]: - query_params = build_query_param( - **{"team": team, "cursor": cursor, "limit": limit} - ) + query_params = build_query_param(team=team, cursor=cursor, limit=limit) return self.get( "/api/v2/blocklists", ListBlockListResponse, query_params=query_params ) @@ -222,7 +220,7 @@ def import_block_list( def delete_block_list( self, name: str, team: Optional[str] = None, user_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"team": team, "user_id": user_id}) + query_params = build_query_param(team=team, user_id=user_id) path_params = { "name": name, } @@ -237,7 +235,7 @@ def delete_block_list( def get_block_list( self, name: str, team: Optional[str] = None ) -> StreamResponse[GetBlockListResponse]: - query_params = build_query_param(**{"team": team}) + query_params = build_query_param(team=team) path_params = { "name": name, } @@ -337,14 +335,14 @@ def check_sqs( def delete_device( self, id: str, user_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"id": id, "user_id": user_id}) + query_params = build_query_param(id=id, user_id=user_id) return self.delete("/api/v2/devices", Response, query_params=query_params) @telemetry.operation_name("getstream.api.common.list_devices") def list_devices( self, user_id: Optional[str] = None ) -> StreamResponse[ListDevicesResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return self.get( "/api/v2/devices", ListDevicesResponse, query_params=query_params ) @@ -488,7 +486,7 @@ def create_import( def list_import_v2_tasks( self, state: Optional[int] = None ) -> StreamResponse[ListImportV2TasksResponse]: - query_params = build_query_param(**{"state": state}) + query_params = build_query_param(state=state) return self.get( "/api/v2/imports/v2", ListImportV2TasksResponse, query_params=query_params ) @@ -591,13 +589,44 @@ def get_import(self, id: str) -> StreamResponse[GetImportResponse]: @telemetry.operation_name("getstream.api.common.get_og") def get_og(self, url: str) -> StreamResponse[GetOGResponse]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) return self.get("/api/v2/og", GetOGResponse, query_params=query_params) @telemetry.operation_name("getstream.api.common.list_permissions") def list_permissions(self) -> StreamResponse[ListPermissionsResponse]: return self.get("/api/v2/permissions", ListPermissionsResponse) + @telemetry.operation_name("getstream.api.common.create_permission") + def create_permission( + self, + action: str, + id: str, + name: str, + condition: Dict[str, object], + description: Optional[str] = None, + owner: Optional[bool] = None, + same_team: Optional[bool] = None, + ) -> StreamResponse[Response]: + json = CreatePermissionRequest( + action=action, + id=id, + name=name, + condition=condition, + description=description, + owner=owner, + same_team=same_team, + ).to_dict() + return self.post("/api/v2/permissions", Response, json=json) + + @telemetry.operation_name("getstream.api.common.delete_permission") + def delete_permission(self, id: str) -> StreamResponse[Response]: + path_params = { + "id": id, + } + return self.delete( + "/api/v2/permissions/{id}", Response, path_params=path_params + ) + @telemetry.operation_name("getstream.api.common.get_permission") def get_permission(self, id: str) -> StreamResponse[GetCustomPermissionResponse]: path_params = { @@ -609,6 +638,32 @@ def get_permission(self, id: str) -> StreamResponse[GetCustomPermissionResponse] path_params=path_params, ) + @telemetry.operation_name("getstream.api.common.update_permission") + def update_permission( + self, + id: str, + action: str, + name: str, + condition: Dict[str, object], + description: Optional[str] = None, + owner: Optional[bool] = None, + same_team: Optional[bool] = None, + ) -> StreamResponse[Response]: + path_params = { + "id": id, + } + json = PermissionRequest( + action=action, + name=name, + condition=condition, + description=description, + owner=owner, + same_team=same_team, + ).to_dict() + return self.put( + "/api/v2/permissions/{id}", Response, path_params=path_params, json=json + ) + @telemetry.operation_name("getstream.api.common.create_poll") def create_poll( self, @@ -687,7 +742,7 @@ def query_polls( sort: Optional[List[SortParamRequest]] = None, filter: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryPollsResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) json = QueryPollsRequest( limit=limit, next=next, prev=prev, sort=sort, filter=filter ).to_dict() @@ -702,7 +757,7 @@ def query_polls( def delete_poll( self, poll_id: str, user_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "poll_id": poll_id, } @@ -717,7 +772,7 @@ def delete_poll( def get_poll( self, poll_id: str, user_id: Optional[str] = None ) -> StreamResponse[PollResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "poll_id": poll_id, } @@ -796,7 +851,7 @@ def update_poll_option( def delete_poll_option( self, poll_id: str, option_id: str, user_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "poll_id": poll_id, "option_id": option_id, @@ -833,7 +888,7 @@ def query_poll_votes( sort: Optional[List[SortParamRequest]] = None, filter: Optional[Dict[str, object]] = None, ) -> StreamResponse[PollVotesResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "poll_id": poll_id, } @@ -887,10 +942,7 @@ def get_push_templates( self, push_provider_type: str, push_provider_name: Optional[str] = None ) -> StreamResponse[GetPushTemplatesResponse]: query_params = build_query_param( - **{ - "push_provider_type": push_provider_type, - "push_provider_name": push_provider_name, - } + push_provider_type=push_provider_type, push_provider_name=push_provider_name ) return self.get( "/api/v2/push_templates", @@ -929,14 +981,12 @@ def get_rate_limits( endpoints: Optional[str] = None, ) -> StreamResponse[GetRateLimitsResponse]: query_params = build_query_param( - **{ - "server_side": server_side, - "android": android, - "ios": ios, - "web": web, - "unity": unity, - "endpoints": endpoints, - } + server_side=server_side, + android=android, + ios=ios, + web=web, + unity=unity, + endpoints=endpoints, ) return self.get( "/api/v2/rate_limits", GetRateLimitsResponse, query_params=query_params @@ -961,13 +1011,11 @@ def search_roles( include_global_roles: Optional[bool] = None, ) -> StreamResponse[SearchRolesResponse]: query_params = build_query_param( - **{ - "query": query, - "limit": limit, - "name_gt": name_gt, - "role_type": role_type, - "include_global_roles": include_global_roles, - } + query=query, + limit=limit, + name_gt=name_gt, + role_type=role_type, + include_global_roles=include_global_roles, ) return self.get( "/api/v2/roles/search", SearchRolesResponse, query_params=query_params @@ -989,7 +1037,7 @@ def get_task(self, id: str) -> StreamResponse[GetTaskResponse]: @telemetry.operation_name("getstream.api.common.delete_file") def delete_file(self, url: Optional[str] = None) -> StreamResponse[Response]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) return self.delete("/api/v2/uploads/file", Response, query_params=query_params) @telemetry.operation_name("getstream.api.common.upload_file") @@ -1001,7 +1049,7 @@ def upload_file( @telemetry.operation_name("getstream.api.common.delete_image") def delete_image(self, url: Optional[str] = None) -> StreamResponse[Response]: - query_params = build_query_param(**{"url": url}) + query_params = build_query_param(url=url) return self.delete("/api/v2/uploads/image", Response, query_params=query_params) @telemetry.operation_name("getstream.api.common.upload_image") @@ -1025,12 +1073,7 @@ def list_user_groups( team_id: Optional[str] = None, ) -> StreamResponse[ListUserGroupsResponse]: query_params = build_query_param( - **{ - "limit": limit, - "id_gt": id_gt, - "created_at_gt": created_at_gt, - "team_id": team_id, - } + limit=limit, id_gt=id_gt, created_at_gt=created_at_gt, team_id=team_id ) return self.get( "/api/v2/usergroups", ListUserGroupsResponse, query_params=query_params @@ -1064,13 +1107,7 @@ def search_user_groups( team_id: Optional[str] = None, ) -> StreamResponse[SearchUserGroupsResponse]: query_params = build_query_param( - **{ - "query": query, - "limit": limit, - "name_gt": name_gt, - "id_gt": id_gt, - "team_id": team_id, - } + query=query, limit=limit, name_gt=name_gt, id_gt=id_gt, team_id=team_id ) return self.get( "/api/v2/usergroups/search", @@ -1082,7 +1119,7 @@ def search_user_groups( def delete_user_group( self, id: str, team_id: Optional[str] = None ) -> StreamResponse[Response]: - query_params = build_query_param(**{"team_id": team_id}) + query_params = build_query_param(team_id=team_id) path_params = { "id": id, } @@ -1097,7 +1134,7 @@ def delete_user_group( def get_user_group( self, id: str, team_id: Optional[str] = None ) -> StreamResponse[GetUserGroupResponse]: - query_params = build_query_param(**{"team_id": team_id}) + query_params = build_query_param(team_id=team_id) path_params = { "id": id, } @@ -1171,7 +1208,7 @@ def remove_user_group_members( def query_users( self, payload: Optional[QueryUsersPayload] = None ) -> StreamResponse[QueryUsersResponse]: - query_params = build_query_param(**{"payload": payload}) + query_params = build_query_param(payload=payload) return self.get("/api/v2/users", QueryUsersResponse, query_params=query_params) @telemetry.operation_name("getstream.api.common.update_users_partial") @@ -1192,7 +1229,7 @@ def update_users( def get_blocked_users( self, user_id: Optional[str] = None ) -> StreamResponse[GetBlockedUsersResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return self.get( "/api/v2/users/block", GetBlockedUsersResponse, query_params=query_params ) @@ -1253,7 +1290,7 @@ def delete_users( def get_user_live_locations( self, user_id: Optional[str] = None ) -> StreamResponse[SharedLocationsResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return self.get( "/api/v2/users/live_locations", SharedLocationsResponse, @@ -1269,7 +1306,7 @@ def update_live_location( longitude: Optional[float] = None, user_id: Optional[str] = None, ) -> StreamResponse[SharedLocationResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) json = UpdateLiveLocationRequest( message_id=message_id, end_at=end_at, latitude=latitude, longitude=longitude ).to_dict() diff --git a/getstream/feeds/feeds.py b/getstream/feeds/feeds.py index 2ad55e8a..3ad3d7b5 100644 --- a/getstream/feeds/feeds.py +++ b/getstream/feeds/feeds.py @@ -174,6 +174,13 @@ def change_feed_visibility( self._sync_from_response(response.data) return response + def get_feed_counts(self) -> StreamResponse[GetFeedCountsResponse]: + response = self.client.get_feed_counts( + feed_group_id=self.feed_group, feed_id=self.id + ) + self._sync_from_response(response.data) + return response + def update_feed_members( self, operation: str, diff --git a/getstream/feeds/rest_client.py b/getstream/feeds/rest_client.py index c762b7d2..33469a2e 100644 --- a/getstream/feeds/rest_client.py +++ b/getstream/feeds/rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes FeedsClient with BaseClient instance @@ -180,7 +180,7 @@ def query_activities( user: Optional[UserRequest] = None, ) -> StreamResponse[QueryActivitiesResponse]: query_params = build_query_param( - **{"language": language, "translate_text": translate_text} + language=language, translate_text=translate_text ) json = QueryActivitiesRequest( enrich_own_fields=enrich_own_fields, @@ -237,7 +237,7 @@ def delete_bookmark( folder_id: Optional[str] = None, user_id: Optional[str] = None, ) -> StreamResponse[DeleteBookmarkResponse]: - query_params = build_query_param(**{"folder_id": folder_id, "user_id": user_id}) + query_params = build_query_param(folder_id=folder_id, user_id=user_id) path_params = { "activity_id": activity_id, } @@ -360,7 +360,7 @@ def delete_poll_vote( vote_id: str, user_id: Optional[str] = None, ) -> StreamResponse[PollVoteResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "activity_id": activity_id, "poll_id": poll_id, @@ -442,10 +442,7 @@ def delete_activity_reaction( user_id: Optional[str] = None, ) -> StreamResponse[DeleteActivityReactionResponse]: query_params = build_query_param( - **{ - "delete_notification_activity": delete_notification_activity, - "user_id": user_id, - } + delete_notification_activity=delete_notification_activity, user_id=user_id ) path_params = { "activity_id": activity_id, @@ -466,7 +463,7 @@ def query_activity_shares( prev: Optional[str] = None, next: Optional[str] = None, ) -> StreamResponse[QueryActivitySharesResponse]: - query_params = build_query_param(**{"limit": limit, "prev": prev, "next": next}) + query_params = build_query_param(limit=limit, prev=prev, next=next) path_params = { "activity_id": activity_id, } @@ -485,10 +482,8 @@ def delete_activity( delete_notification_activity: Optional[bool] = None, ) -> StreamResponse[DeleteActivityResponse]: query_params = build_query_param( - **{ - "hard_delete": hard_delete, - "delete_notification_activity": delete_notification_activity, - } + hard_delete=hard_delete, + delete_notification_activity=delete_notification_activity, ) path_params = { "id": id, @@ -511,13 +506,11 @@ def get_activity( translate_text: Optional[bool] = None, ) -> StreamResponse[GetActivityResponse]: query_params = build_query_param( - **{ - "comment_sort": comment_sort, - "comment_limit": comment_limit, - "user_id": user_id, - "language": language, - "translate_text": translate_text, - } + comment_sort=comment_sort, + comment_limit=comment_limit, + user_id=user_id, + language=language, + translate_text=translate_text, ) path_params = { "id": id, @@ -635,7 +628,7 @@ def restore_activity( user_id: Optional[str] = None, user: Optional[UserRequest] = None, ) -> StreamResponse[RestoreActivityResponse]: - query_params = build_query_param(**{"enrich_own_fields": enrich_own_fields}) + query_params = build_query_param(enrich_own_fields=enrich_own_fields) path_params = { "id": id, } @@ -731,7 +724,7 @@ def query_bookmarks( user: Optional[UserRequest] = None, ) -> StreamResponse[QueryBookmarksResponse]: query_params = build_query_param( - **{"language": language, "translate_text": translate_text} + language=language, translate_text=translate_text ) json = QueryBookmarksRequest( enrich_own_fields=enrich_own_fields, @@ -754,7 +747,7 @@ def query_bookmarks( def delete_collections( self, collection_refs: List[str] ) -> StreamResponse[DeleteCollectionsResponse]: - query_params = build_query_param(**{"collection_refs": collection_refs}) + query_params = build_query_param(collection_refs=collection_refs) return self.delete( "/api/v2/feeds/collections", DeleteCollectionsResponse, @@ -766,7 +759,7 @@ def read_collections( self, user_id: Optional[str] = None, collection_refs: Optional[List[str]] = None ) -> StreamResponse[ReadCollectionsResponse]: query_params = build_query_param( - **{"user_id": user_id, "collection_refs": collection_refs} + user_id=user_id, collection_refs=collection_refs ) return self.get( "/api/v2/feeds/collections", @@ -852,20 +845,18 @@ def get_comments( next: Optional[str] = None, ) -> StreamResponse[GetCommentsResponse]: query_params = build_query_param( - **{ - "object_id": object_id, - "object_type": object_type, - "depth": depth, - "sort": sort, - "replies_limit": replies_limit, - "id_around": id_around, - "language": language, - "translate_text": translate_text, - "user_id": user_id, - "limit": limit, - "prev": prev, - "next": next, - } + object_id=object_id, + object_type=object_type, + depth=depth, + sort=sort, + replies_limit=replies_limit, + id_around=id_around, + language=language, + translate_text=translate_text, + user_id=user_id, + limit=limit, + prev=prev, + next=next, ) return self.get( "/api/v2/feeds/comments", GetCommentsResponse, query_params=query_params @@ -933,7 +924,7 @@ def query_comments( translate_text: Optional[bool] = None, ) -> StreamResponse[QueryCommentsResponse]: query_params = build_query_param( - **{"language": language, "translate_text": translate_text} + language=language, translate_text=translate_text ) json = QueryCommentsRequest( filter=filter, @@ -987,7 +978,7 @@ def delete_comment_bookmark( folder_id: Optional[str] = None, user_id: Optional[str] = None, ) -> StreamResponse[DeleteCommentBookmarkResponse]: - query_params = build_query_param(**{"folder_id": folder_id, "user_id": user_id}) + query_params = build_query_param(folder_id=folder_id, user_id=user_id) path_params = { "comment_id": comment_id, } @@ -1062,10 +1053,8 @@ def delete_comment( delete_notification_activity: Optional[bool] = None, ) -> StreamResponse[DeleteCommentResponse]: query_params = build_query_param( - **{ - "hard_delete": hard_delete, - "delete_notification_activity": delete_notification_activity, - } + hard_delete=hard_delete, + delete_notification_activity=delete_notification_activity, ) path_params = { "id": id, @@ -1086,11 +1075,7 @@ def get_comment( translate_text: Optional[bool] = None, ) -> StreamResponse[GetCommentResponse]: query_params = build_query_param( - **{ - "user_id": user_id, - "language": language, - "translate_text": translate_text, - } + user_id=user_id, language=language, translate_text=translate_text ) path_params = { "id": id, @@ -1243,10 +1228,7 @@ def delete_comment_reaction( user_id: Optional[str] = None, ) -> StreamResponse[DeleteCommentReactionResponse]: query_params = build_query_param( - **{ - "delete_notification_activity": delete_notification_activity, - "user_id": user_id, - } + delete_notification_activity=delete_notification_activity, user_id=user_id ) path_params = { "id": id, @@ -1275,18 +1257,16 @@ def get_comment_replies( next: Optional[str] = None, ) -> StreamResponse[GetCommentRepliesResponse]: query_params = build_query_param( - **{ - "depth": depth, - "sort": sort, - "replies_limit": replies_limit, - "id_around": id_around, - "language": language, - "translate_text": translate_text, - "user_id": user_id, - "limit": limit, - "prev": prev, - "next": next, - } + depth=depth, + sort=sort, + replies_limit=replies_limit, + id_around=id_around, + language=language, + translate_text=translate_text, + user_id=user_id, + limit=limit, + prev=prev, + next=next, ) path_params = { "id": id, @@ -1332,9 +1312,7 @@ def translate_comment( def list_feed_groups( self, include_soft_deleted: Optional[bool] = None ) -> StreamResponse[ListFeedGroupsResponse]: - query_params = build_query_param( - **{"include_soft_deleted": include_soft_deleted} - ) + query_params = build_query_param(include_soft_deleted=include_soft_deleted) return self.get( "/api/v2/feeds/feed_groups", ListFeedGroupsResponse, @@ -1382,10 +1360,7 @@ def delete_feed( purge_user_activities: Optional[bool] = None, ) -> StreamResponse[DeleteFeedResponse]: query_params = build_query_param( - **{ - "hard_delete": hard_delete, - "purge_user_activities": purge_user_activities, - } + hard_delete=hard_delete, purge_user_activities=purge_user_activities ) path_params = { "feed_group_id": feed_group_id, @@ -1425,7 +1400,7 @@ def get_or_create_feed( user: Optional[UserRequest] = None, ) -> StreamResponse[GetOrCreateFeedResponse]: query_params = build_query_param( - **{"language": language, "translate_text": translate_text} + language=language, translate_text=translate_text ) path_params = { "feed_group_id": feed_group_id, @@ -1537,7 +1512,7 @@ def unpin_activity( user_id: Optional[str] = None, ) -> StreamResponse[UnpinActivityResponse]: query_params = build_query_param( - **{"enrich_own_fields": enrich_own_fields, "user_id": user_id} + enrich_own_fields=enrich_own_fields, user_id=user_id ) path_params = { "feed_group_id": feed_group_id, @@ -1598,6 +1573,20 @@ def change_feed_visibility( json=json, ) + @telemetry.operation_name("getstream.api.feeds.get_feed_counts") + def get_feed_counts( + self, feed_group_id: str, feed_id: str + ) -> StreamResponse[GetFeedCountsResponse]: + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + } + return self.get( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/counts", + GetFeedCountsResponse, + path_params=path_params, + ) + @telemetry.operation_name("getstream.api.feeds.update_feed_members") def update_feed_members( self, @@ -1703,7 +1692,7 @@ def query_pinned_activities( filter: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryPinnedActivitiesResponse]: query_params = build_query_param( - **{"language": language, "translate_text": translate_text} + language=language, translate_text=translate_text ) path_params = { "feed_group_id": feed_group_id, @@ -1732,7 +1721,7 @@ def get_follow_suggestions( limit: Optional[int] = None, user_id: Optional[str] = None, ) -> StreamResponse[GetFollowSuggestionsResponse]: - query_params = build_query_param(**{"limit": limit, "user_id": user_id}) + query_params = build_query_param(limit=limit, user_id=user_id) path_params = { "feed_group_id": feed_group_id, } @@ -1760,7 +1749,7 @@ def restore_feed_group( def delete_feed_group( self, id: str, hard_delete: Optional[bool] = None ) -> StreamResponse[DeleteFeedGroupResponse]: - query_params = build_query_param(**{"hard_delete": hard_delete}) + query_params = build_query_param(hard_delete=hard_delete) path_params = { "id": id, } @@ -1775,9 +1764,7 @@ def delete_feed_group( def get_feed_group( self, id: str, include_soft_deleted: Optional[bool] = None ) -> StreamResponse[GetFeedGroupResponse]: - query_params = build_query_param( - **{"include_soft_deleted": include_soft_deleted} - ) + query_params = build_query_param(include_soft_deleted=include_soft_deleted) path_params = { "id": id, } @@ -2055,14 +2042,12 @@ def get_feeds_rate_limits( server_side: Optional[bool] = None, ) -> StreamResponse[GetFeedsRateLimitsResponse]: query_params = build_query_param( - **{ - "endpoints": endpoints, - "android": android, - "ios": ios, - "web": web, - "unity": unity, - "server_side": server_side, - } + endpoints=endpoints, + android=android, + ios=ios, + web=web, + unity=unity, + server_side=server_side, ) return self.get( "/api/v2/feeds/feeds/rate_limits", @@ -2238,11 +2223,9 @@ def unfollow( enrich_own_fields: Optional[bool] = None, ) -> StreamResponse[UnfollowResponse]: query_params = build_query_param( - **{ - "delete_notification_activity": delete_notification_activity, - "keep_history": keep_history, - "enrich_own_fields": enrich_own_fields, - } + delete_notification_activity=delete_notification_activity, + keep_history=keep_history, + enrich_own_fields=enrich_own_fields, ) path_params = { "source": source, @@ -2440,7 +2423,7 @@ def export_feed_user_data( def get_user_interests( self, user_id: str, limit: Optional[int] = None ) -> StreamResponse[GetUserInterestsResponse]: - query_params = build_query_param(**{"limit": limit}) + query_params = build_query_param(limit=limit) path_params = { "user_id": user_id, } diff --git a/getstream/models/__init__.py b/getstream/models/__init__.py index 1005b075..2efc3bb0 100644 --- a/getstream/models/__init__.py +++ b/getstream/models/__init__.py @@ -1,20 +1,22 @@ # Code generated by GetStream internal OpenAPI code generator. DO NOT EDIT. from dataclasses import dataclass from dataclasses import field as dc_field +from datetime import datetime +from typing import Dict, Final, List, NewType, Optional # noqa: F401, UP035 + from dataclasses_json import DataClassJsonMixin from dataclasses_json import config as dc_config -from datetime import datetime from marshmallow import fields -from typing import List, Dict, Optional, Final, NewType -from getstream.utils import encode_datetime, datetime_from_unix_ns + +from getstream.utils import datetime_from_unix_ns, encode_datetime @dataclass class AIAudioConfigRequest(DataClassJsonMixin): - profile: Optional[str] = dc_field( + profile: str | None = dc_field( default=None, metadata=dc_config(field_name="profile") ) - rules: "Optional[List[BodyguardRule]]" = dc_field( + rules: "list[BodyguardRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -23,21 +25,19 @@ class AIAudioConfigRequest(DataClassJsonMixin): class AIAudioConfigResponse(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) profile: str = dc_field(metadata=dc_config(field_name="profile")) - rules: "List[BodyguardRule]" = dc_field(metadata=dc_config(field_name="rules")) + rules: "list[BodyguardRule]" = dc_field(metadata=dc_config(field_name="rules")) @dataclass class AIImageConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - enabled: Optional[bool] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - ocr_rules: "Optional[List[OCRRule]]" = dc_field( + ocr_rules: "list[OCRRule] | None" = dc_field( default=None, metadata=dc_config(field_name="ocr_rules") ) - rules: "Optional[List[AWSRekognitionRule]]" = dc_field( + rules: "list[AWSRekognitionRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -52,32 +52,28 @@ class AIImageLabelDefinition(DataClassJsonMixin): @dataclass class AITextConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - enabled: Optional[bool] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - profile: Optional[str] = dc_field( + profile: str | None = dc_field( default=None, metadata=dc_config(field_name="profile") ) - rules: "Optional[List[BodyguardRule]]" = dc_field( + rules: "list[BodyguardRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) - severity_rules: "Optional[List[BodyguardSeverityRule]]" = dc_field( + severity_rules: "list[BodyguardSeverityRule] | None" = dc_field( default=None, metadata=dc_config(field_name="severity_rules") ) @dataclass class AIVideoConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - enabled: Optional[bool] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - rules: "Optional[List[AWSRekognitionRule]]" = dc_field( + rules: "list[AWSRekognitionRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -95,45 +91,43 @@ class APIError(DataClassJsonMixin): # Response HTTP status code status_code: int = dc_field(metadata=dc_config(field_name="StatusCode")) # Additional error-specific information - details: "List[int]" = dc_field(metadata=dc_config(field_name="details")) + details: "list[int]" = dc_field(metadata=dc_config(field_name="details")) # Flag that indicates if the error is unrecoverable, requests that return unrecoverable errors should not be retried, this error only applies to the request that caused it - unrecoverable: Optional[bool] = dc_field( + unrecoverable: bool | None = dc_field( default=None, metadata=dc_config(field_name="unrecoverable") ) # Additional error info - exception_fields: "Optional[Dict[str, str]]" = dc_field( + exception_fields: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="exception_fields") ) @dataclass class APNConfig(DataClassJsonMixin): - auth_key: Optional[str] = dc_field( + auth_key: str | None = dc_field( default=None, metadata=dc_config(field_name="auth_key") ) - auth_type: Optional[str] = dc_field( + auth_type: str | None = dc_field( default=None, metadata=dc_config(field_name="auth_type") ) - bundle_id: Optional[str] = dc_field( + bundle_id: str | None = dc_field( default=None, metadata=dc_config(field_name="bundle_id") ) - development: Optional[bool] = dc_field( + development: bool | None = dc_field( default=None, metadata=dc_config(field_name="development") ) - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="Disabled") ) - host: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="host")) - key_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="key_id") - ) - notification_template: Optional[str] = dc_field( + host: str | None = dc_field(default=None, metadata=dc_config(field_name="host")) + key_id: str | None = dc_field(default=None, metadata=dc_config(field_name="key_id")) + notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="notification_template") ) - p12_cert: Optional[str] = dc_field( + p12_cert: str | None = dc_field( default=None, metadata=dc_config(field_name="p12_cert") ) - team_id: Optional[str] = dc_field( + team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="team_id") ) @@ -142,26 +136,24 @@ class APNConfig(DataClassJsonMixin): class APNConfigFields(DataClassJsonMixin): development: bool = dc_field(metadata=dc_config(field_name="development")) enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - auth_key: Optional[str] = dc_field( + auth_key: str | None = dc_field( default=None, metadata=dc_config(field_name="auth_key") ) - auth_type: Optional[str] = dc_field( + auth_type: str | None = dc_field( default=None, metadata=dc_config(field_name="auth_type") ) - bundle_id: Optional[str] = dc_field( + bundle_id: str | None = dc_field( default=None, metadata=dc_config(field_name="bundle_id") ) - host: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="host")) - key_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="key_id") - ) - notification_template: Optional[str] = dc_field( + host: str | None = dc_field(default=None, metadata=dc_config(field_name="host")) + key_id: str | None = dc_field(default=None, metadata=dc_config(field_name="key_id")) + notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="notification_template") ) - p12_cert: Optional[str] = dc_field( + p12_cert: str | None = dc_field( default=None, metadata=dc_config(field_name="p12_cert") ) - team_id: Optional[str] = dc_field( + team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="team_id") ) @@ -170,36 +162,30 @@ class APNConfigFields(DataClassJsonMixin): class APNS(DataClassJsonMixin): body: str = dc_field(metadata=dc_config(field_name="body")) title: str = dc_field(metadata=dc_config(field_name="title")) - content_available: Optional[int] = dc_field( + content_available: int | None = dc_field( default=None, metadata=dc_config(field_name="content-available") ) - mutable_content: Optional[int] = dc_field( + mutable_content: int | None = dc_field( default=None, metadata=dc_config(field_name="mutable-content") ) - sound: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sound") - ) - data: Optional[Dict[str, object]] = dc_field( + sound: str | None = dc_field(default=None, metadata=dc_config(field_name="sound")) + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) @dataclass class APNSPayload(DataClassJsonMixin): - body: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="body")) - content_available: Optional[int] = dc_field( + body: str | None = dc_field(default=None, metadata=dc_config(field_name="body")) + content_available: int | None = dc_field( default=None, metadata=dc_config(field_name="content-available") ) - mutable_content: Optional[int] = dc_field( + mutable_content: int | None = dc_field( default=None, metadata=dc_config(field_name="mutable-content") ) - sound: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sound") - ) - title: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="title") - ) - data: Optional[Dict[str, object]] = dc_field( + sound: str | None = dc_field(default=None, metadata=dc_config(field_name="sound")) + title: str | None = dc_field(default=None, metadata=dc_config(field_name="title")) + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) @@ -209,7 +195,7 @@ class AWSRekognitionRule(DataClassJsonMixin): action: str = dc_field(metadata=dc_config(field_name="action")) label: str = dc_field(metadata=dc_config(field_name="label")) min_confidence: float = dc_field(metadata=dc_config(field_name="min_confidence")) - subclassifications: Optional[Dict[str, object]] = dc_field( + subclassifications: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="subclassifications") ) @@ -222,11 +208,11 @@ class AbsentMetric(DataClassJsonMixin): @dataclass class AcceptFeedMemberInviteRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -244,7 +230,7 @@ class AcceptFollowRequest(DataClassJsonMixin): # Fully qualified ID of the target feed target: str = dc_field(metadata=dc_config(field_name="target")) # Optional role for the follower in the follow relationship - follower_role: Optional[str] = dc_field( + follower_role: str | None = dc_field( default=None, metadata=dc_config(field_name="follower_role") ) @@ -260,12 +246,8 @@ class Action(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) text: str = dc_field(metadata=dc_config(field_name="text")) type: str = dc_field(metadata=dc_config(field_name="type")) - style: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="style") - ) - value: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="value") - ) + style: str | None = dc_field(default=None, metadata=dc_config(field_name="style")) + value: str | None = dc_field(default=None, metadata=dc_config(field_name="value")) @dataclass @@ -291,41 +273,39 @@ class ActionLogResponse(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) # ID of the user who performed the action user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - ai_providers: List[str] = dc_field(metadata=dc_config(field_name="ai_providers")) + ai_providers: list[str] = dc_field(metadata=dc_config(field_name="ai_providers")) # Additional metadata about the action - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - review_queue_item: "Optional[ReviewQueueItemResponse]" = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + review_queue_item: "ReviewQueueItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="review_queue_item") ) # User response object - target_user: "Optional[UserResponse]" = dc_field( + target_user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="target_user") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class ActionSequence(DataClassJsonMixin): - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") - ) - blur: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="blur")) - cooldown_period: Optional[int] = dc_field( + action: str | None = dc_field(default=None, metadata=dc_config(field_name="action")) + blur: bool | None = dc_field(default=None, metadata=dc_config(field_name="blur")) + cooldown_period: int | None = dc_field( default=None, metadata=dc_config(field_name="cooldown_period") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[int] = dc_field( + time_window: int | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - warning: Optional[bool] = dc_field( + warning: bool | None = dc_field( default=None, metadata=dc_config(field_name="warning") ) - warning_text: Optional[str] = dc_field( + warning_text: str | None = dc_field( default=None, metadata=dc_config(field_name="warning_text") ) @@ -352,13 +332,13 @@ class ActiveCallsLatencyStats(DataClassJsonMixin): @dataclass class ActiveCallsMetrics(DataClassJsonMixin): - join_call_api: "Optional[JoinCallAPIMetrics]" = dc_field( + join_call_api: "JoinCallAPIMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="join_call_api") ) - publishers: "Optional[PublishersMetrics]" = dc_field( + publishers: "PublishersMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="publishers") ) - subscribers: "Optional[SubscribersMetrics]" = dc_field( + subscribers: "SubscribersMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="subscribers") ) @@ -394,15 +374,15 @@ class ActivityAddedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.activity.added" in this case type: str = dc_field( default="feeds.activity.added", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -411,7 +391,7 @@ class ActivityAddedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -429,15 +409,15 @@ class ActivityDeletedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.activity.deleted" in this case type: str = dc_field( default="feeds.activity.deleted", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -446,7 +426,7 @@ class ActivityDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -465,12 +445,12 @@ class ActivityFeedbackEvent(DataClassJsonMixin): activity_feedback: "ActivityFeedbackEventPayload" = dc_field( metadata=dc_config(field_name="activity_feedback") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.activity.feedback" in this case type: str = dc_field( default="feeds.activity.feedback", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -479,7 +459,7 @@ class ActivityFeedbackEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -517,20 +497,20 @@ class ActivityFeedbackEventPayload(DataClassJsonMixin): @dataclass class ActivityFeedbackRequest(DataClassJsonMixin): # Whether to hide this activity - hide: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="hide")) + hide: bool | None = dc_field(default=None, metadata=dc_config(field_name="hide")) # Whether to show less content like this - show_less: Optional[bool] = dc_field( + show_less: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_less") ) # Whether to show more content like this - show_more: Optional[bool] = dc_field( + show_more: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_more") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -545,7 +525,7 @@ class ActivityFeedbackResponse(DataClassJsonMixin): @dataclass class ActivityFilterConfig(DataClassJsonMixin): # When true, activities authored by the feed owner are excluded from feed reads - exclude_owner_activities: Optional[bool] = dc_field( + exclude_owner_activities: bool | None = dc_field( default=None, metadata=dc_config(field_name="exclude_owner_activities") ) @@ -562,23 +542,23 @@ class ActivityMarkEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.activity.marked" in this case type: str = dc_field( default="feeds.activity.marked", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) # Whether all activities were marked as read - mark_all_read: Optional[bool] = dc_field( + mark_all_read: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_all_read") ) # Whether all activities were marked as seen - mark_all_seen: Optional[bool] = dc_field( + mark_all_seen: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_all_seen") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -588,18 +568,18 @@ class ActivityMarkEvent(DataClassJsonMixin): ), ) # The IDs of activities marked as read - mark_read: Optional[List[str]] = dc_field( + mark_read: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mark_read") ) # The IDs of activities marked as seen - mark_seen: Optional[List[str]] = dc_field( + mark_seen: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mark_seen") ) # The IDs of activities marked as watched - mark_watched: Optional[List[str]] = dc_field( + mark_watched: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mark_watched") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -644,7 +624,7 @@ class ActivityPinnedEvent(DataClassJsonMixin): ) # The ID of the feed fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) pinned_activity: "PinActivityResponse" = dc_field( metadata=dc_config(field_name="pinned_activity") ) @@ -652,10 +632,10 @@ class ActivityPinnedEvent(DataClassJsonMixin): type: str = dc_field( default="feeds.activity.pinned", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -664,7 +644,7 @@ class ActivityPinnedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -673,6 +653,14 @@ class ActivityPinnedEvent(DataClassJsonMixin): class ActivityProcessorConfig(DataClassJsonMixin): # Type of activity processor (required) type: str = dc_field(metadata=dc_config(field_name="type")) + # Minimum number of characters the activity text must have before this processor runs. 0 (the default) disables the check. Only applies to text_interest_tags. + min_text_length: int | None = dc_field( + default=None, metadata=dc_config(field_name="min_text_length") + ) + # Minimum number of words the activity text must have before this processor runs. 0 (the default) disables the check. Only applies to text_interest_tags. Words are whitespace-separated, so scripts written without word spacing (Chinese, Japanese, Thai) always count as 1 word regardless of length — use min_text_length for those. + min_word_count: int | None = dc_field( + default=None, metadata=dc_config(field_name="min_word_count") + ) @dataclass @@ -688,7 +676,7 @@ class ActivityReactionAddedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) reaction: "FeedsReactionResponse" = dc_field( metadata=dc_config(field_name="reaction") ) @@ -696,10 +684,10 @@ class ActivityReactionAddedEvent(DataClassJsonMixin): type: str = dc_field( default="feeds.activity.reaction.added", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -708,7 +696,7 @@ class ActivityReactionAddedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -726,7 +714,7 @@ class ActivityReactionDeletedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) reaction: "FeedsReactionResponse" = dc_field( metadata=dc_config(field_name="reaction") ) @@ -734,10 +722,10 @@ class ActivityReactionDeletedEvent(DataClassJsonMixin): type: str = dc_field( default="feeds.activity.reaction.deleted", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -746,7 +734,7 @@ class ActivityReactionDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -764,7 +752,7 @@ class ActivityReactionUpdatedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) reaction: "FeedsReactionResponse" = dc_field( metadata=dc_config(field_name="reaction") ) @@ -772,10 +760,10 @@ class ActivityReactionUpdatedEvent(DataClassJsonMixin): type: str = dc_field( default="feeds.activity.reaction.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -784,7 +772,7 @@ class ActivityReactionUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -802,16 +790,16 @@ class ActivityRemovedFromFeedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.activity.removed_from_feed" in this case type: str = dc_field( default="feeds.activity.removed_from_feed", metadata=dc_config(field_name="type"), ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -820,7 +808,7 @@ class ActivityRemovedFromFeedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -830,89 +818,89 @@ class ActivityRequest(DataClassJsonMixin): # Type of activity type: str = dc_field(metadata=dc_config(field_name="type")) # List of feeds to add the activity to with a default max limit of 25 feeds - feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) + feeds: list[str] = dc_field(metadata=dc_config(field_name="feeds")) # Whether to copy custom data to the notification activity (only applies when create_notification_activity is true) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # Whether to create notification activities for mentioned users - create_notification_activity: Optional[bool] = dc_field( + create_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_notification_activity") ) # Expiration time for the activity - expires_at: Optional[str] = dc_field( + expires_at: str | None = dc_field( default=None, metadata=dc_config(field_name="expires_at") ) # Optional ID for the activity - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # ID of parent activity for replies/comments - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # ID of a poll to attach to activity - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) # Controls who can add comments/replies to this activity. One of: everyone, people_i_follow, nobody - restrict_replies: Optional[str] = dc_field( + restrict_replies: str | None = dc_field( default=None, metadata=dc_config(field_name="restrict_replies") ) # Whether to skip URL enrichment for the activity - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) # Whether to skip push notifications - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) # Text content of the activity - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) # ID of the user creating the activity - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Visibility setting for the activity. One of: public, private, tag - visibility: Optional[str] = dc_field( + visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility") ) # If visibility is 'tag', this is the tag name and is required - visibility_tag: Optional[str] = dc_field( + visibility_tag: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility_tag") ) # List of attachments for the activity - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # Collections that this activity references - collection_refs: Optional[List[str]] = dc_field( + collection_refs: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="collection_refs") ) # Collections to create or update as part of this request, so an activity and the collections it references can be written in one call. Their refs (name:id) are added to collection_refs automatically; you do not need to restate them, and they count toward the same per-activity collection-reference limit, which is the effective cap here. A collection that already exists has its custom data updated. Use collection_refs instead when the collection already exists and you are only referencing it, which requires no collection permissions. - collections: "Optional[List[CollectionRequest]]" = dc_field( + collections: "list[CollectionRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="collections") ) # Tags for filtering activities - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) # Tags for indicating user interests - interest_tags: Optional[List[str]] = dc_field( + interest_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="interest_tags") ) # List of users mentioned in the activity - mentioned_user_ids: Optional[List[str]] = dc_field( + mentioned_user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_user_ids") ) # Custom data for the activity - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) # Additional data for search indexing - search_data: Optional[Dict[str, object]] = dc_field( + search_data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="search_data") ) @@ -962,53 +950,53 @@ class ActivityResponse(DataClassJsonMixin): # Visibility setting for the activity. One of: public, private, tag visibility: str = dc_field(metadata=dc_config(field_name="visibility")) # Media attachments for the activity - attachments: "List[Attachment]" = dc_field( + attachments: "list[Attachment]" = dc_field( metadata=dc_config(field_name="attachments") ) # Latest 5 comments of this activity (comment replies excluded) - comments: "List[CommentResponse]" = dc_field( + comments: "list[CommentResponse]" = dc_field( metadata=dc_config(field_name="comments") ) # List of feed IDs containing this activity - feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) + feeds: list[str] = dc_field(metadata=dc_config(field_name="feeds")) # Tags for filtering - filter_tags: List[str] = dc_field(metadata=dc_config(field_name="filter_tags")) + filter_tags: list[str] = dc_field(metadata=dc_config(field_name="filter_tags")) # Tags for user interests - interest_tags: List[str] = dc_field(metadata=dc_config(field_name="interest_tags")) + interest_tags: list[str] = dc_field(metadata=dc_config(field_name="interest_tags")) # Recent reactions to the activity - latest_reactions: "List[FeedsReactionResponse]" = dc_field( + latest_reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="latest_reactions") ) # Users mentioned in the activity - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) # Current user's bookmarks for this activity - own_bookmarks: "List[BookmarkResponse]" = dc_field( + own_bookmarks: "list[BookmarkResponse]" = dc_field( metadata=dc_config(field_name="own_bookmarks") ) # Current user's reactions to this activity - own_reactions: "List[FeedsReactionResponse]" = dc_field( + own_reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) # Enriched collection data referenced by this activity - collections: "Dict[str, EnrichedCollectionResponse]" = dc_field( + collections: "dict[str, EnrichedCollectionResponse]" = dc_field( metadata=dc_config(field_name="collections") ) # Custom data for the activity - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Grouped reactions by type - reaction_groups: "Dict[str, FeedsReactionGroupResponse]" = dc_field( + reaction_groups: "dict[str, FeedsReactionGroupResponse]" = dc_field( metadata=dc_config(field_name="reaction_groups") ) # Data for search indexing - search_data: Dict[str, object] = dc_field( + search_data: dict[str, object] = dc_field( metadata=dc_config(field_name="search_data") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # When the activity was deleted - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -1018,7 +1006,7 @@ class ActivityResponse(DataClassJsonMixin): ), ) # When the activity was last edited - edited_at: Optional[datetime] = dc_field( + edited_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="edited_at", @@ -1028,7 +1016,7 @@ class ActivityResponse(DataClassJsonMixin): ), ) # When the activity will expire - expires_at: Optional[datetime] = dc_field( + expires_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expires_at", @@ -1038,67 +1026,67 @@ class ActivityResponse(DataClassJsonMixin): ), ) # Total count of reactions from friends on this activity - friend_reaction_count: Optional[int] = dc_field( + friend_reaction_count: int | None = dc_field( default=None, metadata=dc_config(field_name="friend_reaction_count") ) # Whether this activity has been read. Only set for feed groups with notification config (track_seen/track_read enabled). - is_read: Optional[bool] = dc_field( + is_read: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_read") ) # Whether this activity has been seen. Only set for feed groups with notification config (track_seen/track_read enabled). - is_seen: Optional[bool] = dc_field( + is_seen: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_seen") ) - is_watched: Optional[bool] = dc_field( + is_watched: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_watched") ) - moderation_action: Optional[str] = dc_field( + moderation_action: str | None = dc_field( default=None, metadata=dc_config(field_name="moderation_action") ) # Which activity selector provided this activity (e.g., 'following', 'popular', 'interest'). Only set when using multiple activity selectors with ranking. - selector_source: Optional[str] = dc_field( + selector_source: str | None = dc_field( default=None, metadata=dc_config(field_name="selector_source") ) # Text content of the activity - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) # If visibility is 'tag', this is the tag name - visibility_tag: Optional[str] = dc_field( + visibility_tag: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility_tag") ) # Reactions from users the current user follows or has mutual follows with - friend_reactions: "Optional[List[FeedsReactionResponse]]" = dc_field( + friend_reactions: "list[FeedsReactionResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="friend_reactions") ) # Recent shares of the activity, one entry per share (org-gated) - latest_shares: "Optional[List[ShareResponse]]" = dc_field( + latest_shares: "list[ShareResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_shares") ) - current_feed: "Optional[FeedResponse]" = dc_field( + current_feed: "FeedResponse | None" = dc_field( default=None, metadata=dc_config(field_name="current_feed") ) - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) - metrics: "Optional[Dict[str, int]]" = dc_field( + metrics: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="metrics") ) - moderation: "Optional[ModerationV2Response]" = dc_field( + moderation: "ModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) - notification_context: "Optional[NotificationContext]" = dc_field( + notification_context: "NotificationContext | None" = dc_field( default=None, metadata=dc_config(field_name="notification_context") ) - parent: "Optional[ActivityResponse]" = dc_field( + parent: "ActivityResponse | None" = dc_field( default=None, metadata=dc_config(field_name="parent") ) - poll: "Optional[PollResponseData]" = dc_field( + poll: "PollResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll") ) # Variable values used at ranking time. Only included when include_score_vars is enabled in enrichment options. - score_vars: Optional[Dict[str, object]] = dc_field( + score_vars: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="score_vars") ) @@ -1116,15 +1104,15 @@ class ActivityRestoredEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of the event type: str = dc_field( default="feeds.activity.restored", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -1133,7 +1121,7 @@ class ActivityRestoredEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1143,26 +1131,26 @@ class ActivitySelectorConfig(DataClassJsonMixin): # Type of selector. One of: popular, proximity, following, current_feed, query, interest, follow_suggestion type: str = dc_field(metadata=dc_config(field_name="type")) # Time threshold for activity selection (string). Expected RFC3339 format (e.g., 2006-01-02T15:04:05Z07:00). Cannot be used together with cutoff_window - cutoff_time: Optional[str] = dc_field( + cutoff_time: str | None = dc_field( default=None, metadata=dc_config(field_name="cutoff_time") ) # Flexible relative time window for activity selection (e.g., '1h', '3d', '1y'). Activities older than this duration will be filtered out. Cannot be used together with cutoff_time - cutoff_window: Optional[str] = dc_field( + cutoff_window: str | None = dc_field( default=None, metadata=dc_config(field_name="cutoff_window") ) # Minimum popularity threshold. For the 'popular' selector, omit to use the default (5); values below 1 are rejected - min_popularity: Optional[int] = dc_field( + min_popularity: int | None = dc_field( default=None, metadata=dc_config(field_name="min_popularity") ) # Sort parameters for activity selection - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter for activity selection - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) - params: Optional[Dict[str, object]] = dc_field( + params: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="params") ) @@ -1172,7 +1160,7 @@ class ActivitySelectorConfigResponse(DataClassJsonMixin): # Type of selector type: str = dc_field(metadata=dc_config(field_name="type")) # Time threshold for activity selection (timestamp) - cutoff_time: Optional[datetime] = dc_field( + cutoff_time: datetime | None = dc_field( default=None, metadata=dc_config( field_name="cutoff_time", @@ -1182,23 +1170,23 @@ class ActivitySelectorConfigResponse(DataClassJsonMixin): ), ) # Flexible relative time window for activity selection (e.g., '1h', '3d', '1y') - cutoff_window: Optional[str] = dc_field( + cutoff_window: str | None = dc_field( default=None, metadata=dc_config(field_name="cutoff_window") ) # Minimum popularity threshold. For the 'popular' selector, values below 1 are normalized to the default (5) at read time. - min_popularity: Optional[int] = dc_field( + min_popularity: int | None = dc_field( default=None, metadata=dc_config(field_name="min_popularity") ) # Sort parameters for activity selection - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter for activity selection - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # Generic params for selector-specific configuration - params: Optional[Dict[str, object]] = dc_field( + params: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="params") ) @@ -1216,7 +1204,7 @@ class ActivityUnpinnedEvent(DataClassJsonMixin): ) # The ID of the feed fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) pinned_activity: "PinActivityResponse" = dc_field( metadata=dc_config(field_name="pinned_activity") ) @@ -1224,10 +1212,10 @@ class ActivityUnpinnedEvent(DataClassJsonMixin): type: str = dc_field( default="feeds.activity.unpinned", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -1236,7 +1224,7 @@ class ActivityUnpinnedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1254,15 +1242,15 @@ class ActivityUpdatedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of the event type: str = dc_field( default="feeds.activity.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -1271,7 +1259,7 @@ class ActivityUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1281,98 +1269,98 @@ class AddActivityRequest(DataClassJsonMixin): # Type of activity type: str = dc_field(metadata=dc_config(field_name="type")) # List of feeds to add the activity to with a default max limit of 25 feeds - feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) + feeds: list[str] = dc_field(metadata=dc_config(field_name="feeds")) # Whether to copy custom data to the notification activity (only applies when create_notification_activity is true) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # Whether to create notification activities for mentioned users - create_notification_activity: Optional[bool] = dc_field( + create_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_notification_activity") ) - create_users: Optional[bool] = dc_field( + create_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_users") ) - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) # Expiration time for the activity - expires_at: Optional[str] = dc_field( + expires_at: str | None = dc_field( default=None, metadata=dc_config(field_name="expires_at") ) - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) # Optional ID for the activity - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # ID of parent activity for replies/comments - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # ID of a poll to attach to activity - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) # Controls who can add comments/replies to this activity. One of: everyone, people_i_follow, nobody - restrict_replies: Optional[str] = dc_field( + restrict_replies: str | None = dc_field( default=None, metadata=dc_config(field_name="restrict_replies") ) # Whether to skip URL enrichment for the activity - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) # Whether to skip push notifications - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) # Text content of the activity - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) # ID of the user creating the activity - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Visibility setting for the activity. One of: public, private, tag - visibility: Optional[str] = dc_field( + visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility") ) # If visibility is 'tag', this is the tag name and is required - visibility_tag: Optional[str] = dc_field( + visibility_tag: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility_tag") ) # List of attachments for the activity - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # Collections that this activity references - collection_refs: Optional[List[str]] = dc_field( + collection_refs: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="collection_refs") ) # Collections to create or update as part of this request, so an activity and the collections it references can be written in one call. Their refs (name:id) are added to collection_refs automatically; you do not need to restate them, and they count toward the same per-activity collection-reference limit, which is the effective cap here. A collection that already exists has its custom data updated. Use collection_refs instead when the collection already exists and you are only referencing it, which requires no collection permissions. - collections: "Optional[List[CollectionRequest]]" = dc_field( + collections: "list[CollectionRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="collections") ) # Tags for filtering activities - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) # Tags for indicating user interests - interest_tags: Optional[List[str]] = dc_field( + interest_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="interest_tags") ) # List of users mentioned in the activity - mentioned_user_ids: Optional[List[str]] = dc_field( + mentioned_user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_user_ids") ) # Custom data for the activity - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) # Additional data for search indexing - search_data: Optional[Dict[str, object]] = dc_field( + search_data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="search_data") ) @@ -1382,7 +1370,7 @@ class AddActivityResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) # Number of mention notification activities created for mentioned users - mention_notifications_created: Optional[int] = dc_field( + mention_notifications_created: int | None = dc_field( default=None, metadata=dc_config(field_name="mention_notifications_created") ) @@ -1390,21 +1378,21 @@ class AddActivityResponse(DataClassJsonMixin): @dataclass class AddBookmarkRequest(DataClassJsonMixin): # ID of the folder to add the bookmark to - folder_id: Optional[str] = dc_field( + folder_id: str | None = dc_field( default=None, metadata=dc_config(field_name="folder_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for the bookmark - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - new_folder: "Optional[AddFolderRequest]" = dc_field( + new_folder: "AddFolderRequest | None" = dc_field( default=None, metadata=dc_config(field_name="new_folder") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1418,21 +1406,21 @@ class AddBookmarkResponse(DataClassJsonMixin): @dataclass class AddCommentBookmarkRequest(DataClassJsonMixin): # ID of the folder to add the bookmark to - folder_id: Optional[str] = dc_field( + folder_id: str | None = dc_field( default=None, metadata=dc_config(field_name="folder_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for the bookmark - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - new_folder: "Optional[AddFolderRequest]" = dc_field( + new_folder: "AddFolderRequest | None" = dc_field( default=None, metadata=dc_config(field_name="new_folder") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1449,33 +1437,33 @@ class AddCommentReactionRequest(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) # Whether to copy custom data to the notification activity (only applies when create_notification_activity is true) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # Whether to create a notification activity for this reaction - create_notification_activity: Optional[bool] = dc_field( + create_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_notification_activity") ) # Whether to enforce unique reactions per user (remove other reaction types from the user when adding this one) - enforce_unique: Optional[bool] = dc_field( + enforce_unique: bool | None = dc_field( default=None, metadata=dc_config(field_name="enforce_unique") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Optional list of feeds to create a reference (share) activity of the commented-on activity in. The reference activity's type mirrors the reaction type. - target_feeds: Optional[List[str]] = dc_field( + target_feeds: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="target_feeds") ) # Optional custom data to add to the reaction - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1489,19 +1477,19 @@ class AddCommentReactionResponse(DataClassJsonMixin): metadata=dc_config(field_name="reaction") ) # Whether notification creation was accepted for asynchronous processing - notification_accepted: Optional[bool] = dc_field( + notification_accepted: bool | None = dc_field( default=None, metadata=dc_config(field_name="notification_accepted") ) # Deprecated. Mirrors notification_accepted; use notification_accepted for async enqueue status Deprecated: use notification_accepted # Deprecated - notification_created: Optional[bool] = dc_field( + notification_created: bool | None = dc_field( default=None, metadata=dc_config(field_name="notification_created") ) # ID of the async notification-creation task; poll GET /tasks/{id} for its status - notification_task_id: Optional[str] = dc_field( + notification_task_id: str | None = dc_field( default=None, metadata=dc_config(field_name="notification_task_id") ) - reference_activity: "Optional[ActivityResponse]" = dc_field( + reference_activity: "ActivityResponse | None" = dc_field( default=None, metadata=dc_config(field_name="reference_activity") ) @@ -1509,60 +1497,60 @@ class AddCommentReactionResponse(DataClassJsonMixin): @dataclass class AddCommentRequest(DataClassJsonMixin): # Text content of the comment - comment: Optional[str] = dc_field( + comment: str | None = dc_field( default=None, metadata=dc_config(field_name="comment") ) # Whether to copy custom data to the notification activity (only applies when create_notification_activity is true) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # Whether to create a notification activity for this comment - create_notification_activity: Optional[bool] = dc_field( + create_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_notification_activity") ) # If true, forces moderation to run for server-side requests. By default, server-side requests skip moderation. Client-side requests always run moderation regardless of this field. - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) # Optional custom ID for the comment (max 255 characters). If not provided, a UUID will be generated. - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # ID of the object to comment on. Required for root comments - object_id: Optional[str] = dc_field( + object_id: str | None = dc_field( default=None, metadata=dc_config(field_name="object_id") ) # Type of the object to comment on. Required for root comments - object_type: Optional[str] = dc_field( + object_type: str | None = dc_field( default=None, metadata=dc_config(field_name="object_type") ) # ID of parent comment for replies. When provided, object_id and object_type are automatically inherited from the parent comment. - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # Whether to skip URL enrichment for this comment - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Media attachments for the reply - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # List of users mentioned in the reply - mentioned_user_ids: Optional[List[str]] = dc_field( + mentioned_user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_user_ids") ) # Custom data for the comment - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1572,11 +1560,11 @@ class AddCommentResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) # Number of mention notification activities created for mentioned users - mention_notifications_created: Optional[int] = dc_field( + mention_notifications_created: int | None = dc_field( default=None, metadata=dc_config(field_name="mention_notifications_created") ) # Whether a notification activity was successfully created - notification_created: Optional[bool] = dc_field( + notification_created: bool | None = dc_field( default=None, metadata=dc_config(field_name="notification_created") ) @@ -1584,7 +1572,7 @@ class AddCommentResponse(DataClassJsonMixin): @dataclass class AddCommentsBatchRequest(DataClassJsonMixin): # List of comments to add - comments: "List[AddCommentRequest]" = dc_field( + comments: "list[AddCommentRequest]" = dc_field( metadata=dc_config(field_name="comments") ) @@ -1593,7 +1581,7 @@ class AddCommentsBatchRequest(DataClassJsonMixin): class AddCommentsBatchResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of comments added - comments: "List[CommentResponse]" = dc_field( + comments: "list[CommentResponse]" = dc_field( metadata=dc_config(field_name="comments") ) @@ -1603,7 +1591,7 @@ class AddFolderRequest(DataClassJsonMixin): # Name of the folder name: str = dc_field(metadata=dc_config(field_name="name")) # Custom data for the folder - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -1614,37 +1602,37 @@ class AddReactionRequest(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) # Whether to copy custom data to the notification activity (only applies when create_notification_activity is true) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # Whether to create a notification activity for this reaction - create_notification_activity: Optional[bool] = dc_field( + create_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_notification_activity") ) # Server-side only. If true, auto-creates the reacting user identified by user_id when they don't already exist. Default: false. - create_users: Optional[bool] = dc_field( + create_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_users") ) # Whether to enforce unique reactions per user (remove other reaction types from the user when adding this one) - enforce_unique: Optional[bool] = dc_field( + enforce_unique: bool | None = dc_field( default=None, metadata=dc_config(field_name="enforce_unique") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Optional list of feeds to create a reference (share) activity of the original activity in. The reference activity's type mirrors the reaction type. - target_feeds: Optional[List[str]] = dc_field( + target_feeds: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="target_feeds") ) # Custom data for the reaction - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1657,19 +1645,19 @@ class AddReactionResponse(DataClassJsonMixin): metadata=dc_config(field_name="reaction") ) # Whether notification creation was accepted for asynchronous processing - notification_accepted: Optional[bool] = dc_field( + notification_accepted: bool | None = dc_field( default=None, metadata=dc_config(field_name="notification_accepted") ) # Deprecated. Mirrors notification_accepted; use notification_accepted for async enqueue status Deprecated: use notification_accepted # Deprecated - notification_created: Optional[bool] = dc_field( + notification_created: bool | None = dc_field( default=None, metadata=dc_config(field_name="notification_created") ) # ID of the async notification-creation task; poll GET /tasks/{id} for its status - notification_task_id: Optional[str] = dc_field( + notification_task_id: str | None = dc_field( default=None, metadata=dc_config(field_name="notification_task_id") ) - reference_activity: "Optional[ActivityResponse]" = dc_field( + reference_activity: "ActivityResponse | None" = dc_field( default=None, metadata=dc_config(field_name="reference_activity") ) @@ -1677,18 +1665,18 @@ class AddReactionResponse(DataClassJsonMixin): @dataclass class AddSegmentTargetsRequest(DataClassJsonMixin): # Target IDs - target_ids: List[str] = dc_field(metadata=dc_config(field_name="target_ids")) + target_ids: list[str] = dc_field(metadata=dc_config(field_name="target_ids")) @dataclass class AddUserGroupMembersRequest(DataClassJsonMixin): # List of user IDs to add as members - member_ids: List[str] = dc_field(metadata=dc_config(field_name="member_ids")) + member_ids: list[str] = dc_field(metadata=dc_config(field_name="member_ids")) # Whether to add the members as group admins. Defaults to false - as_admin: Optional[bool] = dc_field( + as_admin: bool | None = dc_field( default=None, metadata=dc_config(field_name="as_admin") ) - team_id: Optional[str] = dc_field( + team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="team_id") ) @@ -1696,7 +1684,7 @@ class AddUserGroupMembersRequest(DataClassJsonMixin): @dataclass class AddUserGroupMembersResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - user_group: "Optional[UserGroupResponse]" = dc_field( + user_group: "UserGroupResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -1734,18 +1722,18 @@ class AggregatedActivityResponse(DataClassJsonMixin): metadata=dc_config(field_name="user_count_truncated") ) # List of activities in this aggregation - activities: "List[ActivityResponse]" = dc_field( + activities: "list[ActivityResponse]" = dc_field( metadata=dc_config(field_name="activities") ) # Whether this aggregated group has been read. Only set for feed groups with notification config (track_seen/track_read enabled). - is_read: Optional[bool] = dc_field( + is_read: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_read") ) # Whether this aggregated group has been seen. Only set for feed groups with notification config (track_seen/track_read enabled). - is_seen: Optional[bool] = dc_field( + is_seen: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_seen") ) - is_watched: Optional[bool] = dc_field( + is_watched: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_watched") ) @@ -1753,15 +1741,13 @@ class AggregatedActivityResponse(DataClassJsonMixin): @dataclass class AggregationConfig(DataClassJsonMixin): # Order of member activities inside each aggregated group for non-stories feeds: created_at_desc (newest first, default) or created_at_asc (oldest first). Stories feeds ignore this and always use oldest first. - activities_sort: Optional[str] = dc_field( + activities_sort: str | None = dc_field( default=None, metadata=dc_config(field_name="activities_sort") ) # Format for activity aggregation - format: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="format") - ) + format: str | None = dc_field(default=None, metadata=dc_config(field_name="format")) # Strategy for computing aggregated group scores from member activity scores when ranking is enabled. Valid values: sum, max, avg - score_strategy: Optional[str] = dc_field( + score_strategy: str | None = dc_field( default=None, metadata=dc_config(field_name="score_strategy") ) @@ -1769,25 +1755,21 @@ class AggregationConfig(DataClassJsonMixin): @dataclass class AnalyzeImageField(DataClassJsonMixin): # Per-image action: keep | flag | remove. - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") - ) + action: str | None = dc_field(default=None, metadata=dc_config(field_name="action")) # Highest confidence (0–1) across detected classifications + sub-classifications. Convenience aggregate over the nested values in `classifications`. - confidence: Optional[float] = dc_field( + confidence: float | None = dc_field( default=None, metadata=dc_config(field_name="confidence") ) # Set when moderation couldn't be determined for this image — action is absent. - error: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="error") - ) + error: str | None = dc_field(default=None, metadata=dc_config(field_name="error")) # Echo of `content_ids[label]` when supplied on the request; omitted otherwise. - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # Hierarchical list of L1 (parent) classifications. Each entry: `name`, `confidence` (0–1), and nested `subclassifications` (L2 leaves with their own confidence). Resolved against the app's effective taxonomy (custom taxonomy when configured, otherwise the standard Bodyguard catalogue). - classifications: "Optional[List[Classification]]" = dc_field( + classifications: "list[Classification] | None" = dc_field( default=None, metadata=dc_config(field_name="classifications") ) # Flat list of Bodyguard OCR text-moderation labels on the image's extracted text (e.g. VULGARITY, PII). Each entry: `name` + `severity`. Populated when BG's OCR pipeline returned non-empty results for this image. - ocr_classifications: "Optional[List[Classification]]" = dc_field( + ocr_classifications: "list[Classification] | None" = dc_field( default=None, metadata=dc_config(field_name="ocr_classifications") ) @@ -1795,15 +1777,15 @@ class AnalyzeImageField(DataClassJsonMixin): @dataclass class AnalyzeRequest(DataClassJsonMixin): # When true, the response carries no verdicts (status `pending`) and per-modality results arrive via `moderation.text_analysis.complete` and `moderation.image_analysis.complete` webhooks. Image moderation runs on a background worker; text moderation runs synchronously and is then delivered via webhook. - async_response: Optional[bool] = dc_field( + async_response: bool | None = dc_field( default=None, metadata=dc_config(field_name="async_response") ) # Moderation policy key. Optional in stateful mode, required in stateless mode. - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) # Original timestamp when the content was produced. Used as the `published_at` timestamp on per-content log entries that surface in `matched_contents` on aggregation-rule webhooks. - content_published_at: Optional[datetime] = dc_field( + content_published_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="content_published_at", @@ -1813,34 +1795,34 @@ class AnalyzeRequest(DataClassJsonMixin): ), ) # ID of the user who created the content. Required with entity_type + entity_id; omit all three for stateless mode. - entity_creator_id: Optional[str] = dc_field( + entity_creator_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) # Caller-supplied content identifier. Required with entity_type + entity_creator_id; omit all three for stateless mode. - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Caller-defined entity type. Required with entity_id + entity_creator_id; omit all three for stateless mode. - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Optional map from a content label (either a `texts` key or an `image:` multipart label) to a caller-supplied per-instance identifier. Echoed on per-field verdicts and surfaced in `matched_contents` when an aggregation rule fires. - content_ids: "Optional[Dict[str, str]]" = dc_field( + content_ids: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="content_ids") ) # Arbitrary metadata surfaced in the dashboard. - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # Named text fields to moderate, keyed by caller label (e.g. title, description). - texts: "Optional[Dict[str, str]]" = dc_field( + texts: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="texts") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -1851,11 +1833,11 @@ class AnalyzeResponse(DataClassJsonMixin): # Always `complete` — /analyze is sync-only and the full verdict is in the response. status: str = dc_field(metadata=dc_config(field_name="status")) # Per-image moderation verdicts keyed by caller label. - images: "Optional[Dict[str, AnalyzeImageField]]" = dc_field( + images: "dict[str, AnalyzeImageField] | None" = dc_field( default=None, metadata=dc_config(field_name="images") ) # Per-text-field moderation verdicts keyed by caller label. - texts: "Optional[Dict[str, AnalyzeTextField]]" = dc_field( + texts: "dict[str, AnalyzeTextField] | None" = dc_field( default=None, metadata=dc_config(field_name="texts") ) @@ -1863,25 +1845,21 @@ class AnalyzeResponse(DataClassJsonMixin): @dataclass class AnalyzeTextField(DataClassJsonMixin): # Per-field action: keep | flag | remove. - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") - ) + action: str | None = dc_field(default=None, metadata=dc_config(field_name="action")) # Set when moderation couldn't be determined for this field — action is absent. - error: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="error") - ) + error: str | None = dc_field(default=None, metadata=dc_config(field_name="error")) # Echo of `content_ids[label]` when supplied on the request; omitted otherwise. - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # Detected language code. - language: Optional[str] = dc_field( + language: str | None = dc_field( default=None, metadata=dc_config(field_name="language") ) # Aggregate severity across the field: LOW | MEDIUM | HIGH | CRITICAL. - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) # Flat list of detected Bodyguard text labels (e.g. INSULT, VULGARITY). Each entry carries `name` and `severity`. - classifications: "Optional[List[Classification]]" = dc_field( + classifications: "list[Classification] | None" = dc_field( default=None, metadata=dc_config(field_name="classifications") ) @@ -1974,52 +1952,52 @@ class AppResponseFields(DataClassJsonMixin): metadata=dc_config(field_name="user_response_time_enabled") ) webhook_url: str = dc_field(metadata=dc_config(field_name="webhook_url")) - event_hooks: "List[EventHook]" = dc_field( + event_hooks: "list[EventHook]" = dc_field( metadata=dc_config(field_name="event_hooks") ) - user_search_disallowed_roles: List[str] = dc_field( + user_search_disallowed_roles: list[str] = dc_field( metadata=dc_config(field_name="user_search_disallowed_roles") ) - webhook_events: List[str] = dc_field( + webhook_events: list[str] = dc_field( metadata=dc_config(field_name="webhook_events") ) - call_types: "Dict[str, Optional[CallType]]" = dc_field( + call_types: "dict[str, CallType | None]" = dc_field( metadata=dc_config(field_name="call_types") ) - channel_configs: "Dict[str, Optional[ChannelConfig]]" = dc_field( + channel_configs: "dict[str, ChannelConfig | None]" = dc_field( metadata=dc_config(field_name="channel_configs") ) file_upload_config: "FileUploadConfig" = dc_field( metadata=dc_config(field_name="file_upload_config") ) - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) image_upload_config: "FileUploadConfig" = dc_field( metadata=dc_config(field_name="image_upload_config") ) - policies: "Dict[str, List[Policy]]" = dc_field( + policies: "dict[str, list[Policy]]" = dc_field( metadata=dc_config(field_name="policies") ) push_notifications: "PushNotificationFields" = dc_field( metadata=dc_config(field_name="push_notifications") ) - before_message_send_hook_attempt_timeout_ms: Optional[int] = dc_field( + before_message_send_hook_attempt_timeout_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="before_message_send_hook_attempt_timeout_ms"), ) - before_message_send_hook_url: Optional[str] = dc_field( + before_message_send_hook_url: str | None = dc_field( default=None, metadata=dc_config(field_name="before_message_send_hook_url") ) - chat_primary_use_case: Optional[str] = dc_field( + chat_primary_use_case: str | None = dc_field( default=None, metadata=dc_config(field_name="chat_primary_use_case") ) - moderation_onboarding_complete: Optional[bool] = dc_field( + moderation_onboarding_complete: bool | None = dc_field( default=None, metadata=dc_config(field_name="moderation_onboarding_complete") ) - moderation_s3_image_access_role_arn: Optional[str] = dc_field( + moderation_s3_image_access_role_arn: str | None = dc_field( default=None, metadata=dc_config(field_name="moderation_s3_image_access_role_arn"), ) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + revoke_tokens_issued_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="revoke_tokens_issued_before", @@ -2028,25 +2006,25 @@ class AppResponseFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - video_primary_use_case: Optional[str] = dc_field( + video_primary_use_case: str | None = dc_field( default=None, metadata=dc_config(field_name="video_primary_use_case") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - geofences: "Optional[List[GeofenceResponse]]" = dc_field( + geofences: "list[GeofenceResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="geofences") ) - image_moderation_labels: Optional[List[str]] = dc_field( + image_moderation_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="image_moderation_labels") ) - activity_metrics_config: "Optional[Dict[str, int]]" = dc_field( + activity_metrics_config: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_metrics_config") ) - datadog_info: "Optional[DataDogInfo]" = dc_field( + datadog_info: "DataDogInfo | None" = dc_field( default=None, metadata=dc_config(field_name="datadog_info") ) - moderation_dashboard_preferences: "Optional[ModerationDashboardPreferences]" = ( + moderation_dashboard_preferences: "ModerationDashboardPreferences | None" = ( dc_field( default=None, metadata=dc_config(field_name="moderation_dashboard_preferences"), @@ -2064,11 +2042,11 @@ class AppealAcceptedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="appeal.accepted", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2077,7 +2055,7 @@ class AppealAcceptedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - appeal: "Optional[AppealItemResponse]" = dc_field( + appeal: "AppealItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="appeal") ) @@ -2092,11 +2070,11 @@ class AppealCreatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="appeal.created", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2105,7 +2083,7 @@ class AppealCreatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - appeal: "Optional[AppealItemResponse]" = dc_field( + appeal: "AppealItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="appeal") ) @@ -2140,64 +2118,64 @@ class AppealItemResponse(DataClassJsonMixin): ) ) # Text severity level assigned by the AI provider - ai_text_severity: Optional[str] = dc_field( + ai_text_severity: str | None = dc_field( default=None, metadata=dc_config(field_name="ai_text_severity") ) # CID of the channel the entity belongs to, if applicable - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) # Moderation policy key that was applied - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) # Decision Reason of the Appeal Item - decision_reason: Optional[str] = dc_field( + decision_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="decision_reason") ) # Action recommended by the automated moderation system (e.g. flag, remove, shadow) - recommended_action: Optional[str] = dc_field( + recommended_action: str | None = dc_field( default=None, metadata=dc_config(field_name="recommended_action") ) # ID of the review queue item linked to this appeal, if the appeal was submitted with one - review_queue_item_id: Optional[str] = dc_field( + review_queue_item_id: str | None = dc_field( default=None, metadata=dc_config(field_name="review_queue_item_id") ) # Overall content severity score (1–100) - severity: Optional[int] = dc_field( + severity: int | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) # Full chronological history of all moderation actions on the review queue item - actions: "Optional[List[ActionLogResponse]]" = dc_field( + actions: "list[ActionLogResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="actions") ) # Attachments(e.g. Images) of the Appeal Item - attachments: Optional[List[str]] = dc_field( + attachments: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # Classification labels from automated and manual review - flag_labels: Optional[List[str]] = dc_field( + flag_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="flag_labels") ) # Types of flags applied to the entity (e.g. user_report, bodyguard) - flag_types: Optional[List[str]] = dc_field( + flag_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="flag_types") ) # Per-provider flag records explaining why the action was taken - flags: "Optional[List[ModerationFlagResponse]]" = dc_field( + flags: "list[ModerationFlagResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="flags") ) - entity_content: "Optional[ModerationPayload]" = dc_field( + entity_content: "ModerationPayload | None" = dc_field( default=None, metadata=dc_config(field_name="entity_content") ) - moderation_action: "Optional[ActionLogResponse]" = dc_field( + moderation_action: "ActionLogResponse | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_action") ) - original_moderation_action: "Optional[ActionLogResponse]" = dc_field( + original_moderation_action: "ActionLogResponse | None" = dc_field( default=None, metadata=dc_config(field_name="original_moderation_action") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -2212,11 +2190,11 @@ class AppealRejectedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="appeal.rejected", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2225,7 +2203,7 @@ class AppealRejectedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - appeal: "Optional[AppealItemResponse]" = dc_field( + appeal: "AppealItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="appeal") ) @@ -2239,18 +2217,18 @@ class AppealRequest(DataClassJsonMixin): # Type of entity being appealed (e.g., message, user) entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) # ID of the review queue item (flagged message) that triggered the ban. Applicable only for user ban appeals. - review_queue_item_id: Optional[str] = dc_field( + review_queue_item_id: str | None = dc_field( default=None, metadata=dc_config(field_name="review_queue_item_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of Attachment URLs(e.g., images) - attachments: Optional[List[str]] = dc_field( + attachments: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -2290,12 +2268,12 @@ class AsyncBulkImageModerationEvent(DataClassJsonMixin): ) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) url: str = dc_field(metadata=dc_config(field_name="url")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="export.bulk_image_moderation.success", metadata=dc_config(field_name="type"), ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2334,11 +2312,11 @@ class AsyncExportChannelsEvent(DataClassJsonMixin): ) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) url: str = dc_field(metadata=dc_config(field_name="url")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="export.channels.success", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2377,12 +2355,11 @@ class AsyncExportErrorEvent(DataClassJsonMixin): ) ) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( - default="export.bulk_image_moderation.error", - metadata=dc_config(field_name="type"), + default="export.channels.error", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2421,11 +2398,11 @@ class AsyncExportModerationLogsEvent(DataClassJsonMixin): ) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) url: str = dc_field(metadata=dc_config(field_name="url")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="export.moderation_logs.success", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2464,11 +2441,11 @@ class AsyncExportReviewQueueEvent(DataClassJsonMixin): ) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) url: str = dc_field(metadata=dc_config(field_name="url")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="export.review_queue.success", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2507,11 +2484,11 @@ class AsyncExportUsersEvent(DataClassJsonMixin): ) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) url: str = dc_field(metadata=dc_config(field_name="url")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="export.users.success", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -2524,83 +2501,77 @@ class AsyncExportUsersEvent(DataClassJsonMixin): @dataclass class AsyncModerationCallbackConfig(DataClassJsonMixin): - mode: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mode")) - server_url: Optional[str] = dc_field( + mode: str | None = dc_field(default=None, metadata=dc_config(field_name="mode")) + server_url: str | None = dc_field( default=None, metadata=dc_config(field_name="server_url") ) @dataclass class AsyncModerationConfiguration(DataClassJsonMixin): - timeout_ms: Optional[int] = dc_field( + timeout_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="timeout_ms") ) - callback: "Optional[AsyncModerationCallbackConfig]" = dc_field( + callback: "AsyncModerationCallbackConfig | None" = dc_field( default=None, metadata=dc_config(field_name="callback") ) @dataclass class Attachment(DataClassJsonMixin): - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - asset_url: Optional[str] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + asset_url: str | None = dc_field( default=None, metadata=dc_config(field_name="asset_url") ) - author_icon: Optional[str] = dc_field( + author_icon: str | None = dc_field( default=None, metadata=dc_config(field_name="author_icon") ) - author_link: Optional[str] = dc_field( + author_link: str | None = dc_field( default=None, metadata=dc_config(field_name="author_link") ) - author_name: Optional[str] = dc_field( + author_name: str | None = dc_field( default=None, metadata=dc_config(field_name="author_name") ) - color: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="color") - ) - fallback: Optional[str] = dc_field( + color: str | None = dc_field(default=None, metadata=dc_config(field_name="color")) + fallback: str | None = dc_field( default=None, metadata=dc_config(field_name="fallback") ) - footer: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="footer") - ) - footer_icon: Optional[str] = dc_field( + footer: str | None = dc_field(default=None, metadata=dc_config(field_name="footer")) + footer_icon: str | None = dc_field( default=None, metadata=dc_config(field_name="footer_icon") ) - image_url: Optional[str] = dc_field( + image_url: str | None = dc_field( default=None, metadata=dc_config(field_name="image_url") ) - og_scrape_url: Optional[str] = dc_field( + og_scrape_url: str | None = dc_field( default=None, metadata=dc_config(field_name="og_scrape_url") ) - original_height: Optional[int] = dc_field( + original_height: int | None = dc_field( default=None, metadata=dc_config(field_name="original_height") ) - original_width: Optional[int] = dc_field( + original_width: int | None = dc_field( default=None, metadata=dc_config(field_name="original_width") ) - pretext: Optional[str] = dc_field( + pretext: str | None = dc_field( default=None, metadata=dc_config(field_name="pretext") ) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - thumb_url: Optional[str] = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + thumb_url: str | None = dc_field( default=None, metadata=dc_config(field_name="thumb_url") ) - title: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="title") - ) - title_link: Optional[str] = dc_field( + title: str | None = dc_field(default=None, metadata=dc_config(field_name="title")) + title_link: str | None = dc_field( default=None, metadata=dc_config(field_name="title_link") ) # Attachment type (e.g. image, video, url) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - actions: "Optional[List[Action]]" = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + actions: "list[Action] | None" = dc_field( default=None, metadata=dc_config(field_name="actions") ) - fields: "Optional[List[Field]]" = dc_field( + fields: "list[Field] | None" = dc_field( default=None, metadata=dc_config(field_name="fields") ) - giphy: "Optional[Images]" = dc_field( + giphy: "Images | None" = dc_field( default=None, metadata=dc_config(field_name="giphy") ) @@ -2618,24 +2589,22 @@ class Audience(DataClassJsonMixin): viewer_connections: int = dc_field( metadata=dc_config(field_name="viewer_connections") ) - concurrency_by_minute: "List[ConcurrencyMinute]" = dc_field( + concurrency_by_minute: "list[ConcurrencyMinute]" = dc_field( metadata=dc_config(field_name="concurrency_by_minute") ) - peak_at: Optional[str] = dc_field( + peak_at: str | None = dc_field( default=None, metadata=dc_config(field_name="peak_at") ) - ramp_up_min_to_90pct_peak: Optional[int] = dc_field( + ramp_up_min_to_90pct_peak: int | None = dc_field( default=None, metadata=dc_config(field_name="ramp_up_min_to_90pct_peak") ) - retention_at_90pct_mark: Optional[float] = dc_field( + retention_at_90pct_mark: float | None = dc_field( default=None, metadata=dc_config(field_name="retention_at_90pct_mark") ) - retention_at_midpoint: Optional[float] = dc_field( + retention_at_midpoint: float | None = dc_field( default=None, metadata=dc_config(field_name="retention_at_midpoint") ) - shape: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="shape") - ) + shape: str | None = dc_field(default=None, metadata=dc_config(field_name="shape")) @dataclass @@ -2655,7 +2624,7 @@ class AudioSettings(DataClassJsonMixin): speaker_default_on: bool = dc_field( metadata=dc_config(field_name="speaker_default_on") ) - noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( + noise_cancellation: "NoiseCancellationSettings | None" = dc_field( default=None, metadata=dc_config(field_name="noise_cancellation") ) @@ -2663,25 +2632,25 @@ class AudioSettings(DataClassJsonMixin): @dataclass class AudioSettingsRequest(DataClassJsonMixin): default_device: str = dc_field(metadata=dc_config(field_name="default_device")) - access_request_enabled: Optional[bool] = dc_field( + access_request_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="access_request_enabled") ) - hifi_audio_enabled: Optional[bool] = dc_field( + hifi_audio_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="hifi_audio_enabled") ) - mic_default_on: Optional[bool] = dc_field( + mic_default_on: bool | None = dc_field( default=None, metadata=dc_config(field_name="mic_default_on") ) - opus_dtx_enabled: Optional[bool] = dc_field( + opus_dtx_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="opus_dtx_enabled") ) - redundant_coding_enabled: Optional[bool] = dc_field( + redundant_coding_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="redundant_coding_enabled") ) - speaker_default_on: Optional[bool] = dc_field( + speaker_default_on: bool | None = dc_field( default=None, metadata=dc_config(field_name="speaker_default_on") ) - noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( + noise_cancellation: "NoiseCancellationSettings | None" = dc_field( default=None, metadata=dc_config(field_name="noise_cancellation") ) @@ -2703,40 +2672,36 @@ class AudioSettingsResponse(DataClassJsonMixin): speaker_default_on: bool = dc_field( metadata=dc_config(field_name="speaker_default_on") ) - noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( + noise_cancellation: "NoiseCancellationSettings | None" = dc_field( default=None, metadata=dc_config(field_name="noise_cancellation") ) @dataclass class AutomodDetailsResponse(DataClassJsonMixin): - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") - ) - original_message_type: Optional[str] = dc_field( + action: str | None = dc_field(default=None, metadata=dc_config(field_name="action")) + original_message_type: str | None = dc_field( default=None, metadata=dc_config(field_name="original_message_type") ) - image_labels: Optional[List[str]] = dc_field( + image_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="image_labels") ) - message_details: "Optional[FlagMessageDetailsResponse]" = dc_field( + message_details: "FlagMessageDetailsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message_details") ) # Result of the message moderation - result: "Optional[MessageModerationResult]" = dc_field( + result: "MessageModerationResult | None" = dc_field( default=None, metadata=dc_config(field_name="result") ) @dataclass class AutomodPlatformCircumventionConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - enabled: Optional[bool] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - rules: "Optional[List[AutomodRule]]" = dc_field( + rules: "list[AutomodRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -2750,13 +2715,11 @@ class AutomodRule(DataClassJsonMixin): @dataclass class AutomodSemanticFiltersConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - enabled: Optional[bool] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - rules: "Optional[List[AutomodSemanticFiltersRule]]" = dc_field( + rules: "list[AutomodSemanticFiltersRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -2770,13 +2733,11 @@ class AutomodSemanticFiltersRule(DataClassJsonMixin): @dataclass class AutomodToxicityConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - enabled: Optional[bool] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - rules: "Optional[List[AutomodRule]]" = dc_field( + rules: "list[AutomodRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -2798,17 +2759,17 @@ class AzureRequest(DataClassJsonMixin): @dataclass class BackstageSettings(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - join_ahead_time_seconds: Optional[int] = dc_field( + join_ahead_time_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="join_ahead_time_seconds") ) @dataclass class BackstageSettingsRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - join_ahead_time_seconds: Optional[int] = dc_field( + join_ahead_time_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="join_ahead_time_seconds") ) @@ -2816,7 +2777,7 @@ class BackstageSettingsRequest(DataClassJsonMixin): @dataclass class BackstageSettingsResponse(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - join_ahead_time_seconds: Optional[int] = dc_field( + join_ahead_time_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="join_ahead_time_seconds") ) @@ -2824,38 +2785,36 @@ class BackstageSettingsResponse(DataClassJsonMixin): @dataclass class BanActionRequestPayload(DataClassJsonMixin): # Also ban user from all channels this moderator creates in the future - ban_from_future_channels: Optional[bool] = dc_field( + ban_from_future_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="ban_from_future_channels") ) # Ban only from specific channel - channel_ban_only: Optional[bool] = dc_field( + channel_ban_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="channel_ban_only") ) - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) # Message deletion mode: soft, pruning, or hard - delete_messages: Optional[str] = dc_field( + delete_messages: str | None = dc_field( default=None, metadata=dc_config(field_name="delete_messages") ) # Whether to ban by IP address - ip_ban: Optional[bool] = dc_field( + ip_ban: bool | None = dc_field( default=None, metadata=dc_config(field_name="ip_ban") ) # Reason for the ban - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) # Whether this is a shadow ban - shadow: Optional[bool] = dc_field( + shadow: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow") ) # Optional: ban user directly without review item - target_user_id: Optional[str] = dc_field( + target_user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="target_user_id") ) # Duration of ban in minutes - timeout: Optional[int] = dc_field( + timeout: int | None = dc_field( default=None, metadata=dc_config(field_name="timeout") ) @@ -2872,11 +2831,11 @@ class BanInfoResponse(DataClassJsonMixin): ) ) # The channel this ban applies to. Empty if this is an app-wide (global) ban rather than a per-channel ban. - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) # When the ban expires - expires: Optional[datetime] = dc_field( + expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expires", @@ -2886,41 +2845,37 @@ class BanInfoResponse(DataClassJsonMixin): ), ) # Reason for the ban - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) # Whether this is a shadow ban - shadow: Optional[bool] = dc_field( + shadow: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow") ) - channel: "Optional[ChannelMetadata]" = dc_field( + channel: "ChannelMetadata | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class BanOptions(DataClassJsonMixin): - delete_messages: Optional[str] = dc_field( + delete_messages: str | None = dc_field( default=None, metadata=dc_config(field_name="delete_messages") ) - duration: Optional[int] = dc_field( + duration: int | None = dc_field( default=None, metadata=dc_config(field_name="duration") ) - ip_ban: Optional[bool] = dc_field( + ip_ban: bool | None = dc_field( default=None, metadata=dc_config(field_name="ip_ban") ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - shadow_ban: Optional[bool] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + shadow_ban: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow_ban") ) @@ -2930,34 +2885,32 @@ class BanRequest(DataClassJsonMixin): # ID of the user to ban target_user_id: str = dc_field(metadata=dc_config(field_name="target_user_id")) # ID of the user performing the ban - banned_by_id: Optional[str] = dc_field( + banned_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="banned_by_id") ) # Channel where the ban applies - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) - delete_messages: Optional[str] = dc_field( + delete_messages: str | None = dc_field( default=None, metadata=dc_config(field_name="delete_messages") ) # Whether to ban the user's IP address - ip_ban: Optional[bool] = dc_field( + ip_ban: bool | None = dc_field( default=None, metadata=dc_config(field_name="ip_ban") ) # Optional explanation for the ban - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) # Whether this is a shadow ban - shadow: Optional[bool] = dc_field( + shadow: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow") ) # Duration of the ban in minutes - timeout: Optional[int] = dc_field( + timeout: int | None = dc_field( default=None, metadata=dc_config(field_name="timeout") ) # User request object - banned_by: "Optional[UserRequest]" = dc_field( + banned_by: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="banned_by") ) @@ -2972,7 +2925,7 @@ class BanResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - expires: Optional[datetime] = dc_field( + expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expires", @@ -2981,22 +2934,20 @@ class BanResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - shadow: Optional[bool] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + shadow: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow") ) # User response object - banned_by: "Optional[UserResponse]" = dc_field( + banned_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="banned_by") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3004,25 +2955,23 @@ class BanResponse(DataClassJsonMixin): @dataclass class BatchQueryActivityReactionsRequest(DataClassJsonMixin): # Activity IDs to fetch the user's reactions for (max 100) - activity_ids: List[str] = dc_field(metadata=dc_config(field_name="activity_ids")) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + activity_ids: list[str] = dc_field(metadata=dc_config(field_name="activity_ids")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Server-side only. The user whose reactions to fetch; defaults to the authenticated user for client-side requests - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Optional filter on reaction_type or created_at - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3031,35 +2980,33 @@ class BatchQueryActivityReactionsRequest(DataClassJsonMixin): class BatchQueryActivityReactionsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - reactions: "List[FeedsReactionResponse]" = dc_field( + reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="reactions") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class BatchQueryCommentReactionsRequest(DataClassJsonMixin): # Comment IDs to fetch the user's reactions for (max 100) - comment_ids: List[str] = dc_field(metadata=dc_config(field_name="comment_ids")) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + comment_ids: list[str] = dc_field(metadata=dc_config(field_name="comment_ids")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Server-side only. The user whose reactions to fetch; defaults to the authenticated user for client-side requests - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Optional filter on reaction_type or created_at - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3068,33 +3015,29 @@ class BatchQueryCommentReactionsRequest(DataClassJsonMixin): class BatchQueryCommentReactionsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - reactions: "List[FeedsReactionResponse]" = dc_field( + reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="reactions") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class BlockActionRequestPayload(DataClassJsonMixin): # Reason for blocking - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass class BlockListConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - enabled: Optional[bool] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - match_substring: Optional[bool] = dc_field( + match_substring: bool | None = dc_field( default=None, metadata=dc_config(field_name="match_substring") ) - rules: "Optional[List[BlockListRule]]" = dc_field( + rules: "list[BlockListRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -3126,9 +3069,9 @@ class BlockListResponse(DataClassJsonMixin): # Block list type. One of: regex, domain, domain_allowlist, email, email_allowlist, word type: str = dc_field(metadata=dc_config(field_name="type")) # List of words to block - words: List[str] = dc_field(metadata=dc_config(field_name="words")) + words: list[str] = dc_field(metadata=dc_config(field_name="words")) # Date/time of creation - created_at: Optional[datetime] = dc_field( + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -3137,13 +3080,13 @@ class BlockListResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - owner_user_id: Optional[str] = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + owner_user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="owner_user_id") ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Date/time of the last update - updated_at: Optional[datetime] = dc_field( + updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="updated_at", @@ -3157,8 +3100,8 @@ class BlockListResponse(DataClassJsonMixin): @dataclass class BlockListRule(DataClassJsonMixin): action: str = dc_field(metadata=dc_config(field_name="action")) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) @dataclass @@ -3177,11 +3120,11 @@ class BlockUserResponse(DataClassJsonMixin): class BlockUsersRequest(DataClassJsonMixin): # User id to block blocked_user_id: str = dc_field(metadata=dc_config(field_name="blocked_user_id")) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3225,7 +3168,7 @@ class BlockedUserEvent(DataClassJsonMixin): default="call.blocked_user", metadata=dc_config(field_name="type") ) # User response object - blocked_by_user: "Optional[UserResponse]" = dc_field( + blocked_by_user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="blocked_by_user") ) @@ -3254,7 +3197,7 @@ class BlockedUserResponse(DataClassJsonMixin): @dataclass class BodyguardImageAnalysisConfig(DataClassJsonMixin): - rules: "Optional[List[BodyguardRule]]" = dc_field( + rules: "list[BodyguardRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -3262,10 +3205,10 @@ class BodyguardImageAnalysisConfig(DataClassJsonMixin): @dataclass class BodyguardProfileSummary(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) - display_name: Optional[str] = dc_field( + display_name: str | None = dc_field( default=None, metadata=dc_config(field_name="display_name") ) - text_type: Optional[str] = dc_field( + text_type: str | None = dc_field( default=None, metadata=dc_config(field_name="text_type") ) @@ -3273,10 +3216,8 @@ class BodyguardProfileSummary(DataClassJsonMixin): @dataclass class BodyguardRule(DataClassJsonMixin): label: str = dc_field(metadata=dc_config(field_name="label")) - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") - ) - severity_rules: "Optional[List[BodyguardSeverityRule]]" = dc_field( + action: str | None = dc_field(default=None, metadata=dc_config(field_name="action")) + severity_rules: "list[BodyguardSeverityRule] | None" = dc_field( default=None, metadata=dc_config(field_name="severity_rules") ) @@ -3299,12 +3240,12 @@ class BookmarkAddedEvent(DataClassJsonMixin): ) ) bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.bookmark.added" in this case type: str = dc_field( default="feeds.bookmark.added", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -3313,7 +3254,7 @@ class BookmarkAddedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3330,12 +3271,12 @@ class BookmarkDeletedEvent(DataClassJsonMixin): ) ) bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.bookmark.deleted" in this case type: str = dc_field( default="feeds.bookmark.deleted", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -3344,7 +3285,7 @@ class BookmarkDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3363,12 +3304,12 @@ class BookmarkFolderDeletedEvent(DataClassJsonMixin): bookmark_folder: "BookmarkFolderResponse" = dc_field( metadata=dc_config(field_name="bookmark_folder") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.bookmark_folder.deleted" in this case type: str = dc_field( default="feeds.bookmark_folder.deleted", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -3377,7 +3318,7 @@ class BookmarkFolderDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3409,7 +3350,7 @@ class BookmarkFolderResponse(DataClassJsonMixin): # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # Custom data for the folder - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -3428,12 +3369,12 @@ class BookmarkFolderUpdatedEvent(DataClassJsonMixin): bookmark_folder: "BookmarkFolderResponse" = dc_field( metadata=dc_config(field_name="bookmark_folder") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.bookmark_folder.updated" in this case type: str = dc_field( default="feeds.bookmark_folder.updated", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -3442,7 +3383,7 @@ class BookmarkFolderUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3474,17 +3415,17 @@ class BookmarkResponse(DataClassJsonMixin): activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - activity_id: Optional[str] = dc_field( + activity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="activity_id") ) - comment: "Optional[CommentResponse]" = dc_field( + comment: "CommentResponse | None" = dc_field( default=None, metadata=dc_config(field_name="comment") ) # Custom data for the bookmark - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - folder: "Optional[BookmarkFolderResponse]" = dc_field( + folder: "BookmarkFolderResponse | None" = dc_field( default=None, metadata=dc_config(field_name="folder") ) @@ -3501,12 +3442,12 @@ class BookmarkUpdatedEvent(DataClassJsonMixin): ) ) bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.bookmark.updated" in this case type: str = dc_field( default="feeds.bookmark.updated", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -3515,7 +3456,7 @@ class BookmarkUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3542,7 +3483,7 @@ class BroadcastDailyRollup(DataClassJsonMixin): unique_viewers_sum: int = dc_field( metadata=dc_config(field_name="unique_viewers_sum") ) - top_broadcasts: "List[TopBroadcast]" = dc_field( + top_broadcasts: "list[TopBroadcast]" = dc_field( metadata=dc_config(field_name="top_broadcasts") ) poor_viewers_by_cause: "PoorByCause" = dc_field( @@ -3573,8 +3514,8 @@ class BroadcastInfo(DataClassJsonMixin): duration_min: float = dc_field(metadata=dc_config(field_name="duration_min")) ended_at: str = dc_field(metadata=dc_config(field_name="ended_at")) started_at: str = dc_field(metadata=dc_config(field_name="started_at")) - creators: List[str] = dc_field(metadata=dc_config(field_name="creators")) - source_mode: Optional[str] = dc_field( + creators: list[str] = dc_field(metadata=dc_config(field_name="creators")) + source_mode: str | None = dc_field( default=None, metadata=dc_config(field_name="source_mode") ) @@ -3583,19 +3524,19 @@ class BroadcastInfo(DataClassJsonMixin): class BroadcastSegment(DataClassJsonMixin): key: str = dc_field(metadata=dc_config(field_name="key")) sessions: int = dc_field(metadata=dc_config(field_name="sessions")) - avg_quality_score: Optional[float] = dc_field( + avg_quality_score: float | None = dc_field( default=None, metadata=dc_config(field_name="avg_quality_score") ) - p5_quality_score: Optional[float] = dc_field( + p5_quality_score: float | None = dc_field( default=None, metadata=dc_config(field_name="p5_quality_score") ) - poor_pct: Optional[float] = dc_field( + poor_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="poor_pct") ) - share_pct: Optional[float] = dc_field( + share_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="share_pct") ) - watch_share_pct: Optional[float] = dc_field( + watch_share_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="watch_share_pct") ) @@ -3603,23 +3544,23 @@ class BroadcastSegment(DataClassJsonMixin): @dataclass class BroadcastSettings(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - hls: "Optional[HLSSettings]" = dc_field( + hls: "HLSSettings | None" = dc_field( default=None, metadata=dc_config(field_name="hls") ) - rtmp: "Optional[RTMPSettings]" = dc_field( + rtmp: "RTMPSettings | None" = dc_field( default=None, metadata=dc_config(field_name="rtmp") ) @dataclass class BroadcastSettingsRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - hls: "Optional[HLSSettingsRequest]" = dc_field( + hls: "HLSSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="hls") ) - rtmp: "Optional[RTMPSettingsRequest]" = dc_field( + rtmp: "RTMPSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="rtmp") ) @@ -3635,8 +3576,8 @@ class BroadcastSettingsResponse(DataClassJsonMixin): @dataclass class BrowserDataResponse(DataClassJsonMixin): - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - version: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + version: str | None = dc_field( default=None, metadata=dc_config(field_name="version") ) @@ -3646,32 +3587,32 @@ class BulkActionAppealsRequest(DataClassJsonMixin): # Action to apply: unban, restore, unblock, mark_reviewed, or reject_appeal action_type: str = dc_field(metadata=dc_config(field_name="action_type")) # List of appeal UUIDs to process - appeal_ids: List[str] = dc_field(metadata=dc_config(field_name="appeal_ids")) - user_id: Optional[str] = dc_field( + appeal_ids: list[str] = dc_field(metadata=dc_config(field_name="appeal_ids")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Configuration for mark reviewed action - mark_reviewed: "Optional[MarkReviewedRequestPayload]" = dc_field( + mark_reviewed: "MarkReviewedRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="mark_reviewed") ) # Configuration for rejecting an appeal - reject_appeal: "Optional[RejectAppealRequestPayload]" = dc_field( + reject_appeal: "RejectAppealRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="reject_appeal") ) - # Configuration for restore action - restore: "Optional[RestoreActionRequestPayload]" = dc_field( + # Configuration for restore action. State-aware: reverses whichever of a delete, a block, or a shadow block currently applies to the content (including both a delete and a block/shadow block at once). + restore: "RestoreActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="restore") ) # Configuration for unban moderation action - unban: "Optional[UnbanActionRequestPayload]" = dc_field( + unban: "UnbanActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="unban") ) - # Configuration for unblock action - unblock: "Optional[UnblockActionRequestPayload]" = dc_field( + # Deprecated: use restore instead — it now also reverses a block or shadow block. Configuration for unblock action. + unblock: "UnblockActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="unblock") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3680,9 +3621,9 @@ class BulkActionAppealsRequest(DataClassJsonMixin): class BulkActionAppealsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Appeals that could not be processed, with per-item error messages - errors: "List[BulkAppealError]" = dc_field(metadata=dc_config(field_name="errors")) + errors: "list[BulkAppealError]" = dc_field(metadata=dc_config(field_name="errors")) # Successfully processed appeals - results: "List[BulkAppealResult]" = dc_field( + results: "list[BulkAppealResult]" = dc_field( metadata=dc_config(field_name="results") ) @@ -3696,7 +3637,7 @@ class BulkAppealError(DataClassJsonMixin): @dataclass class BulkAppealResult(DataClassJsonMixin): appeal_id: str = dc_field(metadata=dc_config(field_name="appeal_id")) - appeal_item: "Optional[AppealItemResponse]" = dc_field( + appeal_item: "AppealItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="appeal_item") ) @@ -3704,12 +3645,12 @@ class BulkAppealResult(DataClassJsonMixin): @dataclass class BulkDeleteActionConfigRequest(DataClassJsonMixin): # UUIDs of the action configs to delete - ids: List[str] = dc_field(metadata=dc_config(field_name="ids")) - user_id: Optional[str] = dc_field( + ids: list[str] = dc_field(metadata=dc_config(field_name="ids")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3737,14 +3678,14 @@ class BulkImageModerationResponse(DataClassJsonMixin): @dataclass class BulkUpsertActionConfigRequest(DataClassJsonMixin): # List of action configs to create or update - action_configs: "List[UpsertActionConfigItem]" = dc_field( + action_configs: "list[UpsertActionConfigItem]" = dc_field( metadata=dc_config(field_name="action_configs") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -3753,14 +3694,14 @@ class BulkUpsertActionConfigRequest(DataClassJsonMixin): class BulkUpsertActionConfigResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # The created or updated action configs in the same order as the request - action_configs: "List[ModerationActionConfigResponse]" = dc_field( + action_configs: "list[ModerationActionConfigResponse]" = dc_field( metadata=dc_config(field_name="action_configs") ) @dataclass class BypassActionRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) @@ -3799,25 +3740,23 @@ class CallAcceptedEvent(DataClassJsonMixin): @dataclass class CallActionOptions(DataClassJsonMixin): - duration: Optional[int] = dc_field( + duration: int | None = dc_field( default=None, metadata=dc_config(field_name="duration") ) - flag_reason: Optional[str] = dc_field( + flag_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="flag_reason") ) - kick_reason: Optional[str] = dc_field( + kick_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="kick_reason") ) - mute_audio: Optional[bool] = dc_field( + mute_audio: bool | None = dc_field( default=None, metadata=dc_config(field_name="mute_audio") ) - mute_video: Optional[bool] = dc_field( + mute_video: bool | None = dc_field( default=None, metadata=dc_config(field_name="mute_video") ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - warning_text: Optional[str] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + warning_text: str | None = dc_field( default=None, metadata=dc_config(field_name="warning_text") ) @@ -3847,7 +3786,7 @@ class CallClosedCaption(DataClassJsonMixin): translated: bool = dc_field(metadata=dc_config(field_name="translated")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - service: Optional[str] = dc_field( + service: str | None = dc_field( default=None, metadata=dc_config(field_name="service") ) @@ -3915,7 +3854,7 @@ class CallCreatedEvent(DataClassJsonMixin): ) ) # the members added to this call - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # The type of event: "call.created" in this case @@ -3924,10 +3863,10 @@ class CallCreatedEvent(DataClassJsonMixin): @dataclass class CallCustomPropertyParameters(DataClassJsonMixin): - operator: Optional[str] = dc_field( + operator: str | None = dc_field( default=None, metadata=dc_config(field_name="operator") ) - property_key: Optional[str] = dc_field( + property_key: str | None = dc_field( default=None, metadata=dc_config(field_name="property_key") ) @@ -3983,14 +3922,14 @@ class CallDeletedEvent(DataClassJsonMixin): @dataclass class CallDurationReport(DataClassJsonMixin): - histogram: "List[ReportByHistogramBucket]" = dc_field( + histogram: "list[ReportByHistogramBucket]" = dc_field( metadata=dc_config(field_name="histogram") ) @dataclass class CallDurationReportResponse(DataClassJsonMixin): - daily: "List[DailyAggregateCallDurationReportResponse]" = dc_field( + daily: "list[DailyAggregateCallDurationReportResponse]" = dc_field( metadata=dc_config(field_name="daily") ) @@ -4011,15 +3950,13 @@ class CallEndedEvent(DataClassJsonMixin): # The type of event: "call.ended" in this case type: str = dc_field(default="call.ended", metadata=dc_config(field_name="type")) # The reason why the call ended, if available - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) # The list of members in the call - members: "Optional[List[MemberResponse]]" = dc_field( + members: "list[MemberResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -4072,7 +4009,7 @@ class CallFrameRecordingFrameReadyEvent(DataClassJsonMixin): # The URL of the frame url: str = dc_field(metadata=dc_config(field_name="url")) # The users in the frame - users: "Dict[str, UserResponse]" = dc_field(metadata=dc_config(field_name="users")) + users: "dict[str, UserResponse]" = dc_field(metadata=dc_config(field_name="users")) # The type of event: "call.frame_recording_ready" in this case type: str = dc_field( default="call.frame_recording_ready", metadata=dc_config(field_name="type") @@ -4186,7 +4123,7 @@ class CallLevelEventPayload(DataClassJsonMixin): event_type: str = dc_field(metadata=dc_config(field_name="event_type")) timestamp: int = dc_field(metadata=dc_config(field_name="timestamp")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - payload: Optional[Dict[str, object]] = dc_field( + payload: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="payload") ) @@ -4222,7 +4159,7 @@ class CallMemberAddedEvent(DataClassJsonMixin): ) ) # the members added to this call - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # The type of event: "call.member_added" in this case @@ -4243,7 +4180,7 @@ class CallMemberRemovedEvent(DataClassJsonMixin): ) ) # the list of member IDs removed from the call - members: List[str] = dc_field(metadata=dc_config(field_name="members")) + members: list[str] = dc_field(metadata=dc_config(field_name="members")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # The type of event: "call.member_removed" in this case @@ -4264,7 +4201,7 @@ class CallMemberUpdatedEvent(DataClassJsonMixin): ) ) # The list of members that were updated - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # The type of event: "call.member_updated" in this case @@ -4285,11 +4222,11 @@ class CallMemberUpdatedPermissionEvent(DataClassJsonMixin): ) ) # The list of members that were updated - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # The capabilities by role for this call - capabilities_by_role: "Dict[str, List[str]]" = dc_field( + capabilities_by_role: "dict[str, list[str]]" = dc_field( metadata=dc_config(field_name="capabilities_by_role") ) # The type of event: "call.member_added" in this case @@ -4313,7 +4250,7 @@ class CallMissedEvent(DataClassJsonMixin): # Call session ID session_id: str = dc_field(metadata=dc_config(field_name="session_id")) # List of members who missed the call - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # User response object @@ -4336,7 +4273,7 @@ class CallModerationBlurEvent(DataClassJsonMixin): # The user ID whose video stream is being blurred user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Custom data associated with the moderation action - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "call.moderation_blur" in this case type: str = dc_field( default="call.moderation_blur", metadata=dc_config(field_name="type") @@ -4359,7 +4296,7 @@ class CallModerationWarningEvent(DataClassJsonMixin): # The user ID who is receiving the warning user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Custom data associated with the moderation action - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "call.moderation_warning" in this case type: str = dc_field( default="call.moderation_warning", metadata=dc_config(field_name="type") @@ -4380,7 +4317,7 @@ class CallNotificationEvent(DataClassJsonMixin): # Call session ID session_id: str = dc_field(metadata=dc_config(field_name="session_id")) # Call members - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # User response object @@ -4393,14 +4330,14 @@ class CallNotificationEvent(DataClassJsonMixin): @dataclass class CallParticipantCountReport(DataClassJsonMixin): - histogram: "List[ReportByHistogramBucket]" = dc_field( + histogram: "list[ReportByHistogramBucket]" = dc_field( metadata=dc_config(field_name="histogram") ) @dataclass class CallParticipantCountReportResponse(DataClassJsonMixin): - daily: "List[DailyAggregateCallParticipantCountReportResponse]" = dc_field( + daily: "list[DailyAggregateCallParticipantCountReportResponse]" = dc_field( metadata=dc_config(field_name="daily") ) @@ -4433,7 +4370,7 @@ class CallParticipantTimeline(DataClassJsonMixin): ) ) type: str = dc_field(metadata=dc_config(field_name="type")) - data: Dict[str, object] = dc_field(metadata=dc_config(field_name="data")) + data: dict[str, object] = dc_field(metadata=dc_config(field_name="data")) @dataclass @@ -4582,15 +4519,13 @@ class CallRejectedEvent(DataClassJsonMixin): # The type of event: "call.rejected" in this case type: str = dc_field(default="call.rejected", metadata=dc_config(field_name="type")) # Provides information about why the call was rejected. You can provide any value, but the Stream API and SDKs use these default values: rejected, cancel, timeout and busy - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass class CallReportResponse(DataClassJsonMixin): score: float = dc_field(metadata=dc_config(field_name="score")) - ended_at: Optional[datetime] = dc_field( + ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ended_at", @@ -4599,7 +4534,7 @@ class CallReportResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - started_at: Optional[datetime] = dc_field( + started_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="started_at", @@ -4612,13 +4547,13 @@ class CallReportResponse(DataClassJsonMixin): @dataclass class CallRequest(DataClassJsonMixin): - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) - created_by_id: Optional[str] = dc_field( + created_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_id") ) - starts_at: Optional[datetime] = dc_field( + starts_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="starts_at", @@ -4627,21 +4562,19 @@ class CallRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - video: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="video") - ) - members: "Optional[List[MemberRequest]]" = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + video: bool | None = dc_field(default=None, metadata=dc_config(field_name="video")) + members: "list[MemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) # User request object - created_by: "Optional[UserRequest]" = dc_field( + created_by: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - settings_override: "Optional[CallSettingsRequest]" = dc_field( + settings_override: "CallSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="settings_override") ) @@ -4680,24 +4613,24 @@ class CallResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_ids: List[str] = dc_field( + blocked_user_ids: list[str] = dc_field( metadata=dc_config(field_name="blocked_user_ids") ) # User response object created_by: "UserResponse" = dc_field(metadata=dc_config(field_name="created_by")) # Custom data for this object - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) egress: "EgressResponse" = dc_field(metadata=dc_config(field_name="egress")) # CallIngressResponse is the payload for ingress settings ingress: "CallIngressResponse" = dc_field(metadata=dc_config(field_name="ingress")) settings: "CallSettingsResponse" = dc_field( metadata=dc_config(field_name="settings") ) - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) # Date/time when the call ended - ended_at: Optional[datetime] = dc_field( + ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ended_at", @@ -4706,15 +4639,15 @@ class CallResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - join_ahead_time_seconds: Optional[int] = dc_field( + join_ahead_time_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="join_ahead_time_seconds") ) # 10-digit routing number for SIP routing - routing_number: Optional[str] = dc_field( + routing_number: str | None = dc_field( default=None, metadata=dc_config(field_name="routing_number") ) # Date/time when the call will start - starts_at: Optional[datetime] = dc_field( + starts_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="starts_at", @@ -4723,11 +4656,11 @@ class CallResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - session: "Optional[CallSessionResponse]" = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + session: "CallSessionResponse | None" = dc_field( default=None, metadata=dc_config(field_name="session") ) - thumbnails: "Optional[ThumbnailResponse]" = dc_field( + thumbnails: "ThumbnailResponse | None" = dc_field( default=None, metadata=dc_config(field_name="thumbnails") ) @@ -4747,7 +4680,7 @@ class CallRingEvent(DataClassJsonMixin): session_id: str = dc_field(metadata=dc_config(field_name="session_id")) video: bool = dc_field(metadata=dc_config(field_name="video")) # Call members - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # User response object @@ -4821,13 +4754,13 @@ class CallRtmpBroadcastStoppedEvent(DataClassJsonMixin): @dataclass class CallRuleActionSequence(DataClassJsonMixin): - violation_number: Optional[int] = dc_field( + violation_number: int | None = dc_field( default=None, metadata=dc_config(field_name="violation_number") ) - actions: Optional[List[str]] = dc_field( + actions: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="actions") ) - call_options: "Optional[CallActionOptions]" = dc_field( + call_options: "CallActionOptions | None" = dc_field( default=None, metadata=dc_config(field_name="call_options") ) @@ -4869,7 +4802,7 @@ class CallSessionParticipantCountsUpdatedEvent(DataClassJsonMixin): ) # Call session ID session_id: str = dc_field(metadata=dc_config(field_name="session_id")) - participants_count_by_role: "Dict[str, int]" = dc_field( + participants_count_by_role: "dict[str, int]" = dc_field( metadata=dc_config(field_name="participants_count_by_role") ) # The type of event: "call.session_participant_count_updated" in this case @@ -4924,9 +4857,7 @@ class CallSessionParticipantLeftEvent(DataClassJsonMixin): default="call.session_participant_left", metadata=dc_config(field_name="type") ) # The reason why the participant left the session - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass @@ -4935,10 +4866,10 @@ class CallSessionResponse(DataClassJsonMixin): metadata=dc_config(field_name="anonymous_participant_count") ) id: str = dc_field(metadata=dc_config(field_name="id")) - participants: "List[CallParticipantResponse]" = dc_field( + participants: "list[CallParticipantResponse]" = dc_field( metadata=dc_config(field_name="participants") ) - accepted_by: "Dict[str, datetime]" = dc_field( + accepted_by: "dict[str, datetime]" = dc_field( metadata=dc_config( field_name="accepted_by", encoder=encode_datetime, @@ -4946,7 +4877,7 @@ class CallSessionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - missed_by: "Dict[str, datetime]" = dc_field( + missed_by: "dict[str, datetime]" = dc_field( metadata=dc_config( field_name="missed_by", encoder=encode_datetime, @@ -4954,10 +4885,10 @@ class CallSessionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - participants_count_by_role: "Dict[str, int]" = dc_field( + participants_count_by_role: "dict[str, int]" = dc_field( metadata=dc_config(field_name="participants_count_by_role") ) - rejected_by: "Dict[str, datetime]" = dc_field( + rejected_by: "dict[str, datetime]" = dc_field( metadata=dc_config( field_name="rejected_by", encoder=encode_datetime, @@ -4965,7 +4896,7 @@ class CallSessionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - ended_at: Optional[datetime] = dc_field( + ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ended_at", @@ -4974,7 +4905,7 @@ class CallSessionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - live_ended_at: Optional[datetime] = dc_field( + live_ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="live_ended_at", @@ -4983,7 +4914,7 @@ class CallSessionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - live_started_at: Optional[datetime] = dc_field( + live_started_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="live_started_at", @@ -4992,7 +4923,7 @@ class CallSessionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - started_at: Optional[datetime] = dc_field( + started_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="started_at", @@ -5001,7 +4932,7 @@ class CallSessionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - timer_ends_at: Optional[datetime] = dc_field( + timer_ends_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="timer_ends_at", @@ -5035,107 +4966,107 @@ class CallSessionStartedEvent(DataClassJsonMixin): @dataclass class CallSettings(DataClassJsonMixin): - audio: "Optional[AudioSettings]" = dc_field( + audio: "AudioSettings | None" = dc_field( default=None, metadata=dc_config(field_name="audio") ) - backstage: "Optional[BackstageSettings]" = dc_field( + backstage: "BackstageSettings | None" = dc_field( default=None, metadata=dc_config(field_name="backstage") ) - broadcasting: "Optional[BroadcastSettings]" = dc_field( + broadcasting: "BroadcastSettings | None" = dc_field( default=None, metadata=dc_config(field_name="broadcasting") ) - frame_recording: "Optional[FrameRecordSettings]" = dc_field( + frame_recording: "FrameRecordSettings | None" = dc_field( default=None, metadata=dc_config(field_name="frame_recording") ) - geofencing: "Optional[GeofenceSettings]" = dc_field( + geofencing: "GeofenceSettings | None" = dc_field( default=None, metadata=dc_config(field_name="geofencing") ) - individual_recording: "Optional[IndividualRecordSettings]" = dc_field( + individual_recording: "IndividualRecordSettings | None" = dc_field( default=None, metadata=dc_config(field_name="individual_recording") ) - ingress: "Optional[IngressSettings]" = dc_field( + ingress: "IngressSettings | None" = dc_field( default=None, metadata=dc_config(field_name="ingress") ) - limits: "Optional[LimitsSettings]" = dc_field( + limits: "LimitsSettings | None" = dc_field( default=None, metadata=dc_config(field_name="limits") ) - raw_recording: "Optional[RawRecordSettings]" = dc_field( + raw_recording: "RawRecordSettings | None" = dc_field( default=None, metadata=dc_config(field_name="raw_recording") ) - recording: "Optional[RecordSettings]" = dc_field( + recording: "RecordSettings | None" = dc_field( default=None, metadata=dc_config(field_name="recording") ) - ring: "Optional[RingSettings]" = dc_field( + ring: "RingSettings | None" = dc_field( default=None, metadata=dc_config(field_name="ring") ) - screensharing: "Optional[ScreensharingSettings]" = dc_field( + screensharing: "ScreensharingSettings | None" = dc_field( default=None, metadata=dc_config(field_name="screensharing") ) - session: "Optional[SessionSettings]" = dc_field( + session: "SessionSettings | None" = dc_field( default=None, metadata=dc_config(field_name="session") ) - thumbnails: "Optional[ThumbnailsSettings]" = dc_field( + thumbnails: "ThumbnailsSettings | None" = dc_field( default=None, metadata=dc_config(field_name="thumbnails") ) - transcription: "Optional[TranscriptionSettings]" = dc_field( + transcription: "TranscriptionSettings | None" = dc_field( default=None, metadata=dc_config(field_name="transcription") ) - video: "Optional[VideoSettings]" = dc_field( + video: "VideoSettings | None" = dc_field( default=None, metadata=dc_config(field_name="video") ) @dataclass class CallSettingsRequest(DataClassJsonMixin): - audio: "Optional[AudioSettingsRequest]" = dc_field( + audio: "AudioSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="audio") ) - backstage: "Optional[BackstageSettingsRequest]" = dc_field( + backstage: "BackstageSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="backstage") ) - broadcasting: "Optional[BroadcastSettingsRequest]" = dc_field( + broadcasting: "BroadcastSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="broadcasting") ) - encryption: "Optional[EncryptionSettingsRequest]" = dc_field( + encryption: "EncryptionSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="encryption") ) - frame_recording: "Optional[FrameRecordingSettingsRequest]" = dc_field( + frame_recording: "FrameRecordingSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="frame_recording") ) - geofencing: "Optional[GeofenceSettingsRequest]" = dc_field( + geofencing: "GeofenceSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="geofencing") ) - individual_recording: "Optional[IndividualRecordingSettingsRequest]" = dc_field( + individual_recording: "IndividualRecordingSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="individual_recording") ) - ingress: "Optional[IngressSettingsRequest]" = dc_field( + ingress: "IngressSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="ingress") ) - limits: "Optional[LimitsSettingsRequest]" = dc_field( + limits: "LimitsSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="limits") ) - raw_recording: "Optional[RawRecordingSettingsRequest]" = dc_field( + raw_recording: "RawRecordingSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="raw_recording") ) - recording: "Optional[RecordSettingsRequest]" = dc_field( + recording: "RecordSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="recording") ) - ring: "Optional[RingSettingsRequest]" = dc_field( + ring: "RingSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="ring") ) - screensharing: "Optional[ScreensharingSettingsRequest]" = dc_field( + screensharing: "ScreensharingSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="screensharing") ) - session: "Optional[SessionSettingsRequest]" = dc_field( + session: "SessionSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="session") ) - thumbnails: "Optional[ThumbnailsSettingsRequest]" = dc_field( + thumbnails: "ThumbnailsSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="thumbnails") ) - transcription: "Optional[TranscriptionSettingsRequest]" = dc_field( + transcription: "TranscriptionSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="transcription") ) - video: "Optional[VideoSettingsRequest]" = dc_field( + video: "VideoSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="video") ) @@ -5185,7 +5116,7 @@ class CallSettingsResponse(DataClassJsonMixin): metadata=dc_config(field_name="transcription") ) video: "VideoSettingsResponse" = dc_field(metadata=dc_config(field_name="video")) - ingress: "Optional[IngressSettingsResponse]" = dc_field( + ingress: "IngressSettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="ingress") ) @@ -5193,8 +5124,8 @@ class CallSettingsResponse(DataClassJsonMixin): @dataclass class CallStateResponseFields(DataClassJsonMixin): # List of call members - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) - own_capabilities: "List[OwnCapability]" = dc_field( + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + own_capabilities: "list[OwnCapability]" = dc_field( metadata=dc_config(field_name="own_capabilities") ) # Represents a call @@ -5203,26 +5134,26 @@ class CallStateResponseFields(DataClassJsonMixin): @dataclass class CallStatsLocation(DataClassJsonMixin): - accuracy_radius_meters: Optional[int] = dc_field( + accuracy_radius_meters: int | None = dc_field( default=None, metadata=dc_config(field_name="accuracy_radius_meters") ) - city: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="city")) - continent: Optional[str] = dc_field( + city: str | None = dc_field(default=None, metadata=dc_config(field_name="city")) + continent: str | None = dc_field( default=None, metadata=dc_config(field_name="continent") ) - country: Optional[str] = dc_field( + country: str | None = dc_field( default=None, metadata=dc_config(field_name="country") ) - country_iso_code: Optional[str] = dc_field( + country_iso_code: str | None = dc_field( default=None, metadata=dc_config(field_name="country_iso_code") ) - latitude: Optional[float] = dc_field( + latitude: float | None = dc_field( default=None, metadata=dc_config(field_name="latitude") ) - longitude: Optional[float] = dc_field( + longitude: float | None = dc_field( default=None, metadata=dc_config(field_name="longitude") ) - subdivision: Optional[str] = dc_field( + subdivision: str | None = dc_field( default=None, metadata=dc_config(field_name="subdivision") ) @@ -5231,7 +5162,7 @@ class CallStatsLocation(DataClassJsonMixin): class CallStatsMapLocation(DataClassJsonMixin): count: int = dc_field(metadata=dc_config(field_name="count")) live_count: int = dc_field(metadata=dc_config(field_name="live_count")) - location: "Optional[CallStatsLocation]" = dc_field( + location: "CallStatsLocation | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @@ -5244,25 +5175,25 @@ class CallStatsMapPublisher(DataClassJsonMixin): published_tracks: "PublishedTrackFlags" = dc_field( metadata=dc_config(field_name="published_tracks") ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - publisher_type: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + publisher_type: str | None = dc_field( default=None, metadata=dc_config(field_name="publisher_type") ) - location: "Optional[CallStatsLocation]" = dc_field( + location: "CallStatsLocation | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @dataclass class CallStatsMapPublishers(DataClassJsonMixin): - publishers: "List[CallStatsMapPublisher]" = dc_field( + publishers: "list[CallStatsMapPublisher]" = dc_field( metadata=dc_config(field_name="publishers") ) @dataclass class CallStatsMapSFUs(DataClassJsonMixin): - locations: "List[SFULocationResponse]" = dc_field( + locations: "list[SFULocationResponse]" = dc_field( metadata=dc_config(field_name="locations") ) @@ -5272,18 +5203,18 @@ class CallStatsMapSubscriber(DataClassJsonMixin): is_live: bool = dc_field(metadata=dc_config(field_name="is_live")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) user_session_id: str = dc_field(metadata=dc_config(field_name="user_session_id")) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - location: "Optional[CallStatsLocation]" = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + location: "CallStatsLocation | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @dataclass class CallStatsMapSubscribers(DataClassJsonMixin): - locations: "List[CallStatsMapLocation]" = dc_field( + locations: "list[CallStatsMapLocation]" = dc_field( metadata=dc_config(field_name="locations") ) - participants: "Optional[List[CallStatsMapSubscriber]]" = dc_field( + participants: "list[CallStatsMapSubscriber] | None" = dc_field( default=None, metadata=dc_config(field_name="participants") ) @@ -5291,10 +5222,10 @@ class CallStatsMapSubscribers(DataClassJsonMixin): @dataclass class CallStatsParticipant(DataClassJsonMixin): user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - sessions: "List[CallStatsParticipantSession]" = dc_field( + sessions: "list[CallStatsParticipantSession]" = dc_field( metadata=dc_config(field_name="sessions") ) - latest_activity_at: Optional[datetime] = dc_field( + latest_activity_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="latest_activity_at", @@ -5303,8 +5234,8 @@ class CallStatsParticipant(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - roles: Optional[List[str]] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + roles: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="roles") ) @@ -5322,28 +5253,28 @@ class CallStatsParticipantCounts(DataClassJsonMixin): publishers: int = dc_field(metadata=dc_config(field_name="publishers")) sessions: int = dc_field(metadata=dc_config(field_name="sessions")) sfus_used: int = dc_field(metadata=dc_config(field_name="sfus_used")) - average_jitter_ms: Optional[int] = dc_field( + average_jitter_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="average_jitter_ms") ) - average_latency_ms: Optional[int] = dc_field( + average_latency_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="average_latency_ms") ) - avg_user_rating: Optional[float] = dc_field( + avg_user_rating: float | None = dc_field( default=None, metadata=dc_config(field_name="avg_user_rating") ) - call_event_count: Optional[int] = dc_field( + call_event_count: int | None = dc_field( default=None, metadata=dc_config(field_name="call_event_count") ) - cq_score: Optional[int] = dc_field( + cq_score: int | None = dc_field( default=None, metadata=dc_config(field_name="cq_score") ) - max_freezes_duration_ms: Optional[int] = dc_field( + max_freezes_duration_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="max_freezes_duration_ms") ) - min_user_rating: Optional[int] = dc_field( + min_user_rating: int | None = dc_field( default=None, metadata=dc_config(field_name="min_user_rating") ) - total_participant_duration: Optional[int] = dc_field( + total_participant_duration: int | None = dc_field( default=None, metadata=dc_config(field_name="total_participant_duration") ) @@ -5355,25 +5286,25 @@ class CallStatsParticipantSession(DataClassJsonMixin): published_tracks: "PublishedTrackFlags" = dc_field( metadata=dc_config(field_name="published_tracks") ) - browser: Optional[str] = dc_field( + browser: str | None = dc_field( default=None, metadata=dc_config(field_name="browser") ) - browser_version: Optional[str] = dc_field( + browser_version: str | None = dc_field( default=None, metadata=dc_config(field_name="browser_version") ) - cq_score: Optional[int] = dc_field( + cq_score: int | None = dc_field( default=None, metadata=dc_config(field_name="cq_score") ) - current_ip: Optional[str] = dc_field( + current_ip: str | None = dc_field( default=None, metadata=dc_config(field_name="current_ip") ) - current_sfu: Optional[str] = dc_field( + current_sfu: str | None = dc_field( default=None, metadata=dc_config(field_name="current_sfu") ) - distance_to_sfu_kilometers: Optional[float] = dc_field( + distance_to_sfu_kilometers: float | None = dc_field( default=None, metadata=dc_config(field_name="distance_to_sfu_kilometers") ) - ended_at: Optional[datetime] = dc_field( + ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ended_at", @@ -5382,27 +5313,27 @@ class CallStatsParticipantSession(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - freezes_duration_ms: Optional[int] = dc_field( + freezes_duration_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="freezes_duration_ms") ) - ingress: Optional[str] = dc_field( + ingress: str | None = dc_field( default=None, metadata=dc_config(field_name="ingress") ) - jitter_ms: Optional[int] = dc_field( + jitter_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="jitter_ms") ) - latency_ms: Optional[int] = dc_field( + latency_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="latency_ms") ) - os: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="os")) - publisher_type: Optional[str] = dc_field( + os: str | None = dc_field(default=None, metadata=dc_config(field_name="os")) + publisher_type: str | None = dc_field( default=None, metadata=dc_config(field_name="publisher_type") ) - sdk: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="sdk")) - sdk_version: Optional[str] = dc_field( + sdk: str | None = dc_field(default=None, metadata=dc_config(field_name="sdk")) + sdk_version: str | None = dc_field( default=None, metadata=dc_config(field_name="sdk_version") ) - started_at: Optional[datetime] = dc_field( + started_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="started_at", @@ -5411,13 +5342,13 @@ class CallStatsParticipantSession(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - unified_session_id: Optional[str] = dc_field( + unified_session_id: str | None = dc_field( default=None, metadata=dc_config(field_name="unified_session_id") ) - webrtc_version: Optional[str] = dc_field( + webrtc_version: str | None = dc_field( default=None, metadata=dc_config(field_name="webrtc_version") ) - location: "Optional[CallStatsLocation]" = dc_field( + location: "CallStatsLocation | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @@ -5443,11 +5374,11 @@ class CallStatsReportReadyEvent(DataClassJsonMixin): default="call.stats_report_ready", metadata=dc_config(field_name="type") ) # Whether participants_overview is truncated by the server-side limit - is_trimmed: Optional[bool] = dc_field( + is_trimmed: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_trimmed") ) # Top participant sessions overview - participants_overview: "Optional[List[CallStatsParticipant]]" = dc_field( + participants_overview: "list[CallStatsParticipant] | None" = dc_field( default=None, metadata=dc_config(field_name="participants_overview") ) @@ -5468,7 +5399,7 @@ class CallStatsReportSummaryResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - created_at: Optional[datetime] = dc_field( + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -5477,10 +5408,10 @@ class CallStatsReportSummaryResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - min_user_rating: Optional[int] = dc_field( + min_user_rating: int | None = dc_field( default=None, metadata=dc_config(field_name="min_user_rating") ) - quality_score: Optional[int] = dc_field( + quality_score: int | None = dc_field( default=None, metadata=dc_config(field_name="quality_score") ) @@ -5501,7 +5432,7 @@ class CallStatsSessionResponse(DataClassJsonMixin): counts: "CallStatsParticipantCounts" = dc_field( metadata=dc_config(field_name="counts") ) - call_ended_at: Optional[datetime] = dc_field( + call_ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="call_ended_at", @@ -5510,7 +5441,7 @@ class CallStatsSessionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - call_started_at: Optional[datetime] = dc_field( + call_started_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="call_started_at", @@ -5561,9 +5492,7 @@ class CallTranscriptionFailedEvent(DataClassJsonMixin): default="call.transcription_failed", metadata=dc_config(field_name="type") ) # The error message detailing why transcription failed. - error: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="error") - ) + error: str | None = dc_field(default=None, metadata=dc_config(field_name="error")) @dataclass @@ -5648,10 +5577,10 @@ class CallType(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - notification_settings: "Optional[NotificationSettings]" = dc_field( + notification_settings: "NotificationSettings | None" = dc_field( default=None, metadata=dc_config(field_name="notification_settings") ) - settings: "Optional[CallSettings]" = dc_field( + settings: "CallSettings | None" = dc_field( default=None, metadata=dc_config(field_name="settings") ) @@ -5679,7 +5608,7 @@ class CallTypeResponse(DataClassJsonMixin): ) ) # the permissions granted to each role - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) notification_settings: "NotificationSettingsResponse" = dc_field( metadata=dc_config(field_name="notification_settings") ) @@ -5687,14 +5616,14 @@ class CallTypeResponse(DataClassJsonMixin): metadata=dc_config(field_name="settings") ) # the external storage for the call type - external_storage: Optional[str] = dc_field( + external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="external_storage") ) @dataclass class CallTypeRuleParameters(DataClassJsonMixin): - call_type: Optional[str] = dc_field( + call_type: str | None = dc_field( default=None, metadata=dc_config(field_name="call_type") ) @@ -5713,7 +5642,7 @@ class CallUpdatedEvent(DataClassJsonMixin): # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) # The capabilities by role for this call - capabilities_by_role: "Dict[str, List[str]]" = dc_field( + capabilities_by_role: "dict[str, list[str]]" = dc_field( metadata=dc_config(field_name="capabilities_by_role") ) # The type of event: "call.updated" in this case @@ -5742,15 +5671,13 @@ class CallUserFeedbackSubmittedEvent(DataClassJsonMixin): default="call.user_feedback_submitted", metadata=dc_config(field_name="type") ) # The reason provided by the user for the rating - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - sdk: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="sdk")) - sdk_version: Optional[str] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + sdk: str | None = dc_field(default=None, metadata=dc_config(field_name="sdk")) + sdk_version: str | None = dc_field( default=None, metadata=dc_config(field_name="sdk_version") ) # Custom data provided by the user - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -5768,7 +5695,7 @@ class CallUserMutedEvent(DataClassJsonMixin): ) from_user_id: str = dc_field(metadata=dc_config(field_name="from_user_id")) reason: str = dc_field(metadata=dc_config(field_name="reason")) - muted_user_ids: List[str] = dc_field( + muted_user_ids: list[str] = dc_field( metadata=dc_config(field_name="muted_user_ids") ) # The type of event: "call.user_muted" in this case @@ -5779,10 +5706,10 @@ class CallUserMutedEvent(DataClassJsonMixin): @dataclass class CallViolationCountParameters(DataClassJsonMixin): - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) @@ -5794,7 +5721,7 @@ class CallsPerDayReport(DataClassJsonMixin): @dataclass class CallsPerDayReportResponse(DataClassJsonMixin): - daily: "List[DailyAggregateCallsPerDayReportResponse]" = dc_field( + daily: "list[DailyAggregateCallsPerDayReportResponse]" = dc_field( metadata=dc_config(field_name="daily") ) @@ -5802,10 +5729,10 @@ class CallsPerDayReportResponse(DataClassJsonMixin): @dataclass class CampaignChannelMember(DataClassJsonMixin): user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - channel_role: Optional[str] = dc_field( + channel_role: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_role") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -5813,15 +5740,15 @@ class CampaignChannelMember(DataClassJsonMixin): @dataclass class CampaignChannelTemplate(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - members: Optional[List[str]] = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + members: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="members") ) - members_template: "Optional[List[CampaignChannelMember]]" = dc_field( + members_template: "list[CampaignChannelMember] | None" = dc_field( default=None, metadata=dc_config(field_name="members_template") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -5836,11 +5763,11 @@ class CampaignCompletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="campaign.completed", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -5849,7 +5776,7 @@ class CampaignCompletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - campaign: "Optional[CampaignResponse]" = dc_field( + campaign: "CampaignResponse | None" = dc_field( default=None, metadata=dc_config(field_name="campaign") ) @@ -5857,16 +5784,16 @@ class CampaignCompletedEvent(DataClassJsonMixin): @dataclass class CampaignMessageTemplate(DataClassJsonMixin): text: str = dc_field(metadata=dc_config(field_name="text")) - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) - searchable: Optional[bool] = dc_field( + searchable: bool | None = dc_field( default=None, metadata=dc_config(field_name="searchable") ) - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -5902,12 +5829,12 @@ class CampaignResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - segment_ids: List[str] = dc_field(metadata=dc_config(field_name="segment_ids")) - segments: "List[Segment]" = dc_field(metadata=dc_config(field_name="segments")) - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) - users: "List[UserResponse]" = dc_field(metadata=dc_config(field_name="users")) + segment_ids: list[str] = dc_field(metadata=dc_config(field_name="segment_ids")) + segments: "list[Segment]" = dc_field(metadata=dc_config(field_name="segments")) + user_ids: list[str] = dc_field(metadata=dc_config(field_name="user_ids")) + users: "list[UserResponse]" = dc_field(metadata=dc_config(field_name="users")) stats: "CampaignStatsResponse" = dc_field(metadata=dc_config(field_name="stats")) - scheduled_for: Optional[datetime] = dc_field( + scheduled_for: datetime | None = dc_field( default=None, metadata=dc_config( field_name="scheduled_for", @@ -5916,7 +5843,7 @@ class CampaignResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - stop_at: Optional[datetime] = dc_field( + stop_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="stop_at", @@ -5925,14 +5852,14 @@ class CampaignResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - channel_template: "Optional[CampaignChannelTemplate]" = dc_field( + channel_template: "CampaignChannelTemplate | None" = dc_field( default=None, metadata=dc_config(field_name="channel_template") ) - message_template: "Optional[CampaignMessageTemplate]" = dc_field( + message_template: "CampaignMessageTemplate | None" = dc_field( default=None, metadata=dc_config(field_name="message_template") ) # User response object - sender: "Optional[UserResponse]" = dc_field( + sender: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="sender") ) @@ -5947,11 +5874,11 @@ class CampaignStartedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="campaign.started", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -5960,7 +5887,7 @@ class CampaignStartedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - campaign: "Optional[CampaignResponse]" = dc_field( + campaign: "CampaignResponse | None" = dc_field( default=None, metadata=dc_config(field_name="campaign") ) @@ -6007,14 +5934,14 @@ class CancelImportV2TaskResponse(DataClassJsonMixin): @dataclass class CastPollVoteRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) - vote: "Optional[VoteData]" = dc_field( + vote: "VoteData | None" = dc_field( default=None, metadata=dc_config(field_name="vote") ) @@ -6024,7 +5951,7 @@ class ChangeFeedVisibilityRequest(DataClassJsonMixin): # Feed visibility level: public, visible, followers, members, or private visibility: str = dc_field(metadata=dc_config(field_name="visibility")) # What to do with existing pending follows when loosening visibility from 'followers': auto_approve (default) or reject - pending_follows_action: Optional[str] = dc_field( + pending_follows_action: str | None = dc_field( default=None, metadata=dc_config(field_name="pending_follows_action") ) @@ -6067,14 +5994,14 @@ class ChannelBatchCompletedEvent(DataClassJsonMixin): metadata=dc_config(field_name="success_channels_count") ) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - failed_channels: "List[FailedChannelUpdates]" = dc_field( + failed_channels: "list[FailedChannelUpdates]" = dc_field( metadata=dc_config(field_name="failed_channels") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="channel_batch_update.completed", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -6088,7 +6015,7 @@ class ChannelBatchCompletedEvent(DataClassJsonMixin): @dataclass class ChannelBatchMemberRequest(DataClassJsonMixin): user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - channel_role: Optional[str] = dc_field( + channel_role: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_role") ) @@ -6125,14 +6052,14 @@ class ChannelBatchStartedEvent(DataClassJsonMixin): metadata=dc_config(field_name="success_channels_count") ) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - failed_channels: "List[FailedChannelUpdates]" = dc_field( + failed_channels: "list[FailedChannelUpdates]" = dc_field( metadata=dc_config(field_name="failed_channels") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="channel_batch_update.started", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -6147,11 +6074,11 @@ class ChannelBatchStartedEvent(DataClassJsonMixin): class ChannelBatchUpdateRequest(DataClassJsonMixin): operation: str = dc_field(metadata=dc_config(field_name="operation")) # Filter to apply to the query - filter: Dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) - members: "Optional[List[ChannelBatchMemberRequest]]" = dc_field( + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + members: "list[ChannelBatchMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) - data: "Optional[ChannelDataUpdate]" = dc_field( + data: "ChannelDataUpdate | None" = dc_field( default=None, metadata=dc_config(field_name="data") ) @@ -6160,7 +6087,7 @@ class ChannelBatchUpdateRequest(DataClassJsonMixin): class ChannelBatchUpdateResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - task_id: Optional[str] = dc_field( + task_id: str | None = dc_field( default=None, metadata=dc_config(field_name="task_id") ) @@ -6187,6 +6114,9 @@ class ChannelConfig(DataClassJsonMixin): max_message_length: int = dc_field( metadata=dc_config(field_name="max_message_length") ) + message_retention: str = dc_field( + metadata=dc_config(field_name="message_retention") + ) mutes: bool = dc_field(metadata=dc_config(field_name="mutes")) name: str = dc_field(metadata=dc_config(field_name="name")) polls: bool = dc_field(metadata=dc_config(field_name="polls")) @@ -6218,97 +6148,97 @@ class ChannelConfig(DataClassJsonMixin): metadata=dc_config(field_name="user_message_reminders") ) # List of commands that channel supports - commands: List[str] = dc_field(metadata=dc_config(field_name="commands")) - blocklist: Optional[str] = dc_field( + commands: list[str] = dc_field(metadata=dc_config(field_name="commands")) + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) - partition_size: Optional[int] = dc_field( + partition_size: int | None = dc_field( default=None, metadata=dc_config(field_name="partition_size") ) - partition_ttl: Optional[str] = dc_field( + partition_ttl: str | None = dc_field( default=None, metadata=dc_config(field_name="partition_ttl") ) - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - blocklists: "Optional[List[BlockListOptions]]" = dc_field( + blocklists: "list[BlockListOptions] | None" = dc_field( default=None, metadata=dc_config(field_name="blocklists") ) # Sets thresholds for AI moderation - automod_thresholds: "Optional[Thresholds]" = dc_field( + automod_thresholds: "Thresholds | None" = dc_field( default=None, metadata=dc_config(field_name="automod_thresholds") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) @dataclass class ChannelConfigOverrides(DataClassJsonMixin): - blocklist: Optional[str] = dc_field( + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) # Enable/disable message counting - count_messages: Optional[bool] = dc_field( + count_messages: bool | None = dc_field( default=None, metadata=dc_config(field_name="count_messages") ) # Overrides max message length - max_message_length: Optional[int] = dc_field( + max_message_length: int | None = dc_field( default=None, metadata=dc_config(field_name="max_message_length") ) # Overrides the push notification level for this channel - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) # Enables message quotes - quotes: Optional[bool] = dc_field( + quotes: bool | None = dc_field( default=None, metadata=dc_config(field_name="quotes") ) # Enables or disables reactions - reactions: Optional[bool] = dc_field( + reactions: bool | None = dc_field( default=None, metadata=dc_config(field_name="reactions") ) # Enables message replies (threads) - replies: Optional[bool] = dc_field( + replies: bool | None = dc_field( default=None, metadata=dc_config(field_name="replies") ) # Enable/disable shared locations - shared_locations: Optional[bool] = dc_field( + shared_locations: bool | None = dc_field( default=None, metadata=dc_config(field_name="shared_locations") ) # Enables or disables typing events - typing_events: Optional[bool] = dc_field( + typing_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="typing_events") ) # Enables or disables file uploads - uploads: Optional[bool] = dc_field( + uploads: bool | None = dc_field( default=None, metadata=dc_config(field_name="uploads") ) # Enables or disables URL enrichment - url_enrichment: Optional[bool] = dc_field( + url_enrichment: bool | None = dc_field( default=None, metadata=dc_config(field_name="url_enrichment") ) # Enable/disable user message reminders - user_message_reminders: Optional[bool] = dc_field( + user_message_reminders: bool | None = dc_field( default=None, metadata=dc_config(field_name="user_message_reminders") ) # List of commands that channel supports - commands: Optional[List[str]] = dc_field( + commands: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="commands") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) @@ -6335,6 +6265,9 @@ class ChannelConfigWithInfo(DataClassJsonMixin): max_message_length: int = dc_field( metadata=dc_config(field_name="max_message_length") ) + message_retention: str = dc_field( + metadata=dc_config(field_name="message_retention") + ) mutes: bool = dc_field(metadata=dc_config(field_name="mutes")) name: str = dc_field(metadata=dc_config(field_name="name")) polls: bool = dc_field(metadata=dc_config(field_name="polls")) @@ -6365,36 +6298,36 @@ class ChannelConfigWithInfo(DataClassJsonMixin): user_message_reminders: bool = dc_field( metadata=dc_config(field_name="user_message_reminders") ) - commands: "List[Command]" = dc_field(metadata=dc_config(field_name="commands")) - blocklist: Optional[str] = dc_field( + commands: "list[Command]" = dc_field(metadata=dc_config(field_name="commands")) + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) - partition_size: Optional[int] = dc_field( + partition_size: int | None = dc_field( default=None, metadata=dc_config(field_name="partition_size") ) - partition_ttl: Optional[str] = dc_field( + partition_ttl: str | None = dc_field( default=None, metadata=dc_config(field_name="partition_ttl") ) - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - blocklists: "Optional[List[BlockListOptions]]" = dc_field( + blocklists: "list[BlockListOptions] | None" = dc_field( default=None, metadata=dc_config(field_name="blocklists") ) # Sets thresholds for AI moderation - automod_thresholds: "Optional[Thresholds]" = dc_field( + automod_thresholds: "Thresholds | None" = dc_field( default=None, metadata=dc_config(field_name="automod_thresholds") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) @@ -6408,7 +6341,7 @@ class ChannelContextResponse(DataClassJsonMixin): # Channel type type: str = dc_field(metadata=dc_config(field_name="type")) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) @@ -6426,29 +6359,29 @@ class ChannelCreatedEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.created" in this case type: str = dc_field( default="channel.created", metadata=dc_config(field_name="type") ) # The ID of the channel which was created - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel which was created - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was created - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -6458,35 +6391,35 @@ class ChannelCreatedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class ChannelDataUpdate(DataClassJsonMixin): - auto_translation_enabled: Optional[bool] = dc_field( + auto_translation_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_enabled") ) - auto_translation_language: Optional[str] = dc_field( + auto_translation_language: str | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_language") ) - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="disabled") ) - frozen: Optional[bool] = dc_field( + frozen: bool | None = dc_field( default=None, metadata=dc_config(field_name="frozen") ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Channel configuration overrides - config_overrides: "Optional[ChannelConfigOverrides]" = dc_field( + config_overrides: "ChannelConfigOverrides | None" = dc_field( default=None, metadata=dc_config(field_name="config_overrides") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -6504,29 +6437,29 @@ class ChannelDeletedEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.deleted" in this case type: str = dc_field( default="channel.deleted", metadata=dc_config(field_name="type") ) # The ID of the channel which was deleted - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel which was deleted - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was deleted - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -6536,22 +6469,22 @@ class ChannelDeletedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class ChannelExport(DataClassJsonMixin): - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) # Channel ID - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # Date to export messages since - messages_since: Optional[datetime] = dc_field( + messages_since: datetime | None = dc_field( default=None, metadata=dc_config( field_name="messages_since", @@ -6561,7 +6494,7 @@ class ChannelExport(DataClassJsonMixin): ), ) # Date to export messages until - messages_until: Optional[datetime] = dc_field( + messages_until: datetime | None = dc_field( default=None, metadata=dc_config( field_name="messages_until", @@ -6571,7 +6504,7 @@ class ChannelExport(DataClassJsonMixin): ), ) # Channel type - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) @dataclass @@ -6585,22 +6518,22 @@ class ChannelFrozenEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.frozen" in this case type: str = dc_field( default="channel.frozen", metadata=dc_config(field_name="type") ) # The ID of the channel which was frozen - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The type of the channel which was frozen - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was frozen - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -6614,30 +6547,28 @@ class ChannelFrozenEvent(DataClassJsonMixin): @dataclass class ChannelGetOrCreateRequest(DataClassJsonMixin): # Whether this channel will be hidden for the user who created the channel or not - hide_for_creator: Optional[bool] = dc_field( + hide_for_creator: bool | None = dc_field( default=None, metadata=dc_config(field_name="hide_for_creator") ) # Refresh channel state - state: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="state") - ) - thread_unread_counts: Optional[bool] = dc_field( + state: bool | None = dc_field(default=None, metadata=dc_config(field_name="state")) + thread_unread_counts: bool | None = dc_field( default=None, metadata=dc_config(field_name="thread_unread_counts") ) # Top-level keys of the message sender's channel-member custom data to include under member.custom (max 8 keys, 64 chars each) - member_custom_include: Optional[List[str]] = dc_field( + member_custom_include: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="member_custom_include") ) - data: "Optional[ChannelInput]" = dc_field( + data: "ChannelInput | None" = dc_field( default=None, metadata=dc_config(field_name="data") ) - members: "Optional[PaginationParams]" = dc_field( + members: "PaginationParams | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) - messages: "Optional[MessagePaginationParams]" = dc_field( + messages: "MessagePaginationParams | None" = dc_field( default=None, metadata=dc_config(field_name="messages") ) - watchers: "Optional[PaginationParams]" = dc_field( + watchers: "PaginationParams | None" = dc_field( default=None, metadata=dc_config(field_name="watchers") ) @@ -6657,29 +6588,29 @@ class ChannelHiddenEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.hidden" in this case type: str = dc_field( default="channel.hidden", metadata=dc_config(field_name="type") ) # The ID of the channel which was hidden - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel which was hidden - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was hidden - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -6689,11 +6620,11 @@ class ChannelHiddenEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -6701,80 +6632,80 @@ class ChannelHiddenEvent(DataClassJsonMixin): @dataclass class ChannelInput(DataClassJsonMixin): # Enable or disable auto translation - auto_translation_enabled: Optional[bool] = dc_field( + auto_translation_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_enabled") ) # Language (or comma-separated list of languages) to translate to when auto translation is active - auto_translation_language: Optional[str] = dc_field( + auto_translation_language: str | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_language") ) - created_by_id: Optional[str] = dc_field( + created_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_id") ) - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="disabled") ) # Freeze or unfreeze the channel - frozen: Optional[bool] = dc_field( + frozen: bool | None = dc_field( default=None, metadata=dc_config(field_name="frozen") ) # Team the channel belongs to (if multi-tenant mode is enabled) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - truncated_by_id: Optional[str] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + truncated_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="truncated_by_id") ) - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) - invites: "Optional[List[ChannelMemberRequest]]" = dc_field( + invites: "list[ChannelMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="invites") ) - members: "Optional[List[ChannelMemberRequest]]" = dc_field( + members: "list[ChannelMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) # Channel configuration overrides - config_overrides: "Optional[ChannelConfigOverrides]" = dc_field( + config_overrides: "ChannelConfigOverrides | None" = dc_field( default=None, metadata=dc_config(field_name="config_overrides") ) # User request object - created_by: "Optional[UserRequest]" = dc_field( + created_by: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @dataclass class ChannelInputRequest(DataClassJsonMixin): - auto_translation_enabled: Optional[bool] = dc_field( + auto_translation_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_enabled") ) - auto_translation_language: Optional[str] = dc_field( + auto_translation_language: str | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_language") ) - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="disabled") ) - frozen: Optional[bool] = dc_field( + frozen: bool | None = dc_field( default=None, metadata=dc_config(field_name="frozen") ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - invites: "Optional[List[ChannelMemberRequest]]" = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + invites: "list[ChannelMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="invites") ) - members: "Optional[List[ChannelMemberRequest]]" = dc_field( + members: "list[ChannelMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) # Channel configuration overrides - config_overrides: "Optional[ConfigOverridesRequest]" = dc_field( + config_overrides: "ConfigOverridesRequest | None" = dc_field( default=None, metadata=dc_config(field_name="config_overrides") ) # User request object - created_by: "Optional[UserRequest]" = dc_field( + created_by: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -6788,7 +6719,7 @@ class ChannelMemberPartialResponse(DataClassJsonMixin): metadata=dc_config(field_name="notifications_muted") ) # Channel-member custom fields projected via `member_custom_include` - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -6797,14 +6728,14 @@ class ChannelMemberPartialResponse(DataClassJsonMixin): class ChannelMemberRequest(DataClassJsonMixin): user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Role of the member in the channel - channel_role: Optional[str] = dc_field( + channel_role: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_role") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -6838,8 +6769,8 @@ class ChannelMemberResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - archived_at: Optional[datetime] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + archived_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="archived_at", @@ -6849,7 +6780,7 @@ class ChannelMemberResponse(DataClassJsonMixin): ), ) # Expiration date of the ban - ban_expires: Optional[datetime] = dc_field( + ban_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ban_expires", @@ -6859,10 +6790,10 @@ class ChannelMemberResponse(DataClassJsonMixin): ), ) # Whether the member's ban also applies to channels the channel's creator will create in the future (an active future channel ban by the creator targets this member) - ban_from_future_channels: Optional[bool] = dc_field( + ban_from_future_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="ban_from_future_channels") ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -6872,7 +6803,7 @@ class ChannelMemberResponse(DataClassJsonMixin): ), ) # Expiration date of the future channel ban; absent when the future channel ban is permanent - future_channel_ban_expires: Optional[datetime] = dc_field( + future_channel_ban_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="future_channel_ban_expires", @@ -6882,7 +6813,7 @@ class ChannelMemberResponse(DataClassJsonMixin): ), ) # Date when invite was accepted - invite_accepted_at: Optional[datetime] = dc_field( + invite_accepted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="invite_accepted_at", @@ -6892,7 +6823,7 @@ class ChannelMemberResponse(DataClassJsonMixin): ), ) # Date when invite was rejected - invite_rejected_at: Optional[datetime] = dc_field( + invite_rejected_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="invite_rejected_at", @@ -6902,14 +6833,14 @@ class ChannelMemberResponse(DataClassJsonMixin): ), ) # Whether member was invited or not - invited: Optional[bool] = dc_field( + invited: bool | None = dc_field( default=None, metadata=dc_config(field_name="invited") ) # Whether member is channel moderator or not - is_moderator: Optional[bool] = dc_field( + is_moderator: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_moderator") ) - pinned_at: Optional[datetime] = dc_field( + pinned_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pinned_at", @@ -6919,28 +6850,26 @@ class ChannelMemberResponse(DataClassJsonMixin): ), ) # Permission level of the member in the channel (DEPRECATED: use channel_role instead). One of: member, moderator, admin, owner - role: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="role")) - status: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="status") - ) - user_id: Optional[str] = dc_field( + role: str | None = dc_field(default=None, metadata=dc_config(field_name="role")) + status: str | None = dc_field(default=None, metadata=dc_config(field_name="status")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - deleted_messages: Optional[List[str]] = dc_field( + deleted_messages: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="deleted_messages") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class ChannelMessageCountRuleParameters(DataClassJsonMixin): - operator: Optional[str] = dc_field( + operator: str | None = dc_field( default=None, metadata=dc_config(field_name="operator") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) @@ -6948,7 +6877,7 @@ class ChannelMessageCountRuleParameters(DataClassJsonMixin): @dataclass class ChannelMessagesResponse(DataClassJsonMixin): # List of messages - messages: "List[MessageResponse]" = dc_field( + messages: "list[MessageResponse]" = dc_field( metadata=dc_config(field_name="messages") ) # Represents channel in chat @@ -6960,8 +6889,8 @@ class ChannelMetadata(DataClassJsonMixin): cid: str = dc_field(metadata=dc_config(field_name="cid")) id: str = dc_field(metadata=dc_config(field_name="id")) type: str = dc_field(metadata=dc_config(field_name="type")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - last_message_at: Optional[datetime] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + last_message_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_message_at", @@ -6970,16 +6899,16 @@ class ChannelMetadata(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - member_count: Optional[int] = dc_field( + member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="member_count") ) - message_count: Optional[int] = dc_field( + message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="message_count") ) - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) @dataclass @@ -7003,7 +6932,7 @@ class ChannelMute(DataClassJsonMixin): ) ) # Date/time of mute expiration - expires: Optional[datetime] = dc_field( + expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expires", @@ -7013,11 +6942,11 @@ class ChannelMute(DataClassJsonMixin): ), ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -7033,10 +6962,10 @@ class ChannelMutedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.muted" in this case type: str = dc_field(default="channel.muted", metadata=dc_config(field_name="type")) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -7046,13 +6975,13 @@ class ChannelMutedEvent(DataClassJsonMixin): ), ) # The mute objects - mutes: "Optional[List[ChannelMute]]" = dc_field( + mutes: "list[ChannelMute] | None" = dc_field( default=None, metadata=dc_config(field_name="mutes") ) - mute: "Optional[ChannelMute]" = dc_field( + mute: "ChannelMute | None" = dc_field( default=None, metadata=dc_config(field_name="mute") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -7109,10 +7038,10 @@ class ChannelOwnCapability: @dataclass class ChannelPushPreferencesResponse(DataClassJsonMixin): - chat_level: Optional[str] = dc_field( + chat_level: str | None = dc_field( default=None, metadata=dc_config(field_name="chat_level") ) - disabled_until: Optional[datetime] = dc_field( + disabled_until: datetime | None = dc_field( default=None, metadata=dc_config( field_name="disabled_until", @@ -7121,7 +7050,7 @@ class ChannelPushPreferencesResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - chat_preferences: "Optional[ChatPreferencesResponse]" = dc_field( + chat_preferences: "ChatPreferencesResponse | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) @@ -7156,25 +7085,25 @@ class ChannelResponse(DataClassJsonMixin): ) ) # Custom data for this object - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Whether auto translation is enabled or not - auto_translation_enabled: Optional[bool] = dc_field( + auto_translation_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_enabled") ) # Language (or comma-separated list of languages) to translate to when auto translation is active - auto_translation_language: Optional[str] = dc_field( + auto_translation_language: str | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_language") ) # Whether this channel is blocked by current user or not - blocked: Optional[bool] = dc_field( + blocked: bool | None = dc_field( default=None, metadata=dc_config(field_name="blocked") ) # Cooldown period after sending each message - cooldown: Optional[int] = dc_field( + cooldown: int | None = dc_field( default=None, metadata=dc_config(field_name="cooldown") ) # Date/time of deletion - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -7184,11 +7113,11 @@ class ChannelResponse(DataClassJsonMixin): ), ) # Whether this channel is hidden by current user or not - hidden: Optional[bool] = dc_field( + hidden: bool | None = dc_field( default=None, metadata=dc_config(field_name="hidden") ) # Date since when the message history is accessible - hide_messages_before: Optional[datetime] = dc_field( + hide_messages_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="hide_messages_before", @@ -7198,7 +7127,7 @@ class ChannelResponse(DataClassJsonMixin): ), ) # Date of the last message sent - last_message_at: Optional[datetime] = dc_field( + last_message_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_message_at", @@ -7208,15 +7137,15 @@ class ChannelResponse(DataClassJsonMixin): ), ) # Number of members in the channel - member_count: Optional[int] = dc_field( + member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="member_count") ) # Number of messages in the channel - message_count: Optional[int] = dc_field( + message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="message_count") ) # Date of mute expiration - mute_expires_at: Optional[datetime] = dc_field( + mute_expires_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="mute_expires_at", @@ -7226,13 +7155,11 @@ class ChannelResponse(DataClassJsonMixin): ), ) # Whether this channel is muted or not - muted: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="muted") - ) + muted: bool | None = dc_field(default=None, metadata=dc_config(field_name="muted")) # Team the channel belongs to (multi-tenant only) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Date of the latest truncation of the channel - truncated_at: Optional[datetime] = dc_field( + truncated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="truncated_at", @@ -7242,26 +7169,26 @@ class ChannelResponse(DataClassJsonMixin): ), ) # List of filter tags associated with the channel - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) # List of channel members (max 100) - members: "Optional[List[ChannelMemberResponse]]" = dc_field( + members: "list[ChannelMemberResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) # List of channel capabilities of authenticated user - own_capabilities: "Optional[List[ChannelOwnCapability]]" = dc_field( + own_capabilities: "list[ChannelOwnCapability] | None" = dc_field( default=None, metadata=dc_config(field_name="own_capabilities") ) - config: "Optional[ChannelConfigWithInfo]" = dc_field( + config: "ChannelConfigWithInfo | None" = dc_field( default=None, metadata=dc_config(field_name="config") ) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) # User response object - truncated_by: "Optional[UserResponse]" = dc_field( + truncated_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="truncated_by") ) @@ -7269,22 +7196,22 @@ class ChannelResponse(DataClassJsonMixin): @dataclass class ChannelStateResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - members: "List[ChannelMemberResponse]" = dc_field( + members: "list[ChannelMemberResponse]" = dc_field( metadata=dc_config(field_name="members") ) - messages: "List[MessageResponse]" = dc_field( + messages: "list[MessageResponse]" = dc_field( metadata=dc_config(field_name="messages") ) - pinned_messages: "List[MessageResponse]" = dc_field( + pinned_messages: "list[MessageResponse]" = dc_field( metadata=dc_config(field_name="pinned_messages") ) - threads: "List[ThreadStateResponse]" = dc_field( + threads: "list[ThreadStateResponse]" = dc_field( metadata=dc_config(field_name="threads") ) - hidden: Optional[bool] = dc_field( + hidden: bool | None = dc_field( default=None, metadata=dc_config(field_name="hidden") ) - hide_messages_before: Optional[datetime] = dc_field( + hide_messages_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="hide_messages_before", @@ -7293,32 +7220,32 @@ class ChannelStateResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - watcher_count: Optional[int] = dc_field( + watcher_count: int | None = dc_field( default=None, metadata=dc_config(field_name="watcher_count") ) - active_live_locations: "Optional[List[SharedLocationResponseData]]" = dc_field( + active_live_locations: "list[SharedLocationResponseData] | None" = dc_field( default=None, metadata=dc_config(field_name="active_live_locations") ) - pending_messages: "Optional[List[PendingMessageResponse]]" = dc_field( + pending_messages: "list[PendingMessageResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="pending_messages") ) - read: "Optional[List[ReadStateResponse]]" = dc_field( + read: "list[ReadStateResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="read") ) - watchers: "Optional[List[UserResponse]]" = dc_field( + watchers: "list[UserResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="watchers") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) - draft: "Optional[DraftResponse]" = dc_field( + draft: "DraftResponse | None" = dc_field( default=None, metadata=dc_config(field_name="draft") ) - membership: "Optional[ChannelMemberResponse]" = dc_field( + membership: "ChannelMemberResponse | None" = dc_field( default=None, metadata=dc_config(field_name="membership") ) - push_preferences: "Optional[ChannelPushPreferencesResponse]" = dc_field( + push_preferences: "ChannelPushPreferencesResponse | None" = dc_field( default=None, metadata=dc_config(field_name="push_preferences") ) @@ -7326,26 +7253,26 @@ class ChannelStateResponse(DataClassJsonMixin): @dataclass class ChannelStateResponseFields(DataClassJsonMixin): # List of channel members - members: "List[ChannelMemberResponse]" = dc_field( + members: "list[ChannelMemberResponse]" = dc_field( metadata=dc_config(field_name="members") ) # List of channel messages - messages: "List[MessageResponse]" = dc_field( + messages: "list[MessageResponse]" = dc_field( metadata=dc_config(field_name="messages") ) # List of pinned messages in the channel - pinned_messages: "List[MessageResponse]" = dc_field( + pinned_messages: "list[MessageResponse]" = dc_field( metadata=dc_config(field_name="pinned_messages") ) - threads: "List[ThreadStateResponse]" = dc_field( + threads: "list[ThreadStateResponse]" = dc_field( metadata=dc_config(field_name="threads") ) # Whether this channel is hidden or not - hidden: Optional[bool] = dc_field( + hidden: bool | None = dc_field( default=None, metadata=dc_config(field_name="hidden") ) # Messages before this date are hidden from the user - hide_messages_before: Optional[datetime] = dc_field( + hide_messages_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="hide_messages_before", @@ -7355,36 +7282,36 @@ class ChannelStateResponseFields(DataClassJsonMixin): ), ) # Number of channel watchers - watcher_count: Optional[int] = dc_field( + watcher_count: int | None = dc_field( default=None, metadata=dc_config(field_name="watcher_count") ) # Active live locations in the channel - active_live_locations: "Optional[List[SharedLocationResponseData]]" = dc_field( + active_live_locations: "list[SharedLocationResponseData] | None" = dc_field( default=None, metadata=dc_config(field_name="active_live_locations") ) # Pending messages that this user has sent - pending_messages: "Optional[List[PendingMessageResponse]]" = dc_field( + pending_messages: "list[PendingMessageResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="pending_messages") ) # List of read states - read: "Optional[List[ReadStateResponse]]" = dc_field( + read: "list[ReadStateResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="read") ) # List of user who is watching the channel - watchers: "Optional[List[UserResponse]]" = dc_field( + watchers: "list[UserResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="watchers") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) - draft: "Optional[DraftResponse]" = dc_field( + draft: "DraftResponse | None" = dc_field( default=None, metadata=dc_config(field_name="draft") ) - membership: "Optional[ChannelMemberResponse]" = dc_field( + membership: "ChannelMemberResponse | None" = dc_field( default=None, metadata=dc_config(field_name="membership") ) - push_preferences: "Optional[ChannelPushPreferencesResponse]" = dc_field( + push_preferences: "ChannelPushPreferencesResponse | None" = dc_field( default=None, metadata=dc_config(field_name="push_preferences") ) @@ -7402,32 +7329,32 @@ class ChannelTruncatedEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.truncated" in this case type: str = dc_field( default="channel.truncated", metadata=dc_config(field_name="type") ) # The ID of the channel which was truncated - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel which was truncated - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was truncated - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - message_id: Optional[str] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="message_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -7437,15 +7364,15 @@ class ChannelTruncatedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -7472,6 +7399,9 @@ class ChannelTypeConfig(DataClassJsonMixin): max_message_length: int = dc_field( metadata=dc_config(field_name="max_message_length") ) + message_retention: str = dc_field( + metadata=dc_config(field_name="message_retention") + ) mutes: bool = dc_field(metadata=dc_config(field_name="mutes")) name: str = dc_field(metadata=dc_config(field_name="name")) polls: bool = dc_field(metadata=dc_config(field_name="polls")) @@ -7502,37 +7432,37 @@ class ChannelTypeConfig(DataClassJsonMixin): user_message_reminders: bool = dc_field( metadata=dc_config(field_name="user_message_reminders") ) - commands: "List[Command]" = dc_field(metadata=dc_config(field_name="commands")) - permissions: "List[PolicyRequest]" = dc_field( + commands: "list[Command]" = dc_field(metadata=dc_config(field_name="commands")) + permissions: "list[PolicyRequest]" = dc_field( metadata=dc_config(field_name="permissions") ) - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) - blocklist: Optional[str] = dc_field( + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) - partition_size: Optional[int] = dc_field( + partition_size: int | None = dc_field( default=None, metadata=dc_config(field_name="partition_size") ) - partition_ttl: Optional[str] = dc_field( + partition_ttl: str | None = dc_field( default=None, metadata=dc_config(field_name="partition_ttl") ) - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - blocklists: "Optional[List[BlockListOptions]]" = dc_field( + blocklists: "list[BlockListOptions] | None" = dc_field( default=None, metadata=dc_config(field_name="blocklists") ) # Sets thresholds for AI moderation - automod_thresholds: "Optional[Thresholds]" = dc_field( + automod_thresholds: "Thresholds | None" = dc_field( default=None, metadata=dc_config(field_name="automod_thresholds") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) @@ -7548,22 +7478,22 @@ class ChannelUnFrozenEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.unfrozen" in this case type: str = dc_field( default="channel.unfrozen", metadata=dc_config(field_name="type") ) # The ID of the channel which was unfrozen - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The type of the channel which was unfrozen - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was unfrozen - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -7585,12 +7515,12 @@ class ChannelUnmutedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.unmuted" in this case type: str = dc_field( default="channel.unmuted", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -7600,13 +7530,13 @@ class ChannelUnmutedEvent(DataClassJsonMixin): ), ) # The mute objects - mutes: "Optional[List[ChannelMute]]" = dc_field( + mutes: "list[ChannelMute] | None" = dc_field( default=None, metadata=dc_config(field_name="mutes") ) - mute: "Optional[ChannelMute]" = dc_field( + mute: "ChannelMute | None" = dc_field( default=None, metadata=dc_config(field_name="mute") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -7624,32 +7554,32 @@ class ChannelUpdatedEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.updated" in this case type: str = dc_field( default="channel.updated", metadata=dc_config(field_name="type") ) # The ID of the channel which was updated - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel which was updated - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was updated - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - message_id: Optional[str] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="message_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -7659,15 +7589,15 @@ class ChannelUpdatedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -7685,29 +7615,29 @@ class ChannelVisibleEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "channel.visible" in this case type: str = dc_field( default="channel.visible", metadata=dc_config(field_name="type") ) # The ID of the channel which was shown - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel which was shown - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was shown - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -7717,18 +7647,18 @@ class ChannelVisibleEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class ChatActivityStatsResponse(DataClassJsonMixin): - messages: "Optional[MessageStatsResponse]" = dc_field( + messages: "MessageStatsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="Messages") ) @@ -7737,29 +7667,29 @@ class ChatActivityStatsResponse(DataClassJsonMixin): class ChatDraftPayloadResponse(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) text: str = dc_field(metadata=dc_config(field_name="text")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - html: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="html")) - mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) - parent_id: Optional[str] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + html: str | None = dc_field(default=None, metadata=dc_config(field_name="html")) + mml: str | None = dc_field(default=None, metadata=dc_config(field_name="mml")) + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) - quoted_message_id: Optional[str] = dc_field( + quoted_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="quoted_message_id") ) - show_in_channel: Optional[bool] = dc_field( + show_in_channel: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_in_channel") ) - silent: Optional[bool] = dc_field( + silent: bool | None = dc_field( default=None, metadata=dc_config(field_name="silent") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - attachments: "Optional[List[Attachment]]" = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) - mentioned_users: "Optional[List[UserResponse]]" = dc_field( + mentioned_users: "list[UserResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="mentioned_users") ) @@ -7778,13 +7708,13 @@ class ChatDraftResponse(DataClassJsonMixin): message: "ChatDraftPayloadResponse" = dc_field( metadata=dc_config(field_name="message") ) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - parent_message: "Optional[ChatMessageResponse]" = dc_field( + parent_message: "ChatMessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="parent_message") ) - quoted_message: "Optional[ChatMessageResponse]" = dc_field( + quoted_message: "ChatMessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="quoted_message") ) @@ -7823,34 +7753,34 @@ class ChatMessageResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - attachments: "List[Attachment]" = dc_field( + attachments: "list[Attachment]" = dc_field( metadata=dc_config(field_name="attachments") ) - latest_reactions: "List[ChatReactionResponse]" = dc_field( + latest_reactions: "list[ChatReactionResponse]" = dc_field( metadata=dc_config(field_name="latest_reactions") ) - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) - own_reactions: "List[ChatReactionResponse]" = dc_field( + own_reactions: "list[ChatReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) - restricted_visibility: List[str] = dc_field( + restricted_visibility: list[str] = dc_field( metadata=dc_config(field_name="restricted_visibility") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - reaction_counts: "Dict[str, int]" = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction_counts: "dict[str, int]" = dc_field( metadata=dc_config(field_name="reaction_counts") ) - reaction_scores: "Dict[str, int]" = dc_field( + reaction_scores: "dict[str, int]" = dc_field( metadata=dc_config(field_name="reaction_scores") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - command: Optional[str] = dc_field( + command: str | None = dc_field( default=None, metadata=dc_config(field_name="command") ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -7859,10 +7789,10 @@ class ChatMessageResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_for_me: Optional[bool] = dc_field( + deleted_for_me: bool | None = dc_field( default=None, metadata=dc_config(field_name="deleted_for_me") ) - message_text_updated_at: Optional[datetime] = dc_field( + message_text_updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="message_text_updated_at", @@ -7871,11 +7801,11 @@ class ChatMessageResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) - parent_id: Optional[str] = dc_field( + mml: str | None = dc_field(default=None, metadata=dc_config(field_name="mml")) + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - pin_expires: Optional[datetime] = dc_field( + pin_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pin_expires", @@ -7884,7 +7814,7 @@ class ChatMessageResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - pinned_at: Optional[datetime] = dc_field( + pinned_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pinned_at", @@ -7893,59 +7823,59 @@ class ChatMessageResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) - quoted_message_id: Optional[str] = dc_field( + quoted_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="quoted_message_id") ) - show_in_channel: Optional[bool] = dc_field( + show_in_channel: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_in_channel") ) - mentioned_group_ids: Optional[List[str]] = dc_field( + mentioned_group_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_group_ids") ) - mentioned_groups: "Optional[List[UserGroupResponse]]" = dc_field( + mentioned_groups: "list[UserGroupResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="mentioned_groups") ) - mentioned_roles: Optional[List[str]] = dc_field( + mentioned_roles: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_roles") ) - thread_participants: "Optional[List[UserResponse]]" = dc_field( + thread_participants: "list[UserResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) - draft: "Optional[ChatDraftResponse]" = dc_field( + draft: "ChatDraftResponse | None" = dc_field( default=None, metadata=dc_config(field_name="draft") ) - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) - image_labels: "Optional[Dict[str, List[str]]]" = dc_field( + image_labels: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="image_labels") ) - member: "Optional[ChannelMemberPartialResponse]" = dc_field( + member: "ChannelMemberPartialResponse | None" = dc_field( default=None, metadata=dc_config(field_name="member") ) - moderation: "Optional[ChatModerationV2Response]" = dc_field( + moderation: "ChatModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) # User response object - pinned_by: "Optional[UserResponse]" = dc_field( + pinned_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="pinned_by") ) - poll: "Optional[PollResponseData]" = dc_field( + poll: "PollResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll") ) - quoted_message: "Optional[ChatMessageResponse]" = dc_field( + quoted_message: "ChatMessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="quoted_message") ) - reaction_groups: "Optional[Dict[str, Optional[ChatReactionGroupResponse]]]" = ( - dc_field(default=None, metadata=dc_config(field_name="reaction_groups")) + reaction_groups: "dict[str, ChatReactionGroupResponse | None] | None" = dc_field( + default=None, metadata=dc_config(field_name="reaction_groups") ) - reminder: "Optional[ChatReminderResponseData]" = dc_field( + reminder: "ChatReminderResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="reminder") ) - shared_location: "Optional[ChatSharedLocationResponseData]" = dc_field( + shared_location: "ChatSharedLocationResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="shared_location") ) @@ -7954,100 +7884,100 @@ class ChatMessageResponse(DataClassJsonMixin): class ChatModerationV2Response(DataClassJsonMixin): action: str = dc_field(metadata=dc_config(field_name="action")) original_text: str = dc_field(metadata=dc_config(field_name="original_text")) - blocklist_matched: Optional[str] = dc_field( + blocklist_matched: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_matched") ) - platform_circumvented: Optional[bool] = dc_field( + platform_circumvented: bool | None = dc_field( default=None, metadata=dc_config(field_name="platform_circumvented") ) - semantic_filter_matched: Optional[str] = dc_field( + semantic_filter_matched: str | None = dc_field( default=None, metadata=dc_config(field_name="semantic_filter_matched") ) - blocklists_matched: Optional[List[str]] = dc_field( + blocklists_matched: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="blocklists_matched") ) - image_harms: Optional[List[str]] = dc_field( + image_harms: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="image_harms") ) - text_harms: Optional[List[str]] = dc_field( + text_harms: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="text_harms") ) @dataclass class ChatPreferences(DataClassJsonMixin): - channel_mentions: Optional[str] = dc_field( + channel_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_mentions") ) - default_preference: Optional[str] = dc_field( + default_preference: str | None = dc_field( default=None, metadata=dc_config(field_name="default_preference") ) - direct_mentions: Optional[str] = dc_field( + direct_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="direct_mentions") ) - distinct_channel_messages: Optional[str] = dc_field( + distinct_channel_messages: str | None = dc_field( default=None, metadata=dc_config(field_name="distinct_channel_messages") ) - group_mentions: Optional[str] = dc_field( + group_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="group_mentions") ) - here_mentions: Optional[str] = dc_field( + here_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="here_mentions") ) - role_mentions: Optional[str] = dc_field( + role_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="role_mentions") ) - thread_replies: Optional[str] = dc_field( + thread_replies: str | None = dc_field( default=None, metadata=dc_config(field_name="thread_replies") ) @dataclass class ChatPreferencesInput(DataClassJsonMixin): - channel_mentions: Optional[str] = dc_field( + channel_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_mentions") ) - default_preference: Optional[str] = dc_field( + default_preference: str | None = dc_field( default=None, metadata=dc_config(field_name="default_preference") ) - direct_mentions: Optional[str] = dc_field( + direct_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="direct_mentions") ) - group_mentions: Optional[str] = dc_field( + group_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="group_mentions") ) - here_mentions: Optional[str] = dc_field( + here_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="here_mentions") ) - role_mentions: Optional[str] = dc_field( + role_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="role_mentions") ) - thread_replies: Optional[str] = dc_field( + thread_replies: str | None = dc_field( default=None, metadata=dc_config(field_name="thread_replies") ) @dataclass class ChatPreferencesResponse(DataClassJsonMixin): - channel_mentions: Optional[str] = dc_field( + channel_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_mentions") ) - default_preference: Optional[str] = dc_field( + default_preference: str | None = dc_field( default=None, metadata=dc_config(field_name="default_preference") ) - direct_mentions: Optional[str] = dc_field( + direct_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="direct_mentions") ) - group_mentions: Optional[str] = dc_field( + group_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="group_mentions") ) - here_mentions: Optional[str] = dc_field( + here_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="here_mentions") ) - role_mentions: Optional[str] = dc_field( + role_mentions: str | None = dc_field( default=None, metadata=dc_config(field_name="role_mentions") ) - thread_replies: Optional[str] = dc_field( + thread_replies: str | None = dc_field( default=None, metadata=dc_config(field_name="thread_replies") ) @@ -8072,7 +8002,7 @@ class ChatReactionGroupResponse(DataClassJsonMixin): ) ) sum_scores: int = dc_field(metadata=dc_config(field_name="sum_scores")) - latest_reactions_by: "List[ChatReactionGroupUserResponse]" = dc_field( + latest_reactions_by: "list[ChatReactionGroupUserResponse]" = dc_field( metadata=dc_config(field_name="latest_reactions_by") ) @@ -8089,7 +8019,7 @@ class ChatReactionGroupUserResponse(DataClassJsonMixin): ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -8116,7 +8046,7 @@ class ChatReactionResponse(DataClassJsonMixin): ) ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) @@ -8142,7 +8072,7 @@ class ChatReminderResponseData(DataClassJsonMixin): ) ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - remind_at: Optional[datetime] = dc_field( + remind_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="remind_at", @@ -8151,11 +8081,11 @@ class ChatReminderResponseData(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - message: "Optional[ChatMessageResponse]" = dc_field( + message: "ChatMessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -8186,7 +8116,7 @@ class ChatSharedLocationResponseData(DataClassJsonMixin): ) ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - end_at: Optional[datetime] = dc_field( + end_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="end_at", @@ -8195,7 +8125,7 @@ class ChatSharedLocationResponseData(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - message: "Optional[ChatMessageResponse]" = dc_field( + message: "ChatMessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @@ -8210,42 +8140,42 @@ class CheckExternalStorageResponse(DataClassJsonMixin): @dataclass class CheckPushRequest(DataClassJsonMixin): # Push message template for APN - apn_template: Optional[str] = dc_field( + apn_template: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_template") ) # Type of event for push templates (default: message.new). One of: message.new, message.updated, reaction.new, reaction.updated, notification.reminder_due - event_type: Optional[str] = dc_field( + event_type: str | None = dc_field( default=None, metadata=dc_config(field_name="event_type") ) # Push message data template for Firebase - firebase_data_template: Optional[str] = dc_field( + firebase_data_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_data_template") ) # Push message template for Firebase - firebase_template: Optional[str] = dc_field( + firebase_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_template") ) # Message ID to send push notification for - message_id: Optional[str] = dc_field( + message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="message_id") ) # Name of push provider - push_provider_name: Optional[str] = dc_field( + push_provider_name: str | None = dc_field( default=None, metadata=dc_config(field_name="push_provider_name") ) # Push provider type. One of: firebase, apn, huawei, xiaomi - push_provider_type: Optional[str] = dc_field( + push_provider_type: str | None = dc_field( default=None, metadata=dc_config(field_name="push_provider_type") ) # Don't require existing devices to render templates - skip_devices: Optional[bool] = dc_field( + skip_devices: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_devices") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -8254,28 +8184,28 @@ class CheckPushRequest(DataClassJsonMixin): class CheckPushResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # The event type that was tested - event_type: Optional[str] = dc_field( + event_type: str | None = dc_field( default=None, metadata=dc_config(field_name="event_type") ) - rendered_apn_template: Optional[str] = dc_field( + rendered_apn_template: str | None = dc_field( default=None, metadata=dc_config(field_name="rendered_apn_template") ) - rendered_firebase_template: Optional[str] = dc_field( + rendered_firebase_template: str | None = dc_field( default=None, metadata=dc_config(field_name="rendered_firebase_template") ) # Don't require existing devices to render templates - skip_devices: Optional[bool] = dc_field( + skip_devices: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_devices") ) # List of general errors - general_errors: Optional[List[str]] = dc_field( + general_errors: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="general_errors") ) # Object with device errors - device_errors: "Optional[Dict[str, DeviceErrorInfo]]" = dc_field( + device_errors: "dict[str, DeviceErrorInfo] | None" = dc_field( default=None, metadata=dc_config(field_name="device_errors") ) - rendered_message: "Optional[Dict[str, str]]" = dc_field( + rendered_message: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="rendered_message") ) @@ -8291,15 +8221,15 @@ class CheckRequest(DataClassJsonMixin): # Type of entity to moderate entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) # Key of the moderation configuration to use - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) # Team associated with the configuration - config_team: Optional[str] = dc_field( + config_team: str | None = dc_field( default=None, metadata=dc_config(field_name="config_team") ) # Original timestamp when the content was produced (for correlating flagged content with source video timeline) - content_published_at: Optional[datetime] = dc_field( + content_published_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="content_published_at", @@ -8309,24 +8239,24 @@ class CheckRequest(DataClassJsonMixin): ), ) # Whether to run moderation in test mode - test_mode: Optional[bool] = dc_field( + test_mode: bool | None = dc_field( default=None, metadata=dc_config(field_name="test_mode") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - config: "Optional[ModerationConfig]" = dc_field( + config: "ModerationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="config") ) - moderation_payload: "Optional[ModerationPayload]" = dc_field( + moderation_payload: "ModerationPayload | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_payload") ) # Additional moderation configuration options - options: Optional[Dict[str, object]] = dc_field( + options: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="options") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -8341,17 +8271,17 @@ class CheckResponse(DataClassJsonMixin): # Status of the moderation check (completed or pending) status: str = dc_field(metadata=dc_config(field_name="status")) # ID of the running moderation task - task_id: Optional[str] = dc_field( + task_id: str | None = dc_field( default=None, metadata=dc_config(field_name="task_id") ) # All moderation rules triggered by this check (content, user, and call rules), with their resolved actions - triggered_rules: "Optional[List[TriggeredRuleResponse]]" = dc_field( + triggered_rules: "list[TriggeredRuleResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="triggered_rules") ) - item: "Optional[ReviewQueueItemResponse]" = dc_field( + item: "ReviewQueueItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="item") ) - triggered_rule: "Optional[TriggeredRuleResponse]" = dc_field( + triggered_rule: "TriggeredRuleResponse | None" = dc_field( default=None, metadata=dc_config(field_name="triggered_rule") ) @@ -8359,9 +8289,7 @@ class CheckResponse(DataClassJsonMixin): @dataclass class CheckS3AccessRequest(DataClassJsonMixin): # Optional stream+s3:// reference to test access against - s3_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="s3_url") - ) + s3_url: str | None = dc_field(default=None, metadata=dc_config(field_name="s3_url")) @dataclass @@ -8370,7 +8298,7 @@ class CheckS3AccessResponse(DataClassJsonMixin): # Whether the S3 access check succeeded success: bool = dc_field(metadata=dc_config(field_name="success")) # Descriptive message about the check result - message: Optional[str] = dc_field( + message: str | None = dc_field( default=None, metadata=dc_config(field_name="message") ) @@ -8378,15 +8306,15 @@ class CheckS3AccessResponse(DataClassJsonMixin): @dataclass class CheckSNSRequest(DataClassJsonMixin): # AWS SNS access key - sns_key: Optional[str] = dc_field( + sns_key: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_key") ) # AWS SNS key secret - sns_secret: Optional[str] = dc_field( + sns_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_secret") ) # AWS SNS topic ARN - sns_topic_arn: Optional[str] = dc_field( + sns_topic_arn: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_topic_arn") ) @@ -8397,11 +8325,9 @@ class CheckSNSResponse(DataClassJsonMixin): # Validation result. One of: ok, error status: str = dc_field(metadata=dc_config(field_name="status")) # Error text - error: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="error") - ) + error: str | None = dc_field(default=None, metadata=dc_config(field_name="error")) # Error data - data: Optional[Dict[str, object]] = dc_field( + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) @@ -8409,15 +8335,15 @@ class CheckSNSResponse(DataClassJsonMixin): @dataclass class CheckSQSRequest(DataClassJsonMixin): # AWS SQS access key - sqs_key: Optional[str] = dc_field( + sqs_key: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_key") ) # AWS SQS key secret - sqs_secret: Optional[str] = dc_field( + sqs_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_secret") ) # AWS SQS endpoint URL - sqs_url: Optional[str] = dc_field( + sqs_url: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_url") ) @@ -8428,11 +8354,9 @@ class CheckSQSResponse(DataClassJsonMixin): # Validation result. One of: ok, error status: str = dc_field(metadata=dc_config(field_name="status")) # Error text - error: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="error") - ) + error: str | None = dc_field(default=None, metadata=dc_config(field_name="error")) # Error data - data: Optional[Dict[str, object]] = dc_field( + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) @@ -8440,13 +8364,16 @@ class CheckSQSResponse(DataClassJsonMixin): @dataclass class Classification(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) - confidence: Optional[float] = dc_field( + confidence: float | None = dc_field( default=None, metadata=dc_config(field_name="confidence") ) - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - subclassifications: "Optional[List[Classification]]" = dc_field( + matched_contributors: list[str] | None = dc_field( + default=None, metadata=dc_config(field_name="matched_contributors") + ) + subclassifications: "list[Classification] | None" = dc_field( default=None, metadata=dc_config(field_name="subclassifications") ) @@ -8454,53 +8381,53 @@ class Classification(DataClassJsonMixin): @dataclass class ClientEvent(DataClassJsonMixin): # Call session ID associated with the attempt. Required on every event except CoordinatorJoin initiation and CoordinatorJoin failure (where the call session is not yet established); optional on MediaDevicePermission. - call_session_id: Optional[str] = dc_field( + call_session_id: str | None = dc_field( default=None, metadata=dc_config(field_name="call_session_id") ) # Camera permission status: INITIATED, FAILED, GRANTED, or NOT_INITIATED. Required on every MediaDevicePermission event. - camera_permission_status: Optional[str] = dc_field( + camera_permission_status: str | None = dc_field( default=None, metadata=dc_config(field_name="camera_permission_status") ) # UUID generated by the client and shared across every event of the same coordinator connection. Required on every event except JoinInitiated, which is reported before a coordinator connection exists. - coordinator_connect_id: Optional[str] = dc_field( + coordinator_connect_id: str | None = dc_field( default=None, metadata=dc_config(field_name="coordinator_connect_id") ) # Milliseconds elapsed between the stage attempt's initiation and this event. - elapsed_time: Optional[int] = dc_field( + elapsed_time: int | None = dc_field( default=None, metadata=dc_config(field_name="elapsed_time") ) # Whether the event marks the start (initiated) or resolution (completed) of a stage attempt, or another event-specific value - event_type: Optional[str] = dc_field( + event_type: str | None = dc_field( default=None, metadata=dc_config(field_name="event_type") ) # Terminal state of the peer connection. Required on PeerConnectionConnect failure. - ice_state: Optional[str] = dc_field( + ice_state: str | None = dc_field( default=None, metadata=dc_config(field_name="ice_state") ) # Call ID associated with the event. Required on every stage except CoordinatorWS, where it is optional. - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # UUID generated by the client and shared across JoinInitiated and the join-lifecycle events (CoordinatorJoin, WSJoin, PeerConnectionConnect) of the same overall join attempt. Required on every join event except CoordinatorWS, which is reported before a join attempt is established. - join_attempt_id: Optional[str] = dc_field( + join_attempt_id: str | None = dc_field( default=None, metadata=dc_config(field_name="join_attempt_id") ) # Reason the client initiated the join. Optional on CoordinatorJoin events; empty when not provided. - join_reason: Optional[str] = dc_field( + join_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="join_reason") ) # Microphone permission status: INITIATED, FAILED, GRANTED, or NOT_INITIATED. Required on every MediaDevicePermission event. - microphone_permission_status: Optional[str] = dc_field( + microphone_permission_status: str | None = dc_field( default=None, metadata=dc_config(field_name="microphone_permission_status") ) # Resolution of a completed event: success or failure. Required on completed join events; forbidden on initiated join events. - outcome: Optional[str] = dc_field( + outcome: str | None = dc_field( default=None, metadata=dc_config(field_name="outcome") ) # Which peer connection a PeerConnectionConnect event reports on: publish or subscribe. Required on every PeerConnectionConnect event. - peer_connection: Optional[str] = dc_field( + peer_connection: str | None = dc_field( default=None, metadata=dc_config(field_name="peer_connection") ) # UTC timestamp at which the ICE connection was established earlier in the session, when applicable - previously_connected_timestamp: Optional[datetime] = dc_field( + previously_connected_timestamp: datetime | None = dc_field( default=None, metadata=dc_config( field_name="previously_connected_timestamp", @@ -8510,39 +8437,35 @@ class ClientEvent(DataClassJsonMixin): ), ) # Total in-stage retries the client made before resolving (0–1000). Required on completed join events. - retry_count_attempt: Optional[int] = dc_field( + retry_count_attempt: int | None = dc_field( default=None, metadata=dc_config(field_name="retry_count_attempt") ) # Failure code string. Required on CoordinatorJoin, CoordinatorWS, WSJoin, and PeerConnectionConnect failure. - retry_failure_code: Optional[str] = dc_field( + retry_failure_code: str | None = dc_field( default=None, metadata=dc_config(field_name="retry_failure_code") ) # Failure reason string. Required on CoordinatorJoin, CoordinatorWS, WSJoin, and PeerConnectionConnect failure. - retry_failure_reason: Optional[str] = dc_field( + retry_failure_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="retry_failure_reason") ) # Screen-share permission status: INITIATED, FAILED, GRANTED, or NOT_INITIATED. Optional on MediaDevicePermission events. - screen_share_status: Optional[str] = dc_field( + screen_share_status: str | None = dc_field( default=None, metadata=dc_config(field_name="screen_share_status") ) # Version of the client SDK - sdk_version: Optional[str] = dc_field( + sdk_version: str | None = dc_field( default=None, metadata=dc_config(field_name="sdk_version") ) # Identifier of the SFU the client was attempting to connect to. Required on WSJoin and PeerConnectionConnect failure, and on FirstAudioFrame and FirstVideoFrame. - sfu_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sfu_id") - ) + sfu_id: str | None = dc_field(default=None, metadata=dc_config(field_name="sfu_id")) # Discriminator identifying the event kind. JoinInitiated marks the start of a join attempt; join-lifecycle events use CoordinatorJoin, CoordinatorWS, WSJoin, or PeerConnectionConnect; media-readiness events use FirstAudioFrame or FirstVideoFrame; MediaDevicePermission reports device permission results; other values denote generic client events. - stage: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="stage") - ) + stage: str | None = dc_field(default=None, metadata=dc_config(field_name="stage")) # UUID generated by the client at initiation. Identical on the matching completion event. Absent on JoinInitiated. - stage_id: Optional[str] = dc_field( + stage_id: str | None = dc_field( default=None, metadata=dc_config(field_name="stage_id") ) # UTC timestamp at which the event was recorded - timestamp: Optional[datetime] = dc_field( + timestamp: datetime | None = dc_field( default=None, metadata=dc_config( field_name="timestamp", @@ -8552,32 +8475,32 @@ class ClientEvent(DataClassJsonMixin): ), ) # Identifier of the media track the frame belongs to. Required on FirstVideoFrame; optional on FirstAudioFrame. - track_id: Optional[str] = dc_field( + track_id: str | None = dc_field( default=None, metadata=dc_config(field_name="track_id") ) # Call type associated with the event. Required on every stage except CoordinatorWS, where it is optional. - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) # User agent string of the client SDK - user_agent: Optional[str] = dc_field( + user_agent: str | None = dc_field( default=None, metadata=dc_config(field_name="user_agent") ) # ID of the user the event was recorded for - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Whether the ICE connection had been established earlier in the same session. Required on every PeerConnectionConnect event so reconnects can be distinguished from fresh connects. - was_previously_connected: Optional[bool] = dc_field( + was_previously_connected: bool | None = dc_field( default=None, metadata=dc_config(field_name="was_previously_connected") ) @dataclass class ClientOSDataResponse(DataClassJsonMixin): - architecture: Optional[str] = dc_field( + architecture: str | None = dc_field( default=None, metadata=dc_config(field_name="architecture") ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - version: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + version: str | None = dc_field( default=None, metadata=dc_config(field_name="version") ) @@ -8605,19 +8528,19 @@ class ClosedCaptionEvent(DataClassJsonMixin): @dataclass class ClosedCaptionRuleParameters(DataClassJsonMixin): - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) - llm_harm_labels: "Optional[Dict[str, str]]" = dc_field( + llm_harm_labels: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="llm_harm_labels") ) @@ -8627,13 +8550,11 @@ class CollectUserFeedbackRequest(DataClassJsonMixin): rating: int = dc_field(metadata=dc_config(field_name="rating")) sdk: str = dc_field(metadata=dc_config(field_name="sdk")) sdk_version: str = dc_field(metadata=dc_config(field_name="sdk_version")) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - user_session_id: Optional[str] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + user_session_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_session_id") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -8649,11 +8570,11 @@ class CollectionRequest(DataClassJsonMixin): # Name/type of the collection name: str = dc_field(metadata=dc_config(field_name="name")) # Custom data for the collection (required, must contain at least one key) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Unique identifier for the collection within its name (optional, will be auto-generated if not provided) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # ID of the user who owns this collection - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) @@ -8665,7 +8586,7 @@ class CollectionResponse(DataClassJsonMixin): # Name/type of the collection name: str = dc_field(metadata=dc_config(field_name="name")) # When the collection was created - created_at: Optional[datetime] = dc_field( + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -8675,7 +8596,7 @@ class CollectionResponse(DataClassJsonMixin): ), ) # When the collection was last updated - updated_at: Optional[datetime] = dc_field( + updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="updated_at", @@ -8685,11 +8606,11 @@ class CollectionResponse(DataClassJsonMixin): ), ) # ID of the user who owns this collection - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for the collection - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -8705,7 +8626,7 @@ class Command(DataClassJsonMixin): # Set name used for grouping commands set: str = dc_field(metadata=dc_config(field_name="set")) # Date/time of creation - created_at: Optional[datetime] = dc_field( + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -8715,7 +8636,7 @@ class Command(DataClassJsonMixin): ), ) # Date/time of the last update - updated_at: Optional[datetime] = dc_field( + updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="updated_at", @@ -8740,15 +8661,15 @@ class CommentAddedEvent(DataClassJsonMixin): fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.comment.added" in this case type: str = dc_field( default="feeds.comment.added", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -8757,7 +8678,7 @@ class CommentAddedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -8775,15 +8696,15 @@ class CommentDeletedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.comment.deleted" in this case type: str = dc_field( default="feeds.comment.deleted", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -8792,7 +8713,7 @@ class CommentDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -8811,7 +8732,7 @@ class CommentReactionAddedEvent(DataClassJsonMixin): fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) reaction: "FeedsReactionResponse" = dc_field( metadata=dc_config(field_name="reaction") ) @@ -8819,10 +8740,10 @@ class CommentReactionAddedEvent(DataClassJsonMixin): type: str = dc_field( default="feeds.comment.reaction.added", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -8831,7 +8752,7 @@ class CommentReactionAddedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -8849,7 +8770,7 @@ class CommentReactionDeletedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) reaction: "FeedsReactionResponse" = dc_field( metadata=dc_config(field_name="reaction") ) @@ -8857,10 +8778,10 @@ class CommentReactionDeletedEvent(DataClassJsonMixin): type: str = dc_field( default="feeds.comment.reaction.deleted", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -8885,7 +8806,7 @@ class CommentReactionUpdatedEvent(DataClassJsonMixin): fid: str = dc_field(metadata=dc_config(field_name="fid")) activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) reaction: "FeedsReactionResponse" = dc_field( metadata=dc_config(field_name="reaction") ) @@ -8893,10 +8814,10 @@ class CommentReactionUpdatedEvent(DataClassJsonMixin): type: str = dc_field( default="feeds.comment.reaction.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -8905,7 +8826,7 @@ class CommentReactionUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -8954,21 +8875,21 @@ class CommentResponse(DataClassJsonMixin): # Number of upvotes for this comment upvote_count: int = dc_field(metadata=dc_config(field_name="upvote_count")) # Users mentioned in the comment - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) # Current user's reactions to this activity - own_reactions: "List[FeedsReactionResponse]" = dc_field( + own_reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # Controversy score of the comment - controversy_score: Optional[float] = dc_field( + controversy_score: float | None = dc_field( default=None, metadata=dc_config(field_name="controversy_score") ) # When the comment was deleted - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -8978,7 +8899,7 @@ class CommentResponse(DataClassJsonMixin): ), ) # When the comment was last edited - edited_at: Optional[datetime] = dc_field( + edited_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="edited_at", @@ -8988,31 +8909,31 @@ class CommentResponse(DataClassJsonMixin): ), ) # ID of parent comment for nested replies - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # Text content of the comment - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) # Attachments associated with the comment - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # Recent reactions to the comment - latest_reactions: "Optional[List[FeedsReactionResponse]]" = dc_field( + latest_reactions: "list[FeedsReactionResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_reactions") ) # Custom data for the comment - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) - moderation: "Optional[ModerationV2Response]" = dc_field( + moderation: "ModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) # Grouped reactions by type - reaction_groups: "Optional[Dict[str, FeedsReactionGroupResponse]]" = dc_field( + reaction_groups: "dict[str, FeedsReactionGroupResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="reaction_groups") ) @@ -9030,15 +8951,15 @@ class CommentRestoredEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.comment.restored" in this case type: str = dc_field( default="feeds.comment.restored", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -9047,7 +8968,7 @@ class CommentRestoredEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -9065,15 +8986,15 @@ class CommentUpdatedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.comment.updated" in this case type: str = dc_field( default="feeds.comment.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -9082,7 +9003,7 @@ class CommentUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -9109,65 +9030,65 @@ class ConcurrencyMinute(DataClassJsonMixin): @dataclass class ConfigOverridesRequest(DataClassJsonMixin): # Blocklist name - blocklist: Optional[str] = dc_field( + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) # Blocklist behavior. One of: flag, block - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) # Enable/disable message counting - count_messages: Optional[bool] = dc_field( + count_messages: bool | None = dc_field( default=None, metadata=dc_config(field_name="count_messages") ) # Maximum message length - max_message_length: Optional[int] = dc_field( + max_message_length: int | None = dc_field( default=None, metadata=dc_config(field_name="max_message_length") ) - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) # Enable/disable quotes - quotes: Optional[bool] = dc_field( + quotes: bool | None = dc_field( default=None, metadata=dc_config(field_name="quotes") ) # Enable/disable reactions - reactions: Optional[bool] = dc_field( + reactions: bool | None = dc_field( default=None, metadata=dc_config(field_name="reactions") ) # Enable/disable replies - replies: Optional[bool] = dc_field( + replies: bool | None = dc_field( default=None, metadata=dc_config(field_name="replies") ) # Enable/disable shared locations - shared_locations: Optional[bool] = dc_field( + shared_locations: bool | None = dc_field( default=None, metadata=dc_config(field_name="shared_locations") ) # Enable/disable typing events - typing_events: Optional[bool] = dc_field( + typing_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="typing_events") ) # Enable/disable uploads - uploads: Optional[bool] = dc_field( + uploads: bool | None = dc_field( default=None, metadata=dc_config(field_name="uploads") ) # Enable/disable URL enrichment - url_enrichment: Optional[bool] = dc_field( + url_enrichment: bool | None = dc_field( default=None, metadata=dc_config(field_name="url_enrichment") ) # Enable/disable user message reminders - user_message_reminders: Optional[bool] = dc_field( + user_message_reminders: bool | None = dc_field( default=None, metadata=dc_config(field_name="user_message_reminders") ) # List of available commands - commands: Optional[List[str]] = dc_field( + commands: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="commands") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) # Permission grants modifiers - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) @@ -9198,95 +9119,92 @@ class ConfigResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - supported_video_call_harm_types: List[str] = dc_field( + supported_video_call_harm_types: list[str] = dc_field( metadata=dc_config(field_name="supported_video_call_harm_types") ) # Configurable image moderation label definitions for dashboard rendering - ai_image_label_definitions: "Optional[List[AIImageLabelDefinition]]" = dc_field( + ai_image_label_definitions: "list[AIImageLabelDefinition] | None" = dc_field( default=None, metadata=dc_config(field_name="ai_image_label_definitions") ) # Names of Bodyguard credential profiles registered on this app. The dashboard uses this list to render the profile picker on the AI Text section. - available_bodyguard_profiles: "Optional[List[BodyguardProfileSummary]]" = dc_field( + available_bodyguard_profiles: "list[BodyguardProfileSummary] | None" = dc_field( default=None, metadata=dc_config(field_name="available_bodyguard_profiles") ) - ai_audio_config: "Optional[AIAudioConfigResponse]" = dc_field( + ai_audio_config: "AIAudioConfigResponse | None" = dc_field( default=None, metadata=dc_config(field_name="ai_audio_config") ) - ai_image_config: "Optional[AIImageConfig]" = dc_field( + ai_image_config: "AIImageConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_image_config") ) # Available L2 subclassifications per L1 image moderation label, based on the active provider - ai_image_subclassifications: "Optional[Dict[str, List[str]]]" = dc_field( + ai_image_subclassifications: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="ai_image_subclassifications") ) - ai_text_config: "Optional[AITextConfig]" = dc_field( + ai_text_config: "AITextConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_text_config") ) - ai_video_config: "Optional[AIVideoConfig]" = dc_field( + ai_video_config: "AIVideoConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_video_config") ) - automod_platform_circumvention_config: "Optional[AutomodPlatformCircumventionConfig]" = dc_field( + automod_platform_circumvention_config: "AutomodPlatformCircumventionConfig | None" = dc_field( default=None, metadata=dc_config(field_name="automod_platform_circumvention_config"), ) - automod_semantic_filters_config: "Optional[AutomodSemanticFiltersConfig]" = ( - dc_field( - default=None, - metadata=dc_config(field_name="automod_semantic_filters_config"), - ) + automod_semantic_filters_config: "AutomodSemanticFiltersConfig | None" = dc_field( + default=None, metadata=dc_config(field_name="automod_semantic_filters_config") ) - automod_toxicity_config: "Optional[AutomodToxicityConfig]" = dc_field( + automod_toxicity_config: "AutomodToxicityConfig | None" = dc_field( default=None, metadata=dc_config(field_name="automod_toxicity_config") ) - block_list_config: "Optional[BlockListConfig]" = dc_field( + block_list_config: "BlockListConfig | None" = dc_field( default=None, metadata=dc_config(field_name="block_list_config") ) - flood_config: "Optional[FloodConfig]" = dc_field( + flood_config: "FloodConfig | None" = dc_field( default=None, metadata=dc_config(field_name="flood_config") ) - llm_config: "Optional[LLMConfig]" = dc_field( + llm_config: "LLMConfig | None" = dc_field( default=None, metadata=dc_config(field_name="llm_config") ) - velocity_filter_config: "Optional[VelocityFilterConfig]" = dc_field( + velocity_filter_config: "VelocityFilterConfig | None" = dc_field( default=None, metadata=dc_config(field_name="velocity_filter_config") ) - video_call_rule_config: "Optional[VideoCallRuleConfig]" = dc_field( + video_call_rule_config: "VideoCallRuleConfig | None" = dc_field( default=None, metadata=dc_config(field_name="video_call_rule_config") ) @dataclass class ContentCountRuleParameters(DataClassJsonMixin): - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) @dataclass class ContentCustomPropertyCountParameters(DataClassJsonMixin): - operator: Optional[str] = dc_field( + operator: str | None = dc_field( default=None, metadata=dc_config(field_name="operator") ) - property_key: Optional[str] = dc_field( + property_key: str | None = dc_field( default=None, metadata=dc_config(field_name="property_key") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) @dataclass class ContentCustomPropertyParameters(DataClassJsonMixin): - operator: Optional[str] = dc_field( + operator: str | None = dc_field( default=None, metadata=dc_config(field_name="operator") ) - property_key: Optional[str] = dc_field( + property_key: str | None = dc_field( default=None, metadata=dc_config(field_name="property_key") ) @@ -9317,7 +9235,7 @@ class Coverage(DataClassJsonMixin): publisher_encoding_profiles: int = dc_field( metadata=dc_config(field_name="publisher_encoding_profiles") ) - absent: "List[AbsentMetric]" = dc_field(metadata=dc_config(field_name="absent")) + absent: "list[AbsentMetric]" = dc_field(metadata=dc_config(field_name="absent")) metrics_pct: "MetricsPct" = dc_field(metadata=dc_config(field_name="metrics_pct")) @@ -9326,27 +9244,27 @@ class CreateBlockListRequest(DataClassJsonMixin): # Block list name name: str = dc_field(metadata=dc_config(field_name="name")) # List of words to block - words: List[str] = dc_field(metadata=dc_config(field_name="words")) - is_confusable_folding_enabled: Optional[bool] = dc_field( + words: list[str] = dc_field(metadata=dc_config(field_name="words")) + is_confusable_folding_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_confusable_folding_enabled") ) - is_leet_check_enabled: Optional[bool] = dc_field( + is_leet_check_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_leet_check_enabled") ) - is_plural_check_enabled: Optional[bool] = dc_field( + is_plural_check_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_plural_check_enabled") ) - is_substring_matching_enabled: Optional[bool] = dc_field( + is_substring_matching_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_substring_matching_enabled") ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Block list type. One of: regex, domain, domain_allowlist, email, email_allowlist, word - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - user_id: Optional[str] = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -9356,7 +9274,7 @@ class CreateBlockListResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Block list contains restricted words - blocklist: "Optional[BlockListResponse]" = dc_field( + blocklist: "BlockListResponse | None" = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) @@ -9365,17 +9283,17 @@ class CreateBlockListResponse(DataClassJsonMixin): class CreateCallTypeRequest(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) # the external storage for the call type - external_storage: Optional[str] = dc_field( + external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="external_storage") ) # the permissions granted to each role - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) - notification_settings: "Optional[NotificationSettingsRequest]" = dc_field( + notification_settings: "NotificationSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="notification_settings") ) - settings: "Optional[CallSettingsRequest]" = dc_field( + settings: "CallSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="settings") ) @@ -9404,7 +9322,7 @@ class CreateCallTypeResponse(DataClassJsonMixin): ) ) # the permissions granted to each role - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) notification_settings: "NotificationSettingsResponse" = dc_field( metadata=dc_config(field_name="notification_settings") ) @@ -9412,7 +9330,7 @@ class CreateCallTypeResponse(DataClassJsonMixin): metadata=dc_config(field_name="settings") ) # the external storage for the call type - external_storage: Optional[str] = dc_field( + external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="external_storage") ) @@ -9425,45 +9343,45 @@ class CreateCampaignRequest(DataClassJsonMixin): metadata=dc_config(field_name="message_template") ) # Whether to create channels for the campaign, if they don't exist - create_channels: Optional[bool] = dc_field( + create_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_channels") ) # The description of the campaign - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # The name of the campaign - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # The sender mode of the campaign - sender_mode: Optional[str] = dc_field( + sender_mode: str | None = dc_field( default=None, metadata=dc_config(field_name="sender_mode") ) # The visibility of the created channels for the sender - sender_visibility: Optional[str] = dc_field( + sender_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="sender_visibility") ) # Whether the campaign should show channels, if they are hidden - show_channels: Optional[bool] = dc_field( + show_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_channels") ) # Whether to skip push notifications - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) # Whether to skip webhooks - skip_webhook: Optional[bool] = dc_field( + skip_webhook: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_webhook") ) # The IDs of the segments to send the campaign to. Duplicate user IDs are removed. Use either user_ids or segment_ids, not both - segment_ids: Optional[List[str]] = dc_field( + segment_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="segment_ids") ) # The userIDs to send the campaign to. Use either segment ids or user ids not both - user_ids: Optional[List[str]] = dc_field( + user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="user_ids") ) - channel_template: "Optional[CampaignChannelTemplate]" = dc_field( + channel_template: "CampaignChannelTemplate | None" = dc_field( default=None, metadata=dc_config(field_name="channel_template") ) @@ -9472,10 +9390,10 @@ class CreateCampaignRequest(DataClassJsonMixin): class CreateCampaignResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - campaign: "Optional[CampaignResponse]" = dc_field( + campaign: "CampaignResponse | None" = dc_field( default=None, metadata=dc_config(field_name="campaign") ) - users: "Optional[PagerResponse]" = dc_field( + users: "PagerResponse | None" = dc_field( default=None, metadata=dc_config(field_name="users") ) @@ -9493,116 +9411,112 @@ class CreateChannelTypeRequest(DataClassJsonMixin): # Channel type name name: str = dc_field(metadata=dc_config(field_name="name")) # Blocklist - blocklist: Optional[str] = dc_field( + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) # Blocklist behavior. One of: flag, block, shadow_block - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) # Connect events - connect_events: Optional[bool] = dc_field( + connect_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="connect_events") ) # Count messages in channel. - count_messages: Optional[bool] = dc_field( + count_messages: bool | None = dc_field( default=None, metadata=dc_config(field_name="count_messages") ) # Custom events - custom_events: Optional[bool] = dc_field( + custom_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="custom_events") ) - delivery_events: Optional[bool] = dc_field( + delivery_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="delivery_events") ) # Mark messages pending - mark_messages_pending: Optional[bool] = dc_field( + mark_messages_pending: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_messages_pending") ) # Message retention. One of: infinite, numeric - message_retention: Optional[str] = dc_field( + message_retention: str | None = dc_field( default=None, metadata=dc_config(field_name="message_retention") ) # Mutes - mutes: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="mutes") - ) + mutes: bool | None = dc_field(default=None, metadata=dc_config(field_name="mutes")) # Partition size - partition_size: Optional[int] = dc_field( + partition_size: int | None = dc_field( default=None, metadata=dc_config(field_name="partition_size") ) # Partition TTL - partition_ttl: Optional[str] = dc_field( + partition_ttl: str | None = dc_field( default=None, metadata=dc_config(field_name="partition_ttl") ) # Polls - polls: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="polls") - ) + polls: bool | None = dc_field(default=None, metadata=dc_config(field_name="polls")) # Default push notification level for the channel type. One of: all, all_mentions, mentions, direct_mentions, none - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) # Push notifications - push_notifications: Optional[bool] = dc_field( + push_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="push_notifications") ) # Reactions - reactions: Optional[bool] = dc_field( + reactions: bool | None = dc_field( default=None, metadata=dc_config(field_name="reactions") ) # Read events - read_events: Optional[bool] = dc_field( + read_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="read_events") ) # Replies - replies: Optional[bool] = dc_field( + replies: bool | None = dc_field( default=None, metadata=dc_config(field_name="replies") ) # Search - search: Optional[bool] = dc_field( + search: bool | None = dc_field( default=None, metadata=dc_config(field_name="search") ) # Enables shared location messages - shared_locations: Optional[bool] = dc_field( + shared_locations: bool | None = dc_field( default=None, metadata=dc_config(field_name="shared_locations") ) - skip_last_msg_update_for_system_msgs: Optional[bool] = dc_field( + skip_last_msg_update_for_system_msgs: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_last_msg_update_for_system_msgs"), ) # Typing events - typing_events: Optional[bool] = dc_field( + typing_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="typing_events") ) # Uploads - uploads: Optional[bool] = dc_field( + uploads: bool | None = dc_field( default=None, metadata=dc_config(field_name="uploads") ) # URL enrichment - url_enrichment: Optional[bool] = dc_field( + url_enrichment: bool | None = dc_field( default=None, metadata=dc_config(field_name="url_enrichment") ) - user_message_reminders: Optional[bool] = dc_field( + user_message_reminders: bool | None = dc_field( default=None, metadata=dc_config(field_name="user_message_reminders") ) # Blocklists - blocklists: "Optional[List[BlockListOptions]]" = dc_field( + blocklists: "list[BlockListOptions] | None" = dc_field( default=None, metadata=dc_config(field_name="blocklists") ) # List of commands that channel supports - commands: Optional[List[str]] = dc_field( + commands: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="commands") ) # List of permissions for the channel type - permissions: "Optional[List[PolicyRequest]]" = dc_field( + permissions: "list[PolicyRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="permissions") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) # List of grants for the channel type - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) @@ -9630,6 +9544,9 @@ class CreateChannelTypeResponse(DataClassJsonMixin): max_message_length: int = dc_field( metadata=dc_config(field_name="max_message_length") ) + message_retention: str = dc_field( + metadata=dc_config(field_name="message_retention") + ) mutes: bool = dc_field(metadata=dc_config(field_name="mutes")) name: str = dc_field(metadata=dc_config(field_name="name")) polls: bool = dc_field(metadata=dc_config(field_name="polls")) @@ -9660,37 +9577,37 @@ class CreateChannelTypeResponse(DataClassJsonMixin): user_message_reminders: bool = dc_field( metadata=dc_config(field_name="user_message_reminders") ) - commands: List[str] = dc_field(metadata=dc_config(field_name="commands")) - permissions: "List[PolicyRequest]" = dc_field( + commands: list[str] = dc_field(metadata=dc_config(field_name="commands")) + permissions: "list[PolicyRequest]" = dc_field( metadata=dc_config(field_name="permissions") ) - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) - blocklist: Optional[str] = dc_field( + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) - partition_size: Optional[int] = dc_field( + partition_size: int | None = dc_field( default=None, metadata=dc_config(field_name="partition_size") ) - partition_ttl: Optional[str] = dc_field( + partition_ttl: str | None = dc_field( default=None, metadata=dc_config(field_name="partition_ttl") ) - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - blocklists: "Optional[List[BlockListOptions]]" = dc_field( + blocklists: "list[BlockListOptions] | None" = dc_field( default=None, metadata=dc_config(field_name="blocklists") ) # Sets thresholds for AI moderation - automod_thresholds: "Optional[Thresholds]" = dc_field( + automod_thresholds: "Thresholds | None" = dc_field( default=None, metadata=dc_config(field_name="automod_thresholds") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) @@ -9698,14 +9615,14 @@ class CreateChannelTypeResponse(DataClassJsonMixin): @dataclass class CreateCollectionsRequest(DataClassJsonMixin): # List of collections to create - collections: "List[CollectionRequest]" = dc_field( + collections: "list[CollectionRequest]" = dc_field( metadata=dc_config(field_name="collections") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -9714,7 +9631,7 @@ class CreateCollectionsRequest(DataClassJsonMixin): class CreateCollectionsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of created collections - collections: "List[CollectionResponse]" = dc_field( + collections: "list[CollectionResponse]" = dc_field( metadata=dc_config(field_name="collections") ) @@ -9726,16 +9643,16 @@ class CreateCommandRequest(DataClassJsonMixin): # Unique command name name: str = dc_field(metadata=dc_config(field_name="name")) # Arguments help text, shown in commands auto-completion - args: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="args")) + args: str | None = dc_field(default=None, metadata=dc_config(field_name="args")) # Set name used for grouping commands - set: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="set")) + set: str | None = dc_field(default=None, metadata=dc_config(field_name="set")) @dataclass class CreateCommandResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Represents custom chat command - command: "Optional[Command]" = dc_field( + command: "Command | None" = dc_field( default=None, metadata=dc_config(field_name="command") ) @@ -9747,23 +9664,23 @@ class CreateDeviceRequest(DataClassJsonMixin): # Push provider push_provider: str = dc_field(metadata=dc_config(field_name="push_provider")) # Stable physical device identifier used to deduplicate pushes across push providers (e.g. APNs VoIP and Firebase on the same iOS device). Distinct from 'id', which is the push token. - hardware_id: Optional[str] = dc_field( + hardware_id: str | None = dc_field( default=None, metadata=dc_config(field_name="hardware_id") ) # Push provider name - push_provider_name: Optional[str] = dc_field( + push_provider_name: str | None = dc_field( default=None, metadata=dc_config(field_name="push_provider_name") ) # **Server-side only**. User ID which server acts upon - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # When true the token is for Apple VoIP push notifications - voip_token: Optional[bool] = dc_field( + voip_token: bool | None = dc_field( default=None, metadata=dc_config(field_name="voip_token") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -9776,17 +9693,17 @@ class CreateExternalStorageRequest(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) # The type of storage to use storage_type: str = dc_field(metadata=dc_config(field_name="storage_type")) - gcs_credentials: Optional[str] = dc_field( + gcs_credentials: str | None = dc_field( default=None, metadata=dc_config(field_name="gcs_credentials") ) # The path prefix to use for storing files - path: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="path")) + path: str | None = dc_field(default=None, metadata=dc_config(field_name="path")) # Config for creating Amazon S3 storage. - aws_s3: "Optional[S3Request]" = dc_field( + aws_s3: "S3Request | None" = dc_field( default=None, metadata=dc_config(field_name="aws_s3") ) # Config for creating Azure Blob Storage storage - azure_blob: "Optional[AzureRequest]" = dc_field( + azure_blob: "AzureRequest | None" = dc_field( default=None, metadata=dc_config(field_name="azure_blob") ) @@ -9802,37 +9719,37 @@ class CreateFeedGroupRequest(DataClassJsonMixin): # Unique identifier for the feed group id: str = dc_field(metadata=dc_config(field_name="id")) # Default visibility for the feed group, can be 'public', 'visible', 'followers', 'members', or 'private'. Defaults to 'visible' if not provided. - default_visibility: Optional[str] = dc_field( + default_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="default_visibility") ) # Configuration for activity processors - activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + activity_processors: "list[ActivityProcessorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_processors") ) # Configuration for activity selectors - activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + activity_selectors: "list[ActivitySelectorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_selectors") ) - activity_filter: "Optional[ActivityFilterConfig]" = dc_field( + activity_filter: "ActivityFilterConfig | None" = dc_field( default=None, metadata=dc_config(field_name="activity_filter") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) # Custom data for the feed group - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - notification: "Optional[NotificationConfig]" = dc_field( + notification: "NotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="notification") ) - push_notification: "Optional[PushNotificationConfig]" = dc_field( + push_notification: "PushNotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="push_notification") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) - stories: "Optional[StoriesConfig]" = dc_field( + stories: "StoriesConfig | None" = dc_field( default=None, metadata=dc_config(field_name="stories") ) @@ -9850,13 +9767,13 @@ class CreateFeedViewRequest(DataClassJsonMixin): # Unique identifier for the feed view id: str = dc_field(metadata=dc_config(field_name="id")) # Configuration for selecting activities - activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + activity_selectors: "list[ActivitySelectorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_selectors") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) @@ -9870,9 +9787,9 @@ class CreateFeedViewResponse(DataClassJsonMixin): @dataclass class CreateFeedsBatchRequest(DataClassJsonMixin): # List of feeds to create - feeds: "List[FeedRequest]" = dc_field(metadata=dc_config(field_name="feeds")) + feeds: "list[FeedRequest]" = dc_field(metadata=dc_config(field_name="feeds")) # If true, enriches the created feeds with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) @@ -9881,7 +9798,7 @@ class CreateFeedsBatchRequest(DataClassJsonMixin): class CreateFeedsBatchResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of created feeds - feeds: "List[FeedResponse]" = dc_field(metadata=dc_config(field_name="feeds")) + feeds: "list[FeedResponse]" = dc_field(metadata=dc_config(field_name="feeds")) @dataclass @@ -9904,7 +9821,7 @@ class CreateGuestResponse(DataClassJsonMixin): class CreateImportRequest(DataClassJsonMixin): mode: str = dc_field(metadata=dc_config(field_name="mode")) path: str = dc_field(metadata=dc_config(field_name="path")) - merge_custom: Optional[bool] = dc_field( + merge_custom: bool | None = dc_field( default=None, metadata=dc_config(field_name="merge_custom") ) @@ -9913,14 +9830,14 @@ class CreateImportRequest(DataClassJsonMixin): class CreateImportResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - import_task: "Optional[ImportTask]" = dc_field( + import_task: "ImportTask | None" = dc_field( default=None, metadata=dc_config(field_name="import_task") ) @dataclass class CreateImportURLRequest(DataClassJsonMixin): - filename: Optional[str] = dc_field( + filename: str | None = dc_field( default=None, metadata=dc_config(field_name="filename") ) @@ -9939,11 +9856,11 @@ class CreateImportV2TaskRequest(DataClassJsonMixin): settings: "ImportV2TaskSettings" = dc_field( metadata=dc_config(field_name="settings") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -9984,19 +9901,19 @@ class CreateMembershipLevelRequest(DataClassJsonMixin): # Display name for the membership level name: str = dc_field(metadata=dc_config(field_name="name")) # Optional description of the membership level - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Priority level (higher numbers = higher priority) - priority: Optional[int] = dc_field( + priority: int | None = dc_field( default=None, metadata=dc_config(field_name="priority") ) # Activity tags this membership level gives access to - tags: Optional[List[str]] = dc_field( + tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="tags") ) # Custom data for the membership level - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -10009,23 +9926,45 @@ class CreateMembershipLevelResponse(DataClassJsonMixin): ) +@dataclass +class CreatePermissionRequest(DataClassJsonMixin): + # Action name this permission is for (e.g. SendMessage) + action: str = dc_field(metadata=dc_config(field_name="action")) + # Unique permission ID + id: str = dc_field(metadata=dc_config(field_name="id")) + # Name of the permission + name: str = dc_field(metadata=dc_config(field_name="name")) + # MongoDB style condition which decides whether or not the permission is granted + condition: dict[str, object] = dc_field(metadata=dc_config(field_name="condition")) + # Description of the permission + description: str | None = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + # Whether this permission applies to resource owner or not + owner: bool | None = dc_field(default=None, metadata=dc_config(field_name="owner")) + # Whether this permission applies to teammates (multi-tenancy mode only) + same_team: bool | None = dc_field( + default=None, metadata=dc_config(field_name="same_team") + ) + + @dataclass class CreatePolicyTestSetRequest(DataClassJsonMixin): # Display name; unique within an app name: str = dc_field(metadata=dc_config(field_name="name")) # Moderation config key (default: app default) - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) # Execution target: 'check' or 'labels'. Optional — defaults to 'labels' when the org has the labels API enabled, 'check' otherwise - mode: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mode")) + mode: str | None = dc_field(default=None, metadata=dc_config(field_name="mode")) # Team scope for the config (optional) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Messages to test; capped at 1000. Mutually exclusive with seed - rows: "Optional[List[PolicyTestRow]]" = dc_field( + rows: "list[PolicyTestRow] | None" = dc_field( default=None, metadata=dc_config(field_name="rows") ) - seed: "Optional[PolicyTestSeedSpec]" = dc_field( + seed: "PolicyTestSeedSpec | None" = dc_field( default=None, metadata=dc_config(field_name="seed") ) @@ -10034,15 +9973,15 @@ class CreatePolicyTestSetRequest(DataClassJsonMixin): class CreatePollOptionRequest(DataClassJsonMixin): # Option text text: str = dc_field(metadata=dc_config(field_name="text")) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for this object - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -10052,73 +9991,99 @@ class CreatePollRequest(DataClassJsonMixin): # The name of the poll name: str = dc_field(metadata=dc_config(field_name="name")) # Indicates whether users can suggest user defined answers - allow_answers: Optional[bool] = dc_field( + allow_answers: bool | None = dc_field( default=None, metadata=dc_config(field_name="allow_answers") ) - allow_user_suggested_options: Optional[bool] = dc_field( + allow_user_suggested_options: bool | None = dc_field( default=None, metadata=dc_config(field_name="allow_user_suggested_options") ) # A description of the poll - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Indicates whether users can cast multiple votes - enforce_unique_vote: Optional[bool] = dc_field( + enforce_unique_vote: bool | None = dc_field( default=None, metadata=dc_config(field_name="enforce_unique_vote") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # Indicates whether the poll is open for voting - is_closed: Optional[bool] = dc_field( + is_closed: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_closed") ) # Indicates the maximum amount of votes a user can cast - max_votes_allowed: Optional[int] = dc_field( + max_votes_allowed: int | None = dc_field( default=None, metadata=dc_config(field_name="max_votes_allowed") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - voting_visibility: Optional[str] = dc_field( + voting_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="voting_visibility") ) - options: "Optional[List[PollOptionInput]]" = dc_field( + options: "list[PollOptionInput] | None" = dc_field( default=None, metadata=dc_config(field_name="options") ) # Custom data for this object - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) +@dataclass +class CreatePredefinedFilterRequest(DataClassJsonMixin): + # The unique name of the predefined filter (alphanumeric, _, - only) + name: str = dc_field(metadata=dc_config(field_name="name")) + # The operation this filter is for (e.g., QueryChannels) + operation: str = dc_field(metadata=dc_config(field_name="operation")) + # Filter to apply to the query + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + # The description of the predefined filter + description: str | None = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + sort: "list[dict[str, object]] | None" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + + +@dataclass +class CreatePredefinedFilterResponse(DataClassJsonMixin): + # Duration of the request in milliseconds + duration: str = dc_field(metadata=dc_config(field_name="duration")) + predefined_filter: "PredefinedFilterResponse | None" = dc_field( + default=None, metadata=dc_config(field_name="predefined_filter") + ) + + @dataclass class CreateQueueRequest(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) type: str = dc_field(metadata=dc_config(field_name="type")) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - sort: "Optional[List[Dict[str, object]]]" = dc_field( + sort: "list[dict[str, object]] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) - filters: Optional[Dict[str, object]] = dc_field( + filters: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filters") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class CreateReminderRequest(DataClassJsonMixin): - remind_at: Optional[datetime] = dc_field( + remind_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="remind_at", @@ -10127,11 +10092,11 @@ class CreateReminderRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -10154,13 +10119,13 @@ class CreateSIPTrunkRequest(DataClassJsonMixin): # Name of the SIP trunk name: str = dc_field(metadata=dc_config(field_name="name")) # Phone numbers associated with this SIP trunk - numbers: List[str] = dc_field(metadata=dc_config(field_name="numbers")) + numbers: list[str] = dc_field(metadata=dc_config(field_name="numbers")) # Optional password for SIP trunk authentication - password: Optional[str] = dc_field( + password: str | None = dc_field( default=None, metadata=dc_config(field_name="password") ) # Optional list of allowed IPv4/IPv6 addresses or CIDR blocks - allowed_ips: Optional[List[str]] = dc_field( + allowed_ips: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_ips") ) @@ -10169,7 +10134,7 @@ class CreateSIPTrunkRequest(DataClassJsonMixin): class CreateSIPTrunkResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # SIP trunk information - sip_trunk: "Optional[SIPTrunkResponse]" = dc_field( + sip_trunk: "SIPTrunkResponse | None" = dc_field( default=None, metadata=dc_config(field_name="sip_trunk") ) @@ -10179,23 +10144,23 @@ class CreateSegmentRequest(DataClassJsonMixin): # The type of the segment type: str = dc_field(metadata=dc_config(field_name="type")) # If true, all sender channels are included in the segment - all_sender_channels: Optional[bool] = dc_field( + all_sender_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="all_sender_channels") ) # If true, all users are included in the segment - all_users: Optional[bool] = dc_field( + all_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="all_users") ) # The description of the segment (max 256 characters) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # The ID of the segment - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # The name of the segment (max 128 characters) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -10204,7 +10169,7 @@ class CreateSegmentRequest(DataClassJsonMixin): class CreateSegmentResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - segment: "Optional[SegmentResponse]" = dc_field( + segment: "SegmentResponse | None" = dc_field( default=None, metadata=dc_config(field_name="segment") ) @@ -10214,17 +10179,17 @@ class CreateUserGroupRequest(DataClassJsonMixin): # The user friendly name of the user group name: str = dc_field(metadata=dc_config(field_name="name")) # An optional description for the group - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Optional user group ID. If not provided, a UUID v7 will be generated - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # Optional team ID to scope the group to a team - team_id: Optional[str] = dc_field( + team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="team_id") ) # Optional initial list of user IDs to add as members - member_ids: Optional[List[str]] = dc_field( + member_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="member_ids") ) @@ -10232,7 +10197,7 @@ class CreateUserGroupRequest(DataClassJsonMixin): @dataclass class CreateUserGroupResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - user_group: "Optional[UserGroupResponse]" = dc_field( + user_group: "UserGroupResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -10240,9 +10205,9 @@ class CreateUserGroupResponse(DataClassJsonMixin): @dataclass class CustomActionRequestPayload(DataClassJsonMixin): # Custom action identifier - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # Custom action options - options: Optional[Dict[str, object]] = dc_field( + options: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="options") ) @@ -10252,15 +10217,13 @@ class CustomCheckFlag(DataClassJsonMixin): # Type of check (custom_check_text, custom_check_image, custom_check_video) type: str = dc_field(metadata=dc_config(field_name="type")) # Optional explanation for the flag - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) # Labels from various moderation sources - labels: Optional[List[str]] = dc_field( + labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="labels") ) # Additional metadata for the flag - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -10272,20 +10235,20 @@ class CustomCheckRequest(DataClassJsonMixin): # Type of entity to perform custom check on entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) # List of custom check flags (1-10 flags required) - flags: "List[CustomCheckFlag]" = dc_field(metadata=dc_config(field_name="flags")) + flags: "list[CustomCheckFlag]" = dc_field(metadata=dc_config(field_name="flags")) # ID of the user who created the entity (required for non-message entities) - entity_creator_id: Optional[str] = dc_field( + entity_creator_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Content payload for moderation - moderation_payload: "Optional[ModerationPayloadRequest]" = dc_field( + moderation_payload: "ModerationPayloadRequest | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_payload") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -10297,7 +10260,7 @@ class CustomCheckResponse(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) # Status of the custom check status: str = dc_field(metadata=dc_config(field_name="status")) - item: "Optional[ReviewQueueItemResponse]" = dc_field( + item: "ReviewQueueItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="item") ) @@ -10312,9 +10275,9 @@ class CustomEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field(default="*", metadata=dc_config(field_name="type")) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -10337,7 +10300,7 @@ class CustomVideoEvent(DataClassJsonMixin): ) ) # Custom data for this object - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # The type of event, "custom" in this case @@ -10390,13 +10353,13 @@ class DailyDigestCallSessionSummary(DataClassJsonMixin): counts: "CallStatsParticipantCounts" = dc_field( metadata=dc_config(field_name="counts") ) - digest_error: Optional[str] = dc_field( + digest_error: str | None = dc_field( default=None, metadata=dc_config(field_name="digest_error") ) - session_ended_at: Optional[str] = dc_field( + session_ended_at: str | None = dc_field( default=None, metadata=dc_config(field_name="session_ended_at") ) - session_started_at: Optional[str] = dc_field( + session_started_at: str | None = dc_field( default=None, metadata=dc_config(field_name="session_started_at") ) @@ -10414,7 +10377,7 @@ class DailyMetricStatsResponse(DataClassJsonMixin): # Total value across all days in the date range total: int = dc_field(metadata=dc_config(field_name="total")) # Array of daily metric values - daily: "List[DailyMetricResponse]" = dc_field( + daily: "list[DailyMetricResponse]" = dc_field( metadata=dc_config(field_name="daily") ) @@ -10434,23 +10397,23 @@ class Data(DataClassJsonMixin): @dataclass class DataDogInfo(DataClassJsonMixin): - api_key: Optional[str] = dc_field( + api_key: str | None = dc_field( default=None, metadata=dc_config(field_name="api_key") ) - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - site: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="site")) + site: str | None = dc_field(default=None, metadata=dc_config(field_name="site")) @dataclass class DeactivateUserRequest(DataClassJsonMixin): # ID of the user who deactivated the user - created_by_id: Optional[str] = dc_field( + created_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_id") ) # Makes messages appear to be deleted - mark_messages_deleted: Optional[bool] = dc_field( + mark_messages_deleted: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_messages_deleted") ) @@ -10460,7 +10423,7 @@ class DeactivateUserResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -10468,16 +10431,16 @@ class DeactivateUserResponse(DataClassJsonMixin): @dataclass class DeactivateUsersRequest(DataClassJsonMixin): # User IDs to deactivate - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + user_ids: list[str] = dc_field(metadata=dc_config(field_name="user_ids")) # ID of the user who deactivated the users - created_by_id: Optional[str] = dc_field( + created_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_id") ) - mark_channels_deleted: Optional[bool] = dc_field( + mark_channels_deleted: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_channels_deleted") ) # Makes messages appear to be deleted - mark_messages_deleted: Optional[bool] = dc_field( + mark_messages_deleted: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_messages_deleted") ) @@ -10492,27 +10455,19 @@ class DeactivateUsersResponse(DataClassJsonMixin): @dataclass class DecayFunctionConfig(DataClassJsonMixin): # Base value for decay function - base: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="base")) + base: str | None = dc_field(default=None, metadata=dc_config(field_name="base")) # Decay rate - decay: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="decay") - ) + decay: str | None = dc_field(default=None, metadata=dc_config(field_name="decay")) # Direction of decay - direction: Optional[str] = dc_field( + direction: str | None = dc_field( default=None, metadata=dc_config(field_name="direction") ) # Offset value for decay function - offset: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) + offset: str | None = dc_field(default=None, metadata=dc_config(field_name="offset")) # Origin value for decay function - origin: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="origin") - ) + origin: str | None = dc_field(default=None, metadata=dc_config(field_name="origin")) # Scale factor for decay function - scale: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="scale") - ) + scale: str | None = dc_field(default=None, metadata=dc_config(field_name="scale")) @dataclass @@ -10525,20 +10480,20 @@ class DeleteActionConfigResponse(DataClassJsonMixin): @dataclass class DeleteActivitiesRequest(DataClassJsonMixin): # List of activity IDs to delete - ids: List[str] = dc_field(metadata=dc_config(field_name="ids")) + ids: list[str] = dc_field(metadata=dc_config(field_name="ids")) # Whether to also delete any notification activities created from mentions in these activities - delete_notification_activity: Optional[bool] = dc_field( + delete_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="delete_notification_activity") ) # Whether to permanently delete the activities - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -10547,7 +10502,7 @@ class DeleteActivitiesRequest(DataClassJsonMixin): class DeleteActivitiesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of activity IDs that were successfully deleted - deleted_ids: List[str] = dc_field(metadata=dc_config(field_name="deleted_ids")) + deleted_ids: list[str] = dc_field(metadata=dc_config(field_name="deleted_ids")) @dataclass @@ -10562,21 +10517,19 @@ class DeleteActivityReactionResponse(DataClassJsonMixin): @dataclass class DeleteActivityRequestPayload(DataClassJsonMixin): # ID of the activity to delete (alternative to item_id) - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Type of the entity (required for delete_activity to distinguish v2 vs v3) - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) # Whether to permanently delete the activity - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) # Reason for deletion - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass @@ -10598,7 +10551,7 @@ class DeleteBookmarkResponse(DataClassJsonMixin): @dataclass class DeleteCallRequest(DataClassJsonMixin): # if true the call will be hard deleted along with all related data - hard: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="hard")) + hard: bool | None = dc_field(default=None, metadata=dc_config(field_name="hard")) @dataclass @@ -10606,7 +10559,7 @@ class DeleteCallResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Represents a call call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) - task_id: Optional[str] = dc_field( + task_id: str | None = dc_field( default=None, metadata=dc_config(field_name="task_id") ) @@ -10622,7 +10575,7 @@ class DeleteChannelResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) @@ -10630,9 +10583,9 @@ class DeleteChannelResponse(DataClassJsonMixin): @dataclass class DeleteChannelsRequest(DataClassJsonMixin): # All channels that should be deleted - cids: List[str] = dc_field(metadata=dc_config(field_name="cids")) + cids: list[str] = dc_field(metadata=dc_config(field_name="cids")) # Specify if channels and all ressources should be hard deleted - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) @@ -10641,11 +10594,11 @@ class DeleteChannelsRequest(DataClassJsonMixin): class DeleteChannelsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - task_id: Optional[str] = dc_field( + task_id: str | None = dc_field( default=None, metadata=dc_config(field_name="task_id") ) # Map of channel IDs and their deletion results - result: "Optional[Dict[str, Optional[DeleteChannelsResultResponse]]]" = dc_field( + result: "dict[str, DeleteChannelsResultResponse | None] | None" = dc_field( default=None, metadata=dc_config(field_name="result") ) @@ -10653,9 +10606,7 @@ class DeleteChannelsResponse(DataClassJsonMixin): @dataclass class DeleteChannelsResultResponse(DataClassJsonMixin): status: str = dc_field(metadata=dc_config(field_name="status")) - error: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="error") - ) + error: str | None = dc_field(default=None, metadata=dc_config(field_name="error")) @dataclass @@ -10688,21 +10639,19 @@ class DeleteCommentReactionResponse(DataClassJsonMixin): @dataclass class DeleteCommentRequestPayload(DataClassJsonMixin): # ID of the comment to delete (alternative to item_id) - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Type of the entity - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) # Whether to permanently delete the comment - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) # Reason for deletion - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass @@ -10734,7 +10683,7 @@ class DeleteFeedResponse(DataClassJsonMixin): @dataclass class DeleteFeedUserDataRequest(DataClassJsonMixin): # Whether to perform a hard delete instead of a soft delete - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) @@ -10754,13 +10703,13 @@ class DeleteFeedViewResponse(DataClassJsonMixin): @dataclass class DeleteFeedsBatchRequest(DataClassJsonMixin): # List of fully qualified feed IDs (format: group_id:feed_id) to delete - feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) + feeds: list[str] = dc_field(metadata=dc_config(field_name="feeds")) # Whether to permanently delete the feeds instead of soft delete - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) # When hard-deleting, also fully delete activities authored by each feed's owner from every other feed those activities were fanned out to. Default false preserves existing fan-out. Requires 'hard_delete' to be true; the request is rejected otherwise. Feeds with no recorded owner (created_by_id is empty) are silently skipped for the purge step — owner-matching against an empty string is a safety guard, not a wildcard. - purge_user_activities: Optional[bool] = dc_field( + purge_user_activities: bool | None = dc_field( default=None, metadata=dc_config(field_name="purge_user_activities") ) @@ -10781,21 +10730,19 @@ class DeleteImportV2TaskResponse(DataClassJsonMixin): @dataclass class DeleteMessageRequestPayload(DataClassJsonMixin): # ID of the message to delete (alternative to item_id) - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Type of the entity - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) # Whether to permanently delete the message - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) # Reason for deletion - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass @@ -10824,11 +10771,11 @@ class DeleteModerationTemplateResponse(DataClassJsonMixin): @dataclass class DeleteQueueRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -10836,21 +10783,19 @@ class DeleteQueueRequest(DataClassJsonMixin): @dataclass class DeleteReactionRequestPayload(DataClassJsonMixin): # ID of the reaction to delete (alternative to item_id) - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Type of the entity - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) # Whether to permanently delete the reaction - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) # Reason for deletion - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass @@ -10898,7 +10843,7 @@ class DeleteSIPTrunkResponse(DataClassJsonMixin): @dataclass class DeleteSegmentTargetsRequest(DataClassJsonMixin): # Target IDs - target_ids: List[str] = dc_field(metadata=dc_config(field_name="target_ids")) + target_ids: list[str] = dc_field(metadata=dc_config(field_name="target_ids")) @dataclass @@ -10912,104 +10857,96 @@ class DeleteUserMessagesRequestPayload(DataClassJsonMixin): # Message deletion mode: soft, pruning, or hard delete_messages: str = dc_field(metadata=dc_config(field_name="delete_messages")) # Optional: scope deletion to a single channel (alternative to app-wide deletion) - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) # Whether to also delete the user's reactions on other users' messages - delete_reactions: Optional[bool] = dc_field( + delete_reactions: bool | None = dc_field( default=None, metadata=dc_config(field_name="delete_reactions") ) # ID of the user whose messages should be deleted (alternative to item_id) - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Type of the entity - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) # Reason for the deletion - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass class DeleteUserRequestPayload(DataClassJsonMixin): # Also delete all user conversations - delete_conversation_channels: Optional[bool] = dc_field( + delete_conversation_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="delete_conversation_channels") ) # Delete flagged feeds content - delete_feeds_content: Optional[bool] = dc_field( + delete_feeds_content: bool | None = dc_field( default=None, metadata=dc_config(field_name="delete_feeds_content") ) # ID of the user to delete (alternative to item_id) - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Type of the entity - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) # Whether to permanently delete the user - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) # Also delete all user messages - mark_messages_deleted: Optional[bool] = dc_field( + mark_messages_deleted: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_messages_deleted") ) # Reason for deletion - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass class DeleteUsersRequest(DataClassJsonMixin): # IDs of users to delete - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + user_ids: list[str] = dc_field(metadata=dc_config(field_name="user_ids")) # Calls delete mode. # Affected calls are those that include exactly two members, one of whom is the user being deleted. # * null or empty string - doesn't delete any calls # * soft - marks user's calls and their related data as deleted (soft-delete) # * hard - deletes user's calls and their data completely (hard-delete) - calls: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="calls") - ) + calls: str | None = dc_field(default=None, metadata=dc_config(field_name="calls")) # Conversation channels delete mode. # Conversation channel is any channel which only has two members one of which is the user being deleted. # * null or empty string - doesn't delete any conversation channels # * soft - marks all conversation channels as deleted (same effect as Delete Channels with 'hard' option disabled) # * hard - deletes channel and all its data completely including messages (same effect as Delete Channels with 'hard' option enabled) - conversations: Optional[str] = dc_field( + conversations: str | None = dc_field( default=None, metadata=dc_config(field_name="conversations") ) # Delete user files. # * false or empty string - doesn't delete any files # * true - deletes all files uploaded by the user, including images and attachments. - files: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="files") - ) + files: bool | None = dc_field(default=None, metadata=dc_config(field_name="files")) # Message delete mode. # * null or empty string - doesn't delete user messages # * soft - marks all user messages as deleted without removing any related message data # * pruning - marks all user messages as deleted, nullifies message information and removes some message data such as reactions and flags # * hard - deletes messages completely with all related information - messages: Optional[str] = dc_field( + messages: str | None = dc_field( default=None, metadata=dc_config(field_name="messages") ) - new_call_owner_id: Optional[str] = dc_field( + new_call_owner_id: str | None = dc_field( default=None, metadata=dc_config(field_name="new_call_owner_id") ) - new_channel_owner_id: Optional[str] = dc_field( + new_channel_owner_id: str | None = dc_field( default=None, metadata=dc_config(field_name="new_channel_owner_id") ) # User delete mode. # * soft - marks user as deleted and retains all user data # * pruning - marks user as deleted and nullifies user information # * hard - deletes user completely. Requires 'hard' option for messages and conversations as well - user: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="user")) + user: str | None = dc_field(default=None, metadata=dc_config(field_name="user")) @dataclass @@ -11022,8 +10959,8 @@ class DeleteUsersResponse(DataClassJsonMixin): @dataclass class DeliveredMessagePayload(DataClassJsonMixin): - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) @dataclass @@ -11036,27 +10973,27 @@ class DeliveryZoneSegment(DataClassJsonMixin): key: str = dc_field(metadata=dc_config(field_name="key")) outlier: bool = dc_field(metadata=dc_config(field_name="outlier")) sessions: int = dc_field(metadata=dc_config(field_name="sessions")) - avg_quality_score: Optional[float] = dc_field( + avg_quality_score: float | None = dc_field( default=None, metadata=dc_config(field_name="avg_quality_score") ) - p5_quality_score: Optional[float] = dc_field( + p5_quality_score: float | None = dc_field( default=None, metadata=dc_config(field_name="p5_quality_score") ) - poor_pct: Optional[float] = dc_field( + poor_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="poor_pct") ) - share_pct: Optional[float] = dc_field( + share_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="share_pct") ) - watch_share_pct: Optional[float] = dc_field( + watch_share_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="watch_share_pct") ) @dataclass class DeviceDataResponse(DataClassJsonMixin): - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - version: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + version: str | None = dc_field( default=None, metadata=dc_config(field_name="version") ) @@ -11086,23 +11023,23 @@ class DeviceResponse(DataClassJsonMixin): # User ID user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Whether device is disabled or not - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="disabled") ) # Reason explaining why device had been disabled - disabled_reason: Optional[str] = dc_field( + disabled_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="disabled_reason") ) # Stable physical device identifier used to deduplicate pushes across push providers - hardware_id: Optional[str] = dc_field( + hardware_id: str | None = dc_field( default=None, metadata=dc_config(field_name="hardware_id") ) # Push provider name - push_provider_name: Optional[str] = dc_field( + push_provider_name: str | None = dc_field( default=None, metadata=dc_config(field_name="push_provider_name") ) # When true the token is for Apple VoIP push notifications - voip: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="voip")) + voip: bool | None = dc_field(default=None, metadata=dc_config(field_name="voip")) @dataclass @@ -11111,38 +11048,38 @@ class DraftPayloadResponse(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) # Text of the message text: str = dc_field(metadata=dc_config(field_name="text")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Contains HTML markup of the message - html: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="html")) + html: str | None = dc_field(default=None, metadata=dc_config(field_name="html")) # MML content of the message - mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) + mml: str | None = dc_field(default=None, metadata=dc_config(field_name="mml")) # ID of parent message (thread) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # Identifier of the poll to include in the message - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) - quoted_message_id: Optional[str] = dc_field( + quoted_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="quoted_message_id") ) # Whether thread reply should be shown in the channel as well - show_in_channel: Optional[bool] = dc_field( + show_in_channel: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_in_channel") ) # Whether message is silent or not - silent: Optional[bool] = dc_field( + silent: bool | None = dc_field( default=None, metadata=dc_config(field_name="silent") ) # Contains type of the message. One of: regular, system - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) # Array of message attachments - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # List of mentioned users - mentioned_users: "Optional[List[UserResponse]]" = dc_field( + mentioned_users: "list[UserResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="mentioned_users") ) @@ -11160,19 +11097,19 @@ class DraftResponse(DataClassJsonMixin): ) # Contains the draft message content message: "DraftPayloadResponse" = dc_field(metadata=dc_config(field_name="message")) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # Represents any chat message - parent_message: "Optional[MessageResponse]" = dc_field( + parent_message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="parent_message") ) # Represents any chat message - quoted_message: "Optional[MessageResponse]" = dc_field( + quoted_message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="quoted_message") ) @@ -11180,15 +11117,15 @@ class DraftResponse(DataClassJsonMixin): @dataclass class EMAUStatsResponse(DataClassJsonMixin): # Per-day unique engaged user counts - daily: "List[DailyMetricResponse]" = dc_field( + daily: "list[DailyMetricResponse]" = dc_field( metadata=dc_config(field_name="daily") ) # Rolling 30-day engaged user count snapshots - last_30_days: "List[DailyMetricResponse]" = dc_field( + last_30_days: "list[DailyMetricResponse]" = dc_field( metadata=dc_config(field_name="last_30_days") ) # Calendar month-to-date engaged user count snapshots - month_to_date: "List[DailyMetricResponse]" = dc_field( + month_to_date: "list[DailyMetricResponse]" = dc_field( metadata=dc_config(field_name="month_to_date") ) @@ -11226,10 +11163,10 @@ class EgressRTMPResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - stream_key: Optional[str] = dc_field( + stream_key: str | None = dc_field( default=None, metadata=dc_config(field_name="stream_key") ) - stream_url: Optional[str] = dc_field( + stream_url: str | None = dc_field( default=None, metadata=dc_config(field_name="stream_url") ) @@ -11237,20 +11174,20 @@ class EgressRTMPResponse(DataClassJsonMixin): @dataclass class EgressResponse(DataClassJsonMixin): broadcasting: bool = dc_field(metadata=dc_config(field_name="broadcasting")) - rtmps: "List[EgressRTMPResponse]" = dc_field(metadata=dc_config(field_name="rtmps")) - composite_recording: "Optional[CompositeRecordingResponse]" = dc_field( + rtmps: "list[EgressRTMPResponse]" = dc_field(metadata=dc_config(field_name="rtmps")) + composite_recording: "CompositeRecordingResponse | None" = dc_field( default=None, metadata=dc_config(field_name="composite_recording") ) - frame_recording: "Optional[FrameRecordingResponse]" = dc_field( + frame_recording: "FrameRecordingResponse | None" = dc_field( default=None, metadata=dc_config(field_name="frame_recording") ) - hls: "Optional[EgressHLSResponse]" = dc_field( + hls: "EgressHLSResponse | None" = dc_field( default=None, metadata=dc_config(field_name="hls") ) - individual_recording: "Optional[IndividualRecordingResponse]" = dc_field( + individual_recording: "IndividualRecordingResponse | None" = dc_field( default=None, metadata=dc_config(field_name="individual_recording") ) - raw_recording: "Optional[RawRecordingResponse]" = dc_field( + raw_recording: "RawRecordingResponse | None" = dc_field( default=None, metadata=dc_config(field_name="raw_recording") ) @@ -11261,41 +11198,39 @@ class EncodingProfile(DataClassJsonMixin): metadata=dc_config(field_name="getstats_snapshots") ) source_file: str = dc_field(metadata=dc_config(field_name="source_file")) - svc_modes: List[str] = dc_field(metadata=dc_config(field_name="svc_modes")) - quality_limitation_durations_s: "Dict[str, int]" = dc_field( + svc_modes: list[str] = dc_field(metadata=dc_config(field_name="svc_modes")) + quality_limitation_durations_s: "dict[str, int]" = dc_field( metadata=dc_config(field_name="quality_limitation_durations_s") ) - quality_limitation_samples: "Dict[str, int]" = dc_field( + quality_limitation_samples: "dict[str, int]" = dc_field( metadata=dc_config(field_name="quality_limitation_samples") ) - avg_send_kbps: Optional[int] = dc_field( + avg_send_kbps: int | None = dc_field( default=None, metadata=dc_config(field_name="avg_send_kbps") ) - codec: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="codec") - ) - encoder_impl: Optional[str] = dc_field( + codec: str | None = dc_field(default=None, metadata=dc_config(field_name="codec")) + encoder_impl: str | None = dc_field( default=None, metadata=dc_config(field_name="encoder_impl") ) - fps_p10: Optional[int] = dc_field( + fps_p10: int | None = dc_field( default=None, metadata=dc_config(field_name="fps_p10") ) - fps_p50: Optional[int] = dc_field( + fps_p50: int | None = dc_field( default=None, metadata=dc_config(field_name="fps_p50") ) - hardware_encode: Optional[bool] = dc_field( + hardware_encode: bool | None = dc_field( default=None, metadata=dc_config(field_name="hardware_encode") ) - ladder_type: Optional[str] = dc_field( + ladder_type: str | None = dc_field( default=None, metadata=dc_config(field_name="ladder_type") ) - power_efficient: Optional[bool] = dc_field( + power_efficient: bool | None = dc_field( default=None, metadata=dc_config(field_name="power_efficient") ) - resolution: Optional[str] = dc_field( + resolution: str | None = dc_field( default=None, metadata=dc_config(field_name="resolution") ) - simulcast_layers: Optional[int] = dc_field( + simulcast_layers: int | None = dc_field( default=None, metadata=dc_config(field_name="simulcast_layers") ) @@ -11303,7 +11238,7 @@ class EncodingProfile(DataClassJsonMixin): @dataclass class EncryptionSettingsRequest(DataClassJsonMixin): # Encryption mode. One of: available, disabled, auto-on - mode: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mode")) + mode: str | None = dc_field(default=None, metadata=dc_config(field_name="mode")) @dataclass @@ -11325,36 +11260,32 @@ class EndCallResponse(DataClassJsonMixin): @dataclass class EnrichedActivity(DataClassJsonMixin): - foreign_id: Optional[str] = dc_field( + foreign_id: str | None = dc_field( default=None, metadata=dc_config(field_name="foreign_id") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - score: Optional[float] = dc_field( - default=None, metadata=dc_config(field_name="score") - ) - verb: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="verb")) - to: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="to") - ) - actor: "Optional[Data]" = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + score: float | None = dc_field(default=None, metadata=dc_config(field_name="score")) + verb: str | None = dc_field(default=None, metadata=dc_config(field_name="verb")) + to: list[str] | None = dc_field(default=None, metadata=dc_config(field_name="to")) + actor: "Data | None" = dc_field( default=None, metadata=dc_config(field_name="actor") ) - latest_reactions: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( + latest_reactions: "dict[str, list[EnrichedReaction]] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_reactions") ) - object: "Optional[Data]" = dc_field( + object: "Data | None" = dc_field( default=None, metadata=dc_config(field_name="object") ) - origin: "Optional[Data]" = dc_field( + origin: "Data | None" = dc_field( default=None, metadata=dc_config(field_name="origin") ) - own_reactions: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( + own_reactions: "dict[str, list[EnrichedReaction]] | None" = dc_field( default=None, metadata=dc_config(field_name="own_reactions") ) - reaction_counts: "Optional[Dict[str, int]]" = dc_field( + reaction_counts: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="reaction_counts") ) - target: "Optional[Data]" = dc_field( + target: "Data | None" = dc_field( default=None, metadata=dc_config(field_name="target") ) @@ -11368,7 +11299,7 @@ class EnrichedCollectionResponse(DataClassJsonMixin): # Enrichment status of the collection. One of: ok, notfound status: str = dc_field(metadata=dc_config(field_name="status")) # When the collection was created - created_at: Optional[datetime] = dc_field( + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -11378,7 +11309,7 @@ class EnrichedCollectionResponse(DataClassJsonMixin): ), ) # When the collection was last updated - updated_at: Optional[datetime] = dc_field( + updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="updated_at", @@ -11388,11 +11319,11 @@ class EnrichedCollectionResponse(DataClassJsonMixin): ), ) # ID of the user who owns this collection - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for the collection - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -11402,116 +11333,112 @@ class EnrichedReaction(DataClassJsonMixin): activity_id: str = dc_field(metadata=dc_config(field_name="activity_id")) kind: str = dc_field(metadata=dc_config(field_name="kind")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - parent: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="parent") - ) - target_feeds: Optional[List[str]] = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + parent: str | None = dc_field(default=None, metadata=dc_config(field_name="parent")) + target_feeds: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="target_feeds") ) - children_counts: "Optional[Dict[str, int]]" = dc_field( + children_counts: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="children_counts") ) - created_at: "Optional[Time]" = dc_field( + created_at: "Time | None" = dc_field( default=None, metadata=dc_config(field_name="created_at") ) - data: Optional[Dict[str, object]] = dc_field( + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) - latest_children: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( + latest_children: "dict[str, list[EnrichedReaction]] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_children") ) - own_children: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( + own_children: "dict[str, list[EnrichedReaction]] | None" = dc_field( default=None, metadata=dc_config(field_name="own_children") ) - updated_at: "Optional[Time]" = dc_field( + updated_at: "Time | None" = dc_field( default=None, metadata=dc_config(field_name="updated_at") ) - user: "Optional[Data]" = dc_field( - default=None, metadata=dc_config(field_name="user") - ) + user: "Data | None" = dc_field(default=None, metadata=dc_config(field_name="user")) @dataclass class EnrichmentOptions(DataClassJsonMixin): # Default: false. When true, includes fetching and enriching own_followings (follows where activity author's feeds follow current user's feeds). - enrich_own_followings: Optional[bool] = dc_field( + enrich_own_followings: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_followings") ) # Controls the top-level flat 'activities' array for aggregated feeds. For new apps, defaults to false (excluded); set to true to include. For older apps, defaults to true (included) for backward compatibility; set to false to exclude. - include_flat_activities: Optional[bool] = dc_field( + include_flat_activities: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_flat_activities") ) # Default: false. When true, includes score_vars in activity responses containing variable values used at ranking time. - include_score_vars: Optional[bool] = dc_field( + include_score_vars: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_score_vars") ) # Default: false. When true, skips all activity enrichments. - skip_activity: Optional[bool] = dc_field( + skip_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity") ) # Default: false. When true, skips enriching collections on activities. - skip_activity_collections: Optional[bool] = dc_field( + skip_activity_collections: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_collections") ) # Default: false. When true, skips enriching comments on activities. - skip_activity_comments: Optional[bool] = dc_field( + skip_activity_comments: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_comments") ) # Default: false. When true, skips enriching current_feed on activities. Note: CurrentFeed is still computed for permission checks, but enrichment is skipped. - skip_activity_current_feed: Optional[bool] = dc_field( + skip_activity_current_feed: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_current_feed") ) # Default: false. When true, skips enriching mentioned users on activities. - skip_activity_mentioned_users: Optional[bool] = dc_field( + skip_activity_mentioned_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_mentioned_users") ) # Default: false. When true, skips enriching own bookmarks on activities. - skip_activity_own_bookmarks: Optional[bool] = dc_field( + skip_activity_own_bookmarks: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_own_bookmarks") ) # Default: false. When true, skips enriching parent activities. - skip_activity_parents: Optional[bool] = dc_field( + skip_activity_parents: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_parents") ) # Default: false. When true, skips enriching poll data on activities. - skip_activity_poll: Optional[bool] = dc_field( + skip_activity_poll: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_poll") ) # Default: false. When true, skips fetching and enriching latest and own reactions on activities. Note: If reactions are already denormalized in the database, they will still be included. - skip_activity_reactions: Optional[bool] = dc_field( + skip_activity_reactions: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_reactions") ) # Default: false. When true, skips refreshing image URLs on activities. - skip_activity_refresh_image_urls: Optional[bool] = dc_field( + skip_activity_refresh_image_urls: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_activity_refresh_image_urls") ) # Default: false. When true, skips all enrichments. - skip_all: Optional[bool] = dc_field( + skip_all: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_all") ) # Default: false. When true, skips enriching user data on feed members. - skip_feed_member_user: Optional[bool] = dc_field( + skip_feed_member_user: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_feed_member_user") ) # Default: false. When true, skips fetching and enriching followers. Note: If followers_pagination is explicitly provided, followers will be fetched regardless of this setting. - skip_followers: Optional[bool] = dc_field( + skip_followers: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_followers") ) # Default: false. When true, skips fetching and enriching following. Note: If following_pagination is explicitly provided, following will be fetched regardless of this setting. - skip_following: Optional[bool] = dc_field( + skip_following: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_following") ) # Default: false. When true, skips computing and including capabilities for feeds. - skip_own_capabilities: Optional[bool] = dc_field( + skip_own_capabilities: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_own_capabilities") ) # Default: false. When true, skips fetching and enriching own_follows (follows where user's feeds follow target feeds). - skip_own_follows: Optional[bool] = dc_field( + skip_own_follows: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_own_follows") ) # Default: false. When true, skips enriching pinned activities. - skip_pins: Optional[bool] = dc_field( + skip_pins: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_pins") ) @@ -11549,15 +11476,15 @@ class EntityCreatorResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_ids: List[str] = dc_field( + blocked_user_ids: list[str] = dc_field( metadata=dc_config(field_name="blocked_user_ids") ) - teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - avg_response_time: Optional[int] = dc_field( + teams: list[str] = dc_field(metadata=dc_config(field_name="teams")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: int | None = dc_field( default=None, metadata=dc_config(field_name="avg_response_time") ) - ban_expires: Optional[datetime] = dc_field( + ban_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ban_expires", @@ -11566,10 +11493,10 @@ class EntityCreatorResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - bypass_moderation: Optional[bool] = dc_field( + bypass_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="bypass_moderation") ) - deactivated_at: Optional[datetime] = dc_field( + deactivated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deactivated_at", @@ -11578,7 +11505,7 @@ class EntityCreatorResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -11587,10 +11514,8 @@ class EntityCreatorResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - image: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image") - ) - last_active: Optional[datetime] = dc_field( + image: str | None = dc_field(default=None, metadata=dc_config(field_name="image")) + last_active: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_active", @@ -11599,8 +11524,8 @@ class EntityCreatorResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + revoke_tokens_issued_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="revoke_tokens_issued_before", @@ -11609,16 +11534,16 @@ class EntityCreatorResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - devices: "Optional[List[DeviceResponse]]" = dc_field( + devices: "list[DeviceResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="devices") ) - privacy_settings: "Optional[PrivacySettingsResponse]" = dc_field( + privacy_settings: "PrivacySettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="privacy_settings") ) - push_notifications: "Optional[PushNotificationSettingsResponse]" = dc_field( + push_notifications: "PushNotificationSettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="push_notifications") ) - teams_role: "Optional[Dict[str, str]]" = dc_field( + teams_role: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="teams_role") ) @@ -11627,10 +11552,10 @@ class EntityCreatorResponse(DataClassJsonMixin): class ErrorResult(DataClassJsonMixin): description: str = dc_field(metadata=dc_config(field_name="description")) type: str = dc_field(metadata=dc_config(field_name="type")) - stacktrace: Optional[str] = dc_field( + stacktrace: str | None = dc_field( default=None, metadata=dc_config(field_name="stacktrace") ) - version: Optional[str] = dc_field( + version: str | None = dc_field( default=None, metadata=dc_config(field_name="version") ) @@ -11638,35 +11563,27 @@ class ErrorResult(DataClassJsonMixin): @dataclass class EscalatePayload(DataClassJsonMixin): # Additional context for the reviewer - notes: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="notes") - ) + notes: str | None = dc_field(default=None, metadata=dc_config(field_name="notes")) # Priority of the escalation (low, medium, high) - priority: Optional[str] = dc_field( + priority: str | None = dc_field( default=None, metadata=dc_config(field_name="priority") ) # Reason for the escalation (from configured escalation_reasons) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass class EscalationMetadata(DataClassJsonMixin): - notes: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="notes") - ) - priority: Optional[str] = dc_field( + notes: str | None = dc_field(default=None, metadata=dc_config(field_name="notes")) + priority: str | None = dc_field( default=None, metadata=dc_config(field_name="priority") ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass class EventHook(DataClassJsonMixin): - created_at: Optional[datetime] = dc_field( + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -11675,63 +11592,63 @@ class EventHook(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - hook_type: Optional[str] = dc_field( + hook_type: str | None = dc_field( default=None, metadata=dc_config(field_name="hook_type") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - product: Optional[str] = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + product: str | None = dc_field( default=None, metadata=dc_config(field_name="product") ) - should_send_custom_events: Optional[bool] = dc_field( + should_send_custom_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="should_send_custom_events") ) - sns_auth_type: Optional[str] = dc_field( + sns_auth_type: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_auth_type") ) - sns_event_based_message_group_id_enabled: Optional[bool] = dc_field( + sns_event_based_message_group_id_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="sns_event_based_message_group_id_enabled"), ) - sns_key: Optional[str] = dc_field( + sns_key: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_key") ) - sns_region: Optional[str] = dc_field( + sns_region: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_region") ) - sns_role_arn: Optional[str] = dc_field( + sns_role_arn: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_role_arn") ) - sns_secret: Optional[str] = dc_field( + sns_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_secret") ) - sns_topic_arn: Optional[str] = dc_field( + sns_topic_arn: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_topic_arn") ) - sqs_auth_type: Optional[str] = dc_field( + sqs_auth_type: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_auth_type") ) - sqs_key: Optional[str] = dc_field( + sqs_key: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_key") ) - sqs_queue_url: Optional[str] = dc_field( + sqs_queue_url: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_queue_url") ) - sqs_region: Optional[str] = dc_field( + sqs_region: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_region") ) - sqs_role_arn: Optional[str] = dc_field( + sqs_role_arn: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_role_arn") ) - sqs_secret: Optional[str] = dc_field( + sqs_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_secret") ) - timeout_ms: Optional[int] = dc_field( + timeout_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="timeout_ms") ) - updated_at: Optional[datetime] = dc_field( + updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="updated_at", @@ -11740,16 +11657,16 @@ class EventHook(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - webhook_url: Optional[str] = dc_field( + webhook_url: str | None = dc_field( default=None, metadata=dc_config(field_name="webhook_url") ) - event_types: Optional[List[str]] = dc_field( + event_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="event_types") ) - callback: "Optional[AsyncModerationCallbackConfig]" = dc_field( + callback: "AsyncModerationCallbackConfig | None" = dc_field( default=None, metadata=dc_config(field_name="callback") ) - failover_config: "Optional[WebhookFailoverConfig]" = dc_field( + failover_config: "WebhookFailoverConfig | None" = dc_field( default=None, metadata=dc_config(field_name="failover_config") ) @@ -11763,13 +11680,13 @@ class EventNotificationSettings(DataClassJsonMixin): @dataclass class EventNotificationSettingsRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - apns: "Optional[APNSPayload]" = dc_field( + apns: "APNSPayload | None" = dc_field( default=None, metadata=dc_config(field_name="apns") ) - fcm: "Optional[FCMPayload]" = dc_field( + fcm: "FCMPayload | None" = dc_field( default=None, metadata=dc_config(field_name="fcm") ) @@ -11784,17 +11701,17 @@ class EventNotificationSettingsResponse(DataClassJsonMixin): @dataclass class EventRequest(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -11810,34 +11727,32 @@ class EventResponse(DataClassJsonMixin): @dataclass class ExportChannelsRequest(DataClassJsonMixin): # Export options for channels - channels: "List[ChannelExport]" = dc_field( + channels: "list[ChannelExport]" = dc_field( metadata=dc_config(field_name="channels") ) # Set if deleted message text should be cleared - clear_deleted_message_text: Optional[bool] = dc_field( + clear_deleted_message_text: bool | None = dc_field( default=None, metadata=dc_config(field_name="clear_deleted_message_text") ) - export_users: Optional[bool] = dc_field( + export_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="export_users") ) # Output format: 'json' (default) or 'csv'. csv requires version=v2 and is incompatible with export_users - format: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="format") - ) + format: str | None = dc_field(default=None, metadata=dc_config(field_name="format")) # Set if you want to include deleted channels - include_soft_deleted_channels: Optional[bool] = dc_field( + include_soft_deleted_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_soft_deleted_channels") ) # Set if you want to include truncated messages - include_truncated_messages: Optional[bool] = dc_field( + include_truncated_messages: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_truncated_messages") ) # Export version - version: Optional[str] = dc_field( + version: str | None = dc_field( default=None, metadata=dc_config(field_name="version") ) # For csv format: subset of message columns to include (defaults to a standard set) - include_fields: Optional[List[str]] = dc_field( + include_fields: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="include_fields") ) @@ -11867,22 +11782,22 @@ class ExportUserResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of exported messages - messages: "Optional[List[MessageResponse]]" = dc_field( + messages: "list[MessageResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="messages") ) # List of exported reactions - reactions: "Optional[List[ReactionResponse]]" = dc_field( + reactions: "list[ReactionResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="reactions") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class ExportUsersRequest(DataClassJsonMixin): - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + user_ids: list[str] = dc_field(metadata=dc_config(field_name="user_ids")) @dataclass @@ -11902,14 +11817,14 @@ class ExternalStorageResponse(DataClassJsonMixin): @dataclass class FCM(DataClassJsonMixin): - data: Optional[Dict[str, object]] = dc_field( + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) @dataclass class FCMPayload(DataClassJsonMixin): - data: Optional[Dict[str, object]] = dc_field( + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) @@ -11917,7 +11832,7 @@ class FCMPayload(DataClassJsonMixin): @dataclass class FailedChannelUpdates(DataClassJsonMixin): reason: str = dc_field(metadata=dc_config(field_name="reason")) - cids: List[str] = dc_field(metadata=dc_config(field_name="cids")) + cids: list[str] = dc_field(metadata=dc_config(field_name="cids")) @dataclass @@ -11932,20 +11847,20 @@ class FeedCreatedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - members: "List[FeedMemberResponse]" = dc_field( + members: "list[FeedMemberResponse]" = dc_field( metadata=dc_config(field_name="members") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="feed")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "feeds.feed.created" in this case type: str = dc_field( default="feeds.feed.created", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -11968,15 +11883,15 @@ class FeedDeletedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.feed.deleted" in this case type: str = dc_field( default="feeds.feed.deleted", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -11985,7 +11900,7 @@ class FeedDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -12016,14 +11931,14 @@ class FeedGroup(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - activity_processors: "List[ActivityProcessorConfig]" = dc_field( + activity_processors: "list[ActivityProcessorConfig]" = dc_field( metadata=dc_config(field_name="activity_processors") ) - activity_selectors: "List[ActivitySelectorConfig]" = dc_field( + activity_selectors: "list[ActivitySelectorConfig]" = dc_field( metadata=dc_config(field_name="activity_selectors") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - deleted_at: Optional[datetime] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -12032,7 +11947,7 @@ class FeedGroup(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - last_feed_get_at: Optional[datetime] = dc_field( + last_feed_get_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_feed_get_at", @@ -12041,22 +11956,22 @@ class FeedGroup(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - activity_filter: "Optional[ActivityFilterConfig]" = dc_field( + activity_filter: "ActivityFilterConfig | None" = dc_field( default=None, metadata=dc_config(field_name="activity_filter") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) - notification: "Optional[NotificationConfig]" = dc_field( + notification: "NotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="notification") ) - push_notification: "Optional[PushNotificationConfig]" = dc_field( + push_notification: "PushNotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="push_notification") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) - stories: "Optional[StoriesConfig]" = dc_field( + stories: "StoriesConfig | None" = dc_field( default=None, metadata=dc_config(field_name="stories") ) @@ -12073,15 +11988,15 @@ class FeedGroupChangedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.feed_group.changed" in this case type: str = dc_field( default="feeds.feed_group.changed", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -12090,10 +12005,10 @@ class FeedGroupChangedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - feed_group: "Optional[FeedGroup]" = dc_field( + feed_group: "FeedGroup | None" = dc_field( default=None, metadata=dc_config(field_name="feed_group") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -12112,15 +12027,15 @@ class FeedGroupDeletedEvent(DataClassJsonMixin): fid: str = dc_field(metadata=dc_config(field_name="fid")) # The ID of the feed group that was deleted group_id: str = dc_field(metadata=dc_config(field_name="group_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.feed_group.deleted" in this case type: str = dc_field( default="feeds.feed_group.deleted", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -12154,10 +12069,10 @@ class FeedGroupResponse(DataClassJsonMixin): ) ) # Default visibility for activities. One of: public, visible, followers, members, private - default_visibility: Optional[str] = dc_field( + default_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="default_visibility") ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -12167,33 +12082,33 @@ class FeedGroupResponse(DataClassJsonMixin): ), ) # Configuration for activity processors - activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + activity_processors: "list[ActivityProcessorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_processors") ) # Configuration for activity selectors - activity_selectors: "Optional[List[ActivitySelectorConfigResponse]]" = dc_field( + activity_selectors: "list[ActivitySelectorConfigResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_selectors") ) - activity_filter: "Optional[ActivityFilterConfig]" = dc_field( + activity_filter: "ActivityFilterConfig | None" = dc_field( default=None, metadata=dc_config(field_name="activity_filter") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) # Custom data for the feed group - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - notification: "Optional[NotificationConfig]" = dc_field( + notification: "NotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="notification") ) - push_notification: "Optional[PushNotificationConfig]" = dc_field( + push_notification: "PushNotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="push_notification") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) - stories: "Optional[StoriesConfig]" = dc_field( + stories: "StoriesConfig | None" = dc_field( default=None, metadata=dc_config(field_name="stories") ) @@ -12212,15 +12127,15 @@ class FeedGroupRestoredEvent(DataClassJsonMixin): fid: str = dc_field(metadata=dc_config(field_name="fid")) # The ID of the feed group that was restored group_id: str = dc_field(metadata=dc_config(field_name="group_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.feed_group.restored" in this case type: str = dc_field( default="feeds.feed_group.restored", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -12233,23 +12148,23 @@ class FeedGroupRestoredEvent(DataClassJsonMixin): @dataclass class FeedInput(DataClassJsonMixin): - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - visibility: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility") ) - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) - members: "Optional[List[FeedMemberRequest]]" = dc_field( + members: "list[FeedMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @@ -12266,16 +12181,16 @@ class FeedMemberAddedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) member: "FeedMemberResponse" = dc_field(metadata=dc_config(field_name="member")) # The type of event: "feeds.feed_member.added" in this case type: str = dc_field( default="feeds.feed_member.added", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -12284,7 +12199,7 @@ class FeedMemberAddedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -12302,15 +12217,15 @@ class FeedMemberRemovedEvent(DataClassJsonMixin): ) fid: str = dc_field(metadata=dc_config(field_name="fid")) member_id: str = dc_field(metadata=dc_config(field_name="member_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.feed_member.removed" in this case type: str = dc_field( default="feeds.feed_member.removed", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -12319,7 +12234,7 @@ class FeedMemberRemovedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -12329,17 +12244,17 @@ class FeedMemberRequest(DataClassJsonMixin): # ID of the user to add as a member user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Whether this is an invite to become a member - invite: Optional[bool] = dc_field( + invite: bool | None = dc_field( default=None, metadata=dc_config(field_name="invite") ) # ID of the membership level to assign to the member - membership_level: Optional[str] = dc_field( + membership_level: str | None = dc_field( default=None, metadata=dc_config(field_name="membership_level") ) # Role of the member in the feed - role: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="role")) + role: str | None = dc_field(default=None, metadata=dc_config(field_name="role")) # Custom data for the member - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -12371,7 +12286,7 @@ class FeedMemberResponse(DataClassJsonMixin): # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # When the invite was accepted - invite_accepted_at: Optional[datetime] = dc_field( + invite_accepted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="invite_accepted_at", @@ -12381,7 +12296,7 @@ class FeedMemberResponse(DataClassJsonMixin): ), ) # When the invite was rejected - invite_rejected_at: Optional[datetime] = dc_field( + invite_rejected_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="invite_rejected_at", @@ -12391,10 +12306,10 @@ class FeedMemberResponse(DataClassJsonMixin): ), ) # Custom data for the membership - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - membership_level: "Optional[MembershipLevelResponse]" = dc_field( + membership_level: "MembershipLevelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="membership_level") ) @@ -12411,16 +12326,16 @@ class FeedMemberUpdatedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) member: "FeedMemberResponse" = dc_field(metadata=dc_config(field_name="member")) # The type of event: "feeds.feed_member.updated" in this case type: str = dc_field( default="feeds.feed_member.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -12429,7 +12344,7 @@ class FeedMemberUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -12480,18 +12395,18 @@ class FeedOwnCapability: @dataclass class FeedOwnData(DataClassJsonMixin): # Capabilities the current user has for this feed - own_capabilities: "Optional[List[FeedOwnCapability]]" = dc_field( + own_capabilities: "list[FeedOwnCapability] | None" = dc_field( default=None, metadata=dc_config(field_name="own_capabilities") ) # Follow relationships where the feed owner's feeds are following the current user's feeds (up to 5 total) - own_followings: "Optional[List[FollowResponse]]" = dc_field( + own_followings: "list[FollowResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="own_followings") ) # Follow relationships where the current user's feeds are following this feed - own_follows: "Optional[List[FollowResponse]]" = dc_field( + own_follows: "list[FollowResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="own_follows") ) - own_membership: "Optional[FeedMemberResponse]" = dc_field( + own_membership: "FeedMemberResponse | None" = dc_field( default=None, metadata=dc_config(field_name="own_membership") ) @@ -12503,32 +12418,32 @@ class FeedRequest(DataClassJsonMixin): # ID of the feed feed_id: str = dc_field(metadata=dc_config(field_name="feed_id")) # ID of the feed creator - created_by_id: Optional[str] = dc_field( + created_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_id") ) # Description of the feed - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Name of the feed - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # Visibility setting for the feed. One of: public, visible, followers, members, private - visibility: Optional[str] = dc_field( + visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility") ) # Tags used for filtering feeds - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) # Initial members for the feed - members: "Optional[List[FeedMemberRequest]]" = dc_field( + members: "list[FeedMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) # Custom data for the feed - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @@ -12575,7 +12490,7 @@ class FeedResponse(DataClassJsonMixin): # User response object created_by: "UserResponse" = dc_field(metadata=dc_config(field_name="created_by")) # When the feed was deleted - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -12585,33 +12500,33 @@ class FeedResponse(DataClassJsonMixin): ), ) # Visibility setting for the feed - visibility: Optional[str] = dc_field( + visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility") ) # Tags used for filtering feeds - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) # Capabilities the current user has for this feed - own_capabilities: "Optional[List[FeedOwnCapability]]" = dc_field( + own_capabilities: "list[FeedOwnCapability] | None" = dc_field( default=None, metadata=dc_config(field_name="own_capabilities") ) # Follow relationships where the feed owner’s feeds are following the current user's feeds - own_followings: "Optional[List[FollowResponse]]" = dc_field( + own_followings: "list[FollowResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="own_followings") ) # Follow relationships where the current user's feeds are following this feed - own_follows: "Optional[List[FollowResponse]]" = dc_field( + own_follows: "list[FollowResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="own_follows") ) # Custom data for the feed - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) - own_membership: "Optional[FeedMemberResponse]" = dc_field( + own_membership: "FeedMemberResponse | None" = dc_field( default=None, metadata=dc_config(field_name="own_membership") ) @@ -12658,7 +12573,7 @@ class FeedSuggestionResponse(DataClassJsonMixin): # User response object created_by: "UserResponse" = dc_field(metadata=dc_config(field_name="created_by")) # When the feed was deleted - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -12667,43 +12582,41 @@ class FeedSuggestionResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - recommendation_score: Optional[float] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + recommendation_score: float | None = dc_field( default=None, metadata=dc_config(field_name="recommendation_score") ) # Visibility setting for the feed - visibility: Optional[str] = dc_field( + visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility") ) # Tags used for filtering feeds - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) # Capabilities the current user has for this feed - own_capabilities: "Optional[List[FeedOwnCapability]]" = dc_field( + own_capabilities: "list[FeedOwnCapability] | None" = dc_field( default=None, metadata=dc_config(field_name="own_capabilities") ) # Follow relationships where the feed owner’s feeds are following the current user's feeds - own_followings: "Optional[List[FollowResponse]]" = dc_field( + own_followings: "list[FollowResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="own_followings") ) # Follow relationships where the current user's feeds are following this feed - own_follows: "Optional[List[FollowResponse]]" = dc_field( + own_follows: "list[FollowResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="own_follows") ) - algorithm_scores: "Optional[Dict[str, float]]" = dc_field( + algorithm_scores: "dict[str, float] | None" = dc_field( default=None, metadata=dc_config(field_name="algorithm_scores") ) # Custom data for the feed - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) - own_membership: "Optional[FeedMemberResponse]" = dc_field( + own_membership: "FeedMemberResponse | None" = dc_field( default=None, metadata=dc_config(field_name="own_membership") ) @@ -12719,16 +12632,16 @@ class FeedUpdatedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="feed")) # The type of event: "feeds.feed.updated" in this case type: str = dc_field( default="feeds.feed.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -12737,7 +12650,7 @@ class FeedUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -12747,7 +12660,7 @@ class FeedViewResponse(DataClassJsonMixin): # Unique identifier for the custom feed view id: str = dc_field(metadata=dc_config(field_name="id")) # When the feed view was last used - last_used_at: Optional[datetime] = dc_field( + last_used_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_used_at", @@ -12757,13 +12670,13 @@ class FeedViewResponse(DataClassJsonMixin): ), ) # Configured activity selectors - activity_selectors: "Optional[List[ActivitySelectorConfigResponse]]" = dc_field( + activity_selectors: "list[ActivitySelectorConfigResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_selectors") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) @@ -12773,11 +12686,11 @@ class FeedVisibilityResponse(DataClassJsonMixin): # Name of the feed visibility level name: str = dc_field(metadata=dc_config(field_name="name")) # List of permission policies - permissions: "List[Permission]" = dc_field( + permissions: "list[Permission]" = dc_field( metadata=dc_config(field_name="permissions") ) # Permission grants for each role - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) @dataclass @@ -12808,10 +12721,10 @@ class FeedsBookmarkResponse(DataClassJsonMixin): ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - activity_id: Optional[str] = dc_field( + activity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="activity_id") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -12838,7 +12751,7 @@ class FeedsEnrichedCollectionResponse(DataClassJsonMixin): ) ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) @dataclass @@ -12871,7 +12784,7 @@ class FeedsFeedResponse(DataClassJsonMixin): ) # User response object created_by: "UserResponse" = dc_field(metadata=dc_config(field_name="created_by")) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -12880,16 +12793,16 @@ class FeedsFeedResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - visibility: Optional[str] = dc_field( + visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility") ) - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[FeedsActivityLocation]" = dc_field( + location: "FeedsActivityLocation | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @@ -12897,9 +12810,9 @@ class FeedsFeedResponse(DataClassJsonMixin): @dataclass class FeedsModerationTemplateConfigPayload(DataClassJsonMixin): # Map of data type names to their content types - data_types: "Dict[str, str]" = dc_field(metadata=dc_config(field_name="data_types")) + data_types: "dict[str, str]" = dc_field(metadata=dc_config(field_name="data_types")) # Key of the moderation configuration to use - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) @@ -12909,17 +12822,17 @@ class FeedsNotificationComment(DataClassJsonMixin): comment: str = dc_field(metadata=dc_config(field_name="comment")) id: str = dc_field(metadata=dc_config(field_name="id")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) @dataclass class FeedsNotificationContext(DataClassJsonMixin): - target: "Optional[FeedsNotificationTarget]" = dc_field( + target: "FeedsNotificationTarget | None" = dc_field( default=None, metadata=dc_config(field_name="target") ) - trigger: "Optional[FeedsNotificationTrigger]" = dc_field( + trigger: "FeedsNotificationTrigger | None" = dc_field( default=None, metadata=dc_config(field_name="trigger") ) @@ -12927,12 +12840,12 @@ class FeedsNotificationContext(DataClassJsonMixin): @dataclass class FeedsNotificationParentActivity(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - user_id: Optional[str] = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) @@ -12940,22 +12853,22 @@ class FeedsNotificationParentActivity(DataClassJsonMixin): @dataclass class FeedsNotificationTarget(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - user_id: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) - comment: "Optional[FeedsNotificationComment]" = dc_field( + comment: "FeedsNotificationComment | None" = dc_field( default=None, metadata=dc_config(field_name="comment") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - parent_activity: "Optional[FeedsNotificationParentActivity]" = dc_field( + parent_activity: "FeedsNotificationParentActivity | None" = dc_field( default=None, metadata=dc_config(field_name="parent_activity") ) @@ -12964,10 +12877,10 @@ class FeedsNotificationTarget(DataClassJsonMixin): class FeedsNotificationTrigger(DataClassJsonMixin): text: str = dc_field(metadata=dc_config(field_name="text")) type: str = dc_field(metadata=dc_config(field_name="type")) - comment: "Optional[FeedsNotificationComment]" = dc_field( + comment: "FeedsNotificationComment | None" = dc_field( default=None, metadata=dc_config(field_name="comment") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -12975,63 +12888,59 @@ class FeedsNotificationTrigger(DataClassJsonMixin): @dataclass class FeedsPreferences(DataClassJsonMixin): # Push notification preference for comments on user's activities. One of: all, none - comment: Optional[str] = dc_field( + comment: str | None = dc_field( default=None, metadata=dc_config(field_name="comment") ) # Push notification preference for mentions in comments. One of: all, none - comment_mention: Optional[str] = dc_field( + comment_mention: str | None = dc_field( default=None, metadata=dc_config(field_name="comment_mention") ) # Push notification preference for reactions on comments. One of: all, none - comment_reaction: Optional[str] = dc_field( + comment_reaction: str | None = dc_field( default=None, metadata=dc_config(field_name="comment_reaction") ) # Push notification preference for replies to comments. One of: all, none - comment_reply: Optional[str] = dc_field( + comment_reply: str | None = dc_field( default=None, metadata=dc_config(field_name="comment_reply") ) # Push notification preference for new followers. One of: all, none - follow: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="follow") - ) + follow: str | None = dc_field(default=None, metadata=dc_config(field_name="follow")) # Push notification preference for mentions in activities. One of: all, none - mention: Optional[str] = dc_field( + mention: str | None = dc_field( default=None, metadata=dc_config(field_name="mention") ) # Push notification preference for reactions on user's activities or comments. One of: all, none - reaction: Optional[str] = dc_field( + reaction: str | None = dc_field( default=None, metadata=dc_config(field_name="reaction") ) # Push notification preferences for custom activity types. Map of activity type to preference (all or none) - custom_activity_types: "Optional[Dict[str, str]]" = dc_field( + custom_activity_types: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="custom_activity_types") ) @dataclass class FeedsPreferencesResponse(DataClassJsonMixin): - comment: Optional[str] = dc_field( + comment: str | None = dc_field( default=None, metadata=dc_config(field_name="comment") ) - comment_mention: Optional[str] = dc_field( + comment_mention: str | None = dc_field( default=None, metadata=dc_config(field_name="comment_mention") ) - comment_reaction: Optional[str] = dc_field( + comment_reaction: str | None = dc_field( default=None, metadata=dc_config(field_name="comment_reaction") ) - comment_reply: Optional[str] = dc_field( + comment_reply: str | None = dc_field( default=None, metadata=dc_config(field_name="comment_reply") ) - follow: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="follow") - ) - mention: Optional[str] = dc_field( + follow: str | None = dc_field(default=None, metadata=dc_config(field_name="follow")) + mention: str | None = dc_field( default=None, metadata=dc_config(field_name="mention") ) - reaction: Optional[str] = dc_field( + reaction: str | None = dc_field( default=None, metadata=dc_config(field_name="reaction") ) - custom_activity_types: "Optional[Dict[str, str]]" = dc_field( + custom_activity_types: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="custom_activity_types") ) @@ -13079,10 +12988,10 @@ class FeedsReactionResponse(DataClassJsonMixin): ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - comment_id: Optional[str] = dc_field( + comment_id: str | None = dc_field( default=None, metadata=dc_config(field_name="comment_id") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -13132,40 +13041,40 @@ class FeedsV3ActivityResponse(DataClassJsonMixin): ) ) visibility: str = dc_field(metadata=dc_config(field_name="visibility")) - attachments: "List[Attachment]" = dc_field( + attachments: "list[Attachment]" = dc_field( metadata=dc_config(field_name="attachments") ) - comments: "List[FeedsV3CommentResponse]" = dc_field( + comments: "list[FeedsV3CommentResponse]" = dc_field( metadata=dc_config(field_name="comments") ) - feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) - filter_tags: List[str] = dc_field(metadata=dc_config(field_name="filter_tags")) - interest_tags: List[str] = dc_field(metadata=dc_config(field_name="interest_tags")) - latest_reactions: "List[FeedsReactionResponse]" = dc_field( + feeds: list[str] = dc_field(metadata=dc_config(field_name="feeds")) + filter_tags: list[str] = dc_field(metadata=dc_config(field_name="filter_tags")) + interest_tags: list[str] = dc_field(metadata=dc_config(field_name="interest_tags")) + latest_reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="latest_reactions") ) - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) - own_bookmarks: "List[FeedsBookmarkResponse]" = dc_field( + own_bookmarks: "list[FeedsBookmarkResponse]" = dc_field( metadata=dc_config(field_name="own_bookmarks") ) - own_reactions: "List[FeedsReactionResponse]" = dc_field( + own_reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) - collections: "Dict[str, FeedsEnrichedCollectionResponse]" = dc_field( + collections: "dict[str, FeedsEnrichedCollectionResponse]" = dc_field( metadata=dc_config(field_name="collections") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - reaction_groups: "Dict[str, FeedsReactionGroupResponse]" = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction_groups: "dict[str, FeedsReactionGroupResponse]" = dc_field( metadata=dc_config(field_name="reaction_groups") ) - search_data: Dict[str, object] = dc_field( + search_data: dict[str, object] = dc_field( metadata=dc_config(field_name="search_data") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -13174,7 +13083,7 @@ class FeedsV3ActivityResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - edited_at: Optional[datetime] = dc_field( + edited_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="edited_at", @@ -13183,7 +13092,7 @@ class FeedsV3ActivityResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - expires_at: Optional[datetime] = dc_field( + expires_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expires_at", @@ -13192,59 +13101,59 @@ class FeedsV3ActivityResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - friend_reaction_count: Optional[int] = dc_field( + friend_reaction_count: int | None = dc_field( default=None, metadata=dc_config(field_name="friend_reaction_count") ) - is_read: Optional[bool] = dc_field( + is_read: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_read") ) - is_seen: Optional[bool] = dc_field( + is_seen: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_seen") ) - is_watched: Optional[bool] = dc_field( + is_watched: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_watched") ) - moderation_action: Optional[str] = dc_field( + moderation_action: str | None = dc_field( default=None, metadata=dc_config(field_name="moderation_action") ) - selector_source: Optional[str] = dc_field( + selector_source: str | None = dc_field( default=None, metadata=dc_config(field_name="selector_source") ) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - visibility_tag: Optional[str] = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + visibility_tag: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility_tag") ) - friend_reactions: "Optional[List[FeedsReactionResponse]]" = dc_field( + friend_reactions: "list[FeedsReactionResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="friend_reactions") ) - latest_shares: "Optional[List[FeedsShareResponse]]" = dc_field( + latest_shares: "list[FeedsShareResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_shares") ) - current_feed: "Optional[FeedsFeedResponse]" = dc_field( + current_feed: "FeedsFeedResponse | None" = dc_field( default=None, metadata=dc_config(field_name="current_feed") ) - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) - location: "Optional[FeedsActivityLocation]" = dc_field( + location: "FeedsActivityLocation | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) - metrics: "Optional[Dict[str, int]]" = dc_field( + metrics: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="metrics") ) - moderation: "Optional[ModerationV2Response]" = dc_field( + moderation: "ModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) - notification_context: "Optional[FeedsNotificationContext]" = dc_field( + notification_context: "FeedsNotificationContext | None" = dc_field( default=None, metadata=dc_config(field_name="notification_context") ) - parent: "Optional[FeedsV3ActivityResponse]" = dc_field( + parent: "FeedsV3ActivityResponse | None" = dc_field( default=None, metadata=dc_config(field_name="parent") ) - poll: "Optional[PollResponseData]" = dc_field( + poll: "PollResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll") ) - score_vars: Optional[Dict[str, object]] = dc_field( + score_vars: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="score_vars") ) @@ -13280,18 +13189,18 @@ class FeedsV3CommentResponse(DataClassJsonMixin): ) ) upvote_count: int = dc_field(metadata=dc_config(field_name="upvote_count")) - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) - own_reactions: "List[FeedsReactionResponse]" = dc_field( + own_reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - controversy_score: Optional[float] = dc_field( + controversy_score: float | None = dc_field( default=None, metadata=dc_config(field_name="controversy_score") ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -13300,7 +13209,7 @@ class FeedsV3CommentResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - edited_at: Optional[datetime] = dc_field( + edited_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="edited_at", @@ -13309,26 +13218,26 @@ class FeedsV3CommentResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - attachments: "Optional[List[Attachment]]" = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) - latest_reactions: "Optional[List[FeedsReactionResponse]]" = dc_field( + latest_reactions: "list[FeedsReactionResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_reactions") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) - moderation: "Optional[ModerationV2Response]" = dc_field( + moderation: "ModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) - reaction_groups: "Optional[Dict[str, FeedsReactionGroupResponse]]" = dc_field( + reaction_groups: "dict[str, FeedsReactionGroupResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="reaction_groups") ) @@ -13343,16 +13252,16 @@ class Field(DataClassJsonMixin): @dataclass class FileUploadConfig(DataClassJsonMixin): size_limit: int = dc_field(metadata=dc_config(field_name="size_limit")) - allowed_file_extensions: Optional[List[str]] = dc_field( + allowed_file_extensions: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_file_extensions") ) - allowed_mime_types: Optional[List[str]] = dc_field( + allowed_mime_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_mime_types") ) - blocked_file_extensions: Optional[List[str]] = dc_field( + blocked_file_extensions: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="blocked_file_extensions") ) - blocked_mime_types: Optional[List[str]] = dc_field( + blocked_mime_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="blocked_mime_types") ) @@ -13360,8 +13269,8 @@ class FileUploadConfig(DataClassJsonMixin): @dataclass class FileUploadRequest(DataClassJsonMixin): # file field - file: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="file")) - user: "Optional[OnlyUserID]" = dc_field( + file: str | None = dc_field(default=None, metadata=dc_config(field_name="file")) + user: "OnlyUserID | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -13371,9 +13280,9 @@ class FileUploadResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # URL to the uploaded asset. Should be used to put to `asset_url` attachment field - file: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="file")) + file: str | None = dc_field(default=None, metadata=dc_config(field_name="file")) # URL of the file thumbnail for supported file formats. Should be put to `thumb_url` attachment field - thumb_url: Optional[str] = dc_field( + thumb_url: str | None = dc_field( default=None, metadata=dc_config(field_name="thumb_url") ) @@ -13381,47 +13290,47 @@ class FileUploadResponse(DataClassJsonMixin): @dataclass class FilterConfigResponse(DataClassJsonMixin): # LLM moderation labels available as filter values - llm_labels: List[str] = dc_field(metadata=dc_config(field_name="llm_labels")) + llm_labels: list[str] = dc_field(metadata=dc_config(field_name="llm_labels")) # AI image moderation labels available as filter values. Reflects the app's effective image taxonomy: custom Bodyguard taxonomy when enabled, otherwise the standard L1 label set. - ai_image_labels: Optional[List[str]] = dc_field( + ai_image_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="ai_image_labels") ) # AI text moderation labels available as filter values - ai_text_labels: Optional[List[str]] = dc_field( + ai_text_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="ai_text_labels") ) # Moderation config keys present in the queue, available as filter values - config_keys: Optional[List[str]] = dc_field( + config_keys: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="config_keys") ) # The moderation_payload.custom keys the app has configured as review-queue filter chips (via moderation_dashboard_preferences.filterable_custom_keys). Discovery hint for the dashboard only — the filter accepts any custom key regardless of this list. - filterable_custom_keys: Optional[List[str]] = dc_field( + filterable_custom_keys: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filterable_custom_keys") ) # AI image moderation labels available as filter values, as a map of L1 label to its L2 sub-labels. Reflects the app's effective image taxonomy: custom Bodyguard taxonomy when enabled, otherwise the standard catalogue of the org's enabled image providers. - ai_image_taxonomy: "Optional[Dict[str, List[str]]]" = dc_field( + ai_image_taxonomy: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="ai_image_taxonomy") ) @dataclass class FirebaseConfig(DataClassJsonMixin): - apn_template: Optional[str] = dc_field( + apn_template: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_template") ) - credentials_json: Optional[str] = dc_field( + credentials_json: str | None = dc_field( default=None, metadata=dc_config(field_name="credentials_json") ) - data_template: Optional[str] = dc_field( + data_template: str | None = dc_field( default=None, metadata=dc_config(field_name="data_template") ) - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="Disabled") ) - notification_template: Optional[str] = dc_field( + notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="notification_template") ) - server_key: Optional[str] = dc_field( + server_key: str | None = dc_field( default=None, metadata=dc_config(field_name="server_key") ) @@ -13429,26 +13338,26 @@ class FirebaseConfig(DataClassJsonMixin): @dataclass class FirebaseConfigFields(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - apn_template: Optional[str] = dc_field( + apn_template: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_template") ) - credentials_json: Optional[str] = dc_field( + credentials_json: str | None = dc_field( default=None, metadata=dc_config(field_name="credentials_json") ) - data_template: Optional[str] = dc_field( + data_template: str | None = dc_field( default=None, metadata=dc_config(field_name="data_template") ) - notification_template: Optional[str] = dc_field( + notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="notification_template") ) - server_key: Optional[str] = dc_field( + server_key: str | None = dc_field( default=None, metadata=dc_config(field_name="server_key") ) @dataclass class FlagCountRuleParameters(DataClassJsonMixin): - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) @@ -13456,7 +13365,7 @@ class FlagCountRuleParameters(DataClassJsonMixin): @dataclass class FlagDetails(DataClassJsonMixin): original_text: str = dc_field(metadata=dc_config(field_name="original_text")) - automod: "Optional[AutomodDetailsResponse]" = dc_field( + automod: "AutomodDetailsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="automod") ) @@ -13464,10 +13373,10 @@ class FlagDetails(DataClassJsonMixin): @dataclass class FlagDetailsResponse(DataClassJsonMixin): original_text: str = dc_field(metadata=dc_config(field_name="original_text")) - automod: "Optional[AutomodDetailsResponse]" = dc_field( + automod: "AutomodDetailsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="automod") ) - extra: Optional[Dict[str, object]] = dc_field( + extra: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="extra") ) @@ -13483,7 +13392,7 @@ class FlagFeedbackResponse(DataClassJsonMixin): ) ) message_id: str = dc_field(metadata=dc_config(field_name="message_id")) - labels: "List[LabelResponse]" = dc_field(metadata=dc_config(field_name="labels")) + labels: "list[LabelResponse]" = dc_field(metadata=dc_config(field_name="labels")) @dataclass @@ -13495,16 +13404,16 @@ class FlagItemResponse(DataClassJsonMixin): @dataclass class FlagMessageDetailsResponse(DataClassJsonMixin): - pin_changed: Optional[bool] = dc_field( + pin_changed: bool | None = dc_field( default=None, metadata=dc_config(field_name="pin_changed") ) - should_enrich: Optional[bool] = dc_field( + should_enrich: bool | None = dc_field( default=None, metadata=dc_config(field_name="should_enrich") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - updated_by_id: Optional[str] = dc_field( + updated_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="updated_by_id") ) @@ -13516,25 +13425,23 @@ class FlagRequest(DataClassJsonMixin): # Type of entity being flagged (e.g., message, user) entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) # ID of the user who created the flagged entity - entity_creator_id: Optional[str] = dc_field( + entity_creator_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) # Optional explanation for why the content is being flagged - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - user_id: Optional[str] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Additional metadata about the flag - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - moderation_payload: "Optional[ModerationPayload]" = dc_field( + moderation_payload: "ModerationPayload | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_payload") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -13560,7 +13467,7 @@ class FlagResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - approved_at: Optional[datetime] = dc_field( + approved_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="approved_at", @@ -13569,10 +13476,8 @@ class FlagResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - rejected_at: Optional[datetime] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + rejected_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="rejected_at", @@ -13581,7 +13486,7 @@ class FlagResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reviewed_at: Optional[datetime] = dc_field( + reviewed_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="reviewed_at", @@ -13590,28 +13495,28 @@ class FlagResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reviewed_by: Optional[str] = dc_field( + reviewed_by: str | None = dc_field( default=None, metadata=dc_config(field_name="reviewed_by") ) - target_message_id: Optional[str] = dc_field( + target_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="target_message_id") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - details: "Optional[FlagDetails]" = dc_field( + details: "FlagDetails | None" = dc_field( default=None, metadata=dc_config(field_name="details") ) # Represents any chat message - target_message: "Optional[MessageResponse]" = dc_field( + target_message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="target_message") ) # User response object - target_user: "Optional[UserResponse]" = dc_field( + target_user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="target_user") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -13626,9 +13531,9 @@ class FlagUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field(default="flag.updated", metadata=dc_config(field_name="type")) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -13638,99 +13543,93 @@ class FlagUpdatedEvent(DataClassJsonMixin): ), ) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="CreatedBy") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="Message") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="User") ) @dataclass class FlagUserOptions(DataClassJsonMixin): - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass class FloodConfig(DataClassJsonMixin): - allowlist: Optional[List[str]] = dc_field( + allowlist: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowlist") ) - identical: "Optional[FloodIdenticalConfig]" = dc_field( + identical: "FloodIdenticalConfig | None" = dc_field( default=None, metadata=dc_config(field_name="identical") ) - similar: "Optional[FloodSimilarConfig]" = dc_field( + similar: "FloodSimilarConfig | None" = dc_field( default=None, metadata=dc_config(field_name="similar") ) @dataclass class FloodIdenticalConfig(DataClassJsonMixin): - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") - ) - enabled: Optional[bool] = dc_field( + action: str | None = dc_field(default=None, metadata=dc_config(field_name="action")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) @dataclass class FloodIdenticalRuleParameters(DataClassJsonMixin): - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - allowlist: Optional[List[str]] = dc_field( + allowlist: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowlist") ) @dataclass class FloodSimilarConfig(DataClassJsonMixin): - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") - ) - enabled: Optional[bool] = dc_field( + action: str | None = dc_field(default=None, metadata=dc_config(field_name="action")) + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - similarity_distance: Optional[int] = dc_field( + similarity_distance: int | None = dc_field( default=None, metadata=dc_config(field_name="similarity_distance") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) @dataclass class FloodSimilarRuleParameters(DataClassJsonMixin): - similarity_distance: Optional[int] = dc_field( + similarity_distance: int | None = dc_field( default=None, metadata=dc_config(field_name="similarity_distance") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - allowlist: Optional[List[str]] = dc_field( + allowlist: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowlist") ) @@ -13738,13 +13637,13 @@ class FloodSimilarRuleParameters(DataClassJsonMixin): @dataclass class FollowBatchRequest(DataClassJsonMixin): # List of follow relationships to create - follows: "List[FollowRequest]" = dc_field(metadata=dc_config(field_name="follows")) + follows: "list[FollowRequest]" = dc_field(metadata=dc_config(field_name="follows")) # If true, auto-creates users referenced by source/target FIDs in the batch when they don't already exist. Server-side only. Defaults to false. This top-level field is the only supported batch/upsert create_users control. - create_users: Optional[bool] = dc_field( + create_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_users") ) # If true, enriches the follow's source_feed and target_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) @@ -13753,9 +13652,9 @@ class FollowBatchRequest(DataClassJsonMixin): class FollowBatchResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of newly created follow relationships - created: "List[FollowResponse]" = dc_field(metadata=dc_config(field_name="created")) + created: "list[FollowResponse]" = dc_field(metadata=dc_config(field_name="created")) # List of current follow relationships - follows: "List[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) + follows: "list[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) @dataclass @@ -13770,16 +13669,16 @@ class FollowCreatedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) # The type of event: "feeds.follow.created" in this case type: str = dc_field( default="feeds.follow.created", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -13802,16 +13701,16 @@ class FollowDeletedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) # The type of event: "feeds.follow.deleted" in this case type: str = dc_field( default="feeds.follow.deleted", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -13829,40 +13728,38 @@ class FollowRequest(DataClassJsonMixin): # Fully qualified ID of the target feed target: str = dc_field(metadata=dc_config(field_name="target")) # Maximum number of historical activities to copy from the target feed when the follow is first materialized. Not set = unlimited (default). 0 = copy nothing. Range: 0-1000. - activity_copy_limit: Optional[int] = dc_field( + activity_copy_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="activity_copy_limit") ) # Whether to copy custom data to the notification activity (only applies when create_notification_activity is true) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # Whether to create a notification activity for this follow - create_notification_activity: Optional[bool] = dc_field( + create_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_notification_activity") ) # If true, auto-creates users referenced by the source and target FIDs when they don't already exist. Server-side only. Defaults to false. Use directly on single follow endpoints (Follow, GetOrCreateFollow). On batch endpoints (FollowBatch, GetOrCreateFollows), use the top-level create_users field; per-item follows[i].create_users is rejected. - create_users: Optional[bool] = dc_field( + create_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_users") ) # If true, enriches the follow's source_feed and target_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) # Push preference for the follow relationship - push_preference: Optional[str] = dc_field( + push_preference: str | None = dc_field( default=None, metadata=dc_config(field_name="push_preference") ) # Whether to skip push for this follow - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) # Status of the follow relationship. One of: accepted, pending, rejected - status: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="status") - ) + status: str | None = dc_field(default=None, metadata=dc_config(field_name="status")) # Custom data for the follow relationship - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -13896,7 +13793,7 @@ class FollowResponse(DataClassJsonMixin): source_feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="source_feed")) target_feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="target_feed")) # When the follow request was accepted - request_accepted_at: Optional[datetime] = dc_field( + request_accepted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="request_accepted_at", @@ -13906,7 +13803,7 @@ class FollowResponse(DataClassJsonMixin): ), ) # When the follow request was rejected - request_rejected_at: Optional[datetime] = dc_field( + request_rejected_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="request_rejected_at", @@ -13916,7 +13813,7 @@ class FollowResponse(DataClassJsonMixin): ), ) # Custom data for the follow relationship - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -13933,16 +13830,16 @@ class FollowUpdatedEvent(DataClassJsonMixin): ) ) fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) # The type of event: "feeds.follow.updated" in this case type: str = dc_field( default="feeds.follow.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -13959,7 +13856,7 @@ class FrameRecordSettings(DataClassJsonMixin): metadata=dc_config(field_name="capture_interval_in_seconds") ) mode: str = dc_field(metadata=dc_config(field_name="mode")) - quality: Optional[str] = dc_field( + quality: str | None = dc_field( default=None, metadata=dc_config(field_name="quality") ) @@ -13975,7 +13872,7 @@ class FrameRecordingSettingsRequest(DataClassJsonMixin): metadata=dc_config(field_name="capture_interval_in_seconds") ) mode: str = dc_field(metadata=dc_config(field_name="mode")) - quality: Optional[str] = dc_field( + quality: str | None = dc_field( default=None, metadata=dc_config(field_name="quality") ) @@ -13986,7 +13883,7 @@ class FrameRecordingSettingsResponse(DataClassJsonMixin): metadata=dc_config(field_name="capture_interval_in_seconds") ) mode: str = dc_field(metadata=dc_config(field_name="mode")) - quality: Optional[str] = dc_field( + quality: str | None = dc_field( default=None, metadata=dc_config(field_name="quality") ) @@ -13994,15 +13891,13 @@ class FrameRecordingSettingsResponse(DataClassJsonMixin): @dataclass class FriendReactionsOptions(DataClassJsonMixin): # Default: false. When true, fetches friend reactions for activities. - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) # Default: 3, Max: 10. The maximum number of friend reactions to return per activity. - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) # Default: 'following'. The type of friend relationship to use. 'following' = users you follow, 'mutual' = users with mutual follows. One of: following, mutual - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) @dataclass @@ -14036,20 +13931,20 @@ class FullUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_ids: List[str] = dc_field( + blocked_user_ids: list[str] = dc_field( metadata=dc_config(field_name="blocked_user_ids") ) - channel_mutes: "List[ChannelMute]" = dc_field( + channel_mutes: "list[ChannelMute]" = dc_field( metadata=dc_config(field_name="channel_mutes") ) - devices: "List[DeviceResponse]" = dc_field(metadata=dc_config(field_name="devices")) - mutes: "List[UserMuteResponse]" = dc_field(metadata=dc_config(field_name="mutes")) - teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - avg_response_time: Optional[int] = dc_field( + devices: "list[DeviceResponse]" = dc_field(metadata=dc_config(field_name="devices")) + mutes: "list[UserMuteResponse]" = dc_field(metadata=dc_config(field_name="mutes")) + teams: list[str] = dc_field(metadata=dc_config(field_name="teams")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: int | None = dc_field( default=None, metadata=dc_config(field_name="avg_response_time") ) - ban_expires: Optional[datetime] = dc_field( + ban_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ban_expires", @@ -14058,10 +13953,10 @@ class FullUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - bypass_moderation: Optional[bool] = dc_field( + bypass_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="bypass_moderation") ) - deactivated_at: Optional[datetime] = dc_field( + deactivated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deactivated_at", @@ -14070,7 +13965,7 @@ class FullUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -14079,10 +13974,8 @@ class FullUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - image: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image") - ) - last_active: Optional[datetime] = dc_field( + image: str | None = dc_field(default=None, metadata=dc_config(field_name="image")) + last_active: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_active", @@ -14091,8 +13984,8 @@ class FullUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + revoke_tokens_issued_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="revoke_tokens_issued_before", @@ -14101,13 +13994,13 @@ class FullUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - latest_hidden_channels: Optional[List[str]] = dc_field( + latest_hidden_channels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="latest_hidden_channels") ) - privacy_settings: "Optional[PrivacySettingsResponse]" = dc_field( + privacy_settings: "PrivacySettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="privacy_settings") ) - teams_role: "Optional[Dict[str, str]]" = dc_field( + teams_role: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="teams_role") ) @@ -14122,7 +14015,7 @@ class FutureChannelBanResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - expires: Optional[datetime] = dc_field( + expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expires", @@ -14131,18 +14024,16 @@ class FutureChannelBanResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - shadow: Optional[bool] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + shadow: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow") ) # User response object - banned_by: "Optional[UserResponse]" = dc_field( + banned_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="banned_by") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -14150,37 +14041,37 @@ class FutureChannelBanResponse(DataClassJsonMixin): @dataclass class GeofenceResponse(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - country_codes: Optional[List[str]] = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + country_codes: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="country_codes") ) @dataclass class GeofenceSettings(DataClassJsonMixin): - names: List[str] = dc_field(metadata=dc_config(field_name="names")) + names: list[str] = dc_field(metadata=dc_config(field_name="names")) @dataclass class GeofenceSettingsRequest(DataClassJsonMixin): - names: Optional[List[str]] = dc_field( + names: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="names") ) @dataclass class GeofenceSettingsResponse(DataClassJsonMixin): - names: List[str] = dc_field(metadata=dc_config(field_name="names")) + names: list[str] = dc_field(metadata=dc_config(field_name="names")) @dataclass class GetActionConfigResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Moderation action configs grouped by entity type, sorted by order ascending - action_config: "Dict[str, List[ModerationActionConfigResponse]]" = dc_field( + action_config: "dict[str, list[ModerationActionConfigResponse]]" = dc_field( metadata=dc_config(field_name="action_config") ) @@ -14206,10 +14097,10 @@ class GetActiveCallsStatusResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - metrics: "Optional[ActiveCallsMetrics]" = dc_field( + metrics: "ActiveCallsMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="metrics") ) - summary: "Optional[ActiveCallsSummary]" = dc_field( + summary: "ActiveCallsSummary | None" = dc_field( default=None, metadata=dc_config(field_name="summary") ) @@ -14223,7 +14114,7 @@ class GetActivityResponse(DataClassJsonMixin): @dataclass class GetAppealResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - item: "Optional[AppealItemResponse]" = dc_field( + item: "AppealItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="item") ) @@ -14239,7 +14130,7 @@ class GetApplicationResponse(DataClassJsonMixin): class GetBlockListResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Block list contains restricted words - blocklist: "Optional[BlockListResponse]" = dc_field( + blocklist: "BlockListResponse | None" = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) @@ -14249,7 +14140,7 @@ class GetBlockedUsersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Array of blocked user object - blocks: "List[BlockedUserResponse]" = dc_field( + blocks: "list[BlockedUserResponse]" = dc_field( metadata=dc_config(field_name="blocks") ) @@ -14258,13 +14149,13 @@ class GetBlockedUsersResponse(DataClassJsonMixin): class GetCallParticipantSessionMetricsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - is_publisher: Optional[bool] = dc_field( + is_publisher: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_publisher") ) - is_subscriber: Optional[bool] = dc_field( + is_subscriber: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_subscriber") ) - joined_at: Optional[datetime] = dc_field( + joined_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="joined_at", @@ -14273,19 +14164,19 @@ class GetCallParticipantSessionMetricsResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - publisher_type: Optional[str] = dc_field( + publisher_type: str | None = dc_field( default=None, metadata=dc_config(field_name="publisher_type") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - user_session_id: Optional[str] = dc_field( + user_session_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_session_id") ) - published_tracks: "Optional[List[PublishedTrackMetrics]]" = dc_field( + published_tracks: "list[PublishedTrackMetrics] | None" = dc_field( default=None, metadata=dc_config(field_name="published_tracks") ) - client: "Optional[SessionClient]" = dc_field( + client: "SessionClient | None" = dc_field( default=None, metadata=dc_config(field_name="client") ) @@ -14296,16 +14187,16 @@ class GetCallReportResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) session_id: str = dc_field(metadata=dc_config(field_name="session_id")) report: "ReportResponse" = dc_field(metadata=dc_config(field_name="report")) - video_reactions: "Optional[List[VideoReactionsResponse]]" = dc_field( + video_reactions: "list[VideoReactionsResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="video_reactions") ) - chat_activity: "Optional[ChatActivityStatsResponse]" = dc_field( + chat_activity: "ChatActivityStatsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="chat_activity") ) - digest: "Optional[BroadcastDigest]" = dc_field( + digest: "BroadcastDigest | None" = dc_field( default=None, metadata=dc_config(field_name="digest") ) - session: "Optional[CallSessionResponse]" = dc_field( + session: "CallSessionResponse | None" = dc_field( default=None, metadata=dc_config(field_name="session") ) @@ -14313,8 +14204,8 @@ class GetCallReportResponse(DataClassJsonMixin): @dataclass class GetCallResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) - own_capabilities: "List[OwnCapability]" = dc_field( + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + own_capabilities: "list[OwnCapability]" = dc_field( metadata=dc_config(field_name="own_capabilities") ) # Represents a call @@ -14330,16 +14221,16 @@ class GetCallSessionParticipantStatsDetailsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) user_session_id: str = dc_field(metadata=dc_config(field_name="user_session_id")) - publisher: "Optional[ParticipantSeriesPublisherStats]" = dc_field( + publisher: "ParticipantSeriesPublisherStats | None" = dc_field( default=None, metadata=dc_config(field_name="publisher") ) - subscriber: "Optional[ParticipantSeriesSubscriberStats]" = dc_field( + subscriber: "ParticipantSeriesSubscriberStats | None" = dc_field( default=None, metadata=dc_config(field_name="subscriber") ) - timeframe: "Optional[ParticipantSeriesTimeframe]" = dc_field( + timeframe: "ParticipantSeriesTimeframe | None" = dc_field( default=None, metadata=dc_config(field_name="timeframe") ) - user: "Optional[ParticipantSeriesUserStats]" = dc_field( + user: "ParticipantSeriesUserStats | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -14364,14 +14255,14 @@ class GetCallTypeResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) notification_settings: "NotificationSettingsResponse" = dc_field( metadata=dc_config(field_name="notification_settings") ) settings: "CallSettingsResponse" = dc_field( metadata=dc_config(field_name="settings") ) - external_storage: Optional[str] = dc_field( + external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="external_storage") ) @@ -14380,10 +14271,10 @@ class GetCallTypeResponse(DataClassJsonMixin): class GetCampaignResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - campaign: "Optional[CampaignResponse]" = dc_field( + campaign: "CampaignResponse | None" = dc_field( default=None, metadata=dc_config(field_name="campaign") ) - users: "Optional[PagerResponse]" = dc_field( + users: "PagerResponse | None" = dc_field( default=None, metadata=dc_config(field_name="users") ) @@ -14412,6 +14303,9 @@ class GetChannelTypeResponse(DataClassJsonMixin): max_message_length: int = dc_field( metadata=dc_config(field_name="max_message_length") ) + message_retention: str = dc_field( + metadata=dc_config(field_name="message_retention") + ) mutes: bool = dc_field(metadata=dc_config(field_name="mutes")) name: str = dc_field(metadata=dc_config(field_name="name")) polls: bool = dc_field(metadata=dc_config(field_name="polls")) @@ -14442,37 +14336,37 @@ class GetChannelTypeResponse(DataClassJsonMixin): user_message_reminders: bool = dc_field( metadata=dc_config(field_name="user_message_reminders") ) - commands: "List[Command]" = dc_field(metadata=dc_config(field_name="commands")) - permissions: "List[PolicyRequest]" = dc_field( + commands: "list[Command]" = dc_field(metadata=dc_config(field_name="commands")) + permissions: "list[PolicyRequest]" = dc_field( metadata=dc_config(field_name="permissions") ) - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) - blocklist: Optional[str] = dc_field( + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) - partition_size: Optional[int] = dc_field( + partition_size: int | None = dc_field( default=None, metadata=dc_config(field_name="partition_size") ) - partition_ttl: Optional[str] = dc_field( + partition_ttl: str | None = dc_field( default=None, metadata=dc_config(field_name="partition_ttl") ) - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - blocklists: "Optional[List[BlockListOptions]]" = dc_field( + blocklists: "list[BlockListOptions] | None" = dc_field( default=None, metadata=dc_config(field_name="blocklists") ) # Sets thresholds for AI moderation - automod_thresholds: "Optional[Thresholds]" = dc_field( + automod_thresholds: "Thresholds | None" = dc_field( default=None, metadata=dc_config(field_name="automod_thresholds") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) @@ -14484,7 +14378,7 @@ class GetCommandResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) name: str = dc_field(metadata=dc_config(field_name="name")) set: str = dc_field(metadata=dc_config(field_name="set")) - created_at: Optional[datetime] = dc_field( + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -14493,7 +14387,7 @@ class GetCommandResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - updated_at: Optional[datetime] = dc_field( + updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="updated_at", @@ -14510,11 +14404,11 @@ class GetCommentRepliesResponse(DataClassJsonMixin): # Sort order used for the replies (first, last, top, best, controversial) sort: str = dc_field(metadata=dc_config(field_name="sort")) # Threaded listing of replies to the comment - comments: "List[ThreadedCommentResponse]" = dc_field( + comments: "list[ThreadedCommentResponse]" = dc_field( metadata=dc_config(field_name="comments") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass @@ -14529,17 +14423,17 @@ class GetCommentsResponse(DataClassJsonMixin): # Sort order used for the comments (first, last, top, best, controversial) sort: str = dc_field(metadata=dc_config(field_name="sort")) # Threaded listing for the activity - comments: "List[ThreadedCommentResponse]" = dc_field( + comments: "list[ThreadedCommentResponse]" = dc_field( metadata=dc_config(field_name="comments") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class GetConfigResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - config: "Optional[ConfigResponse]" = dc_field( + config: "ConfigResponse | None" = dc_field( default=None, metadata=dc_config(field_name="config") ) @@ -14557,28 +14451,28 @@ class GetDailyDigestResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) status: str = dc_field(metadata=dc_config(field_name="status")) - generated_at: Optional[str] = dc_field( + generated_at: str | None = dc_field( default=None, metadata=dc_config(field_name="generated_at") ) - retry_after: Optional[int] = dc_field( + retry_after: int | None = dc_field( default=None, metadata=dc_config(field_name="retry_after") ) - revision: Optional[int] = dc_field( + revision: int | None = dc_field( default=None, metadata=dc_config(field_name="revision") ) - schema_version: Optional[str] = dc_field( + schema_version: str | None = dc_field( default=None, metadata=dc_config(field_name="schema_version") ) - broadcasts: "Optional[List[BroadcastDigest]]" = dc_field( + broadcasts: "list[BroadcastDigest] | None" = dc_field( default=None, metadata=dc_config(field_name="broadcasts") ) - call_sessions: "Optional[List[DailyDigestCallSessionSummary]]" = dc_field( + call_sessions: "list[DailyDigestCallSessionSummary] | None" = dc_field( default=None, metadata=dc_config(field_name="call_sessions") ) - digest_kinds: Optional[List[str]] = dc_field( + digest_kinds: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="digest_kinds") ) - broadcast_rollup: "Optional[BroadcastDailyRollup]" = dc_field( + broadcast_rollup: "BroadcastDailyRollup | None" = dc_field( default=None, metadata=dc_config(field_name="broadcast_rollup") ) @@ -14594,7 +14488,7 @@ class GetDraftResponse(DataClassJsonMixin): class GetEdgesResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - edges: "List[EdgeResponse]" = dc_field(metadata=dc_config(field_name="edges")) + edges: "list[EdgeResponse]" = dc_field(metadata=dc_config(field_name="edges")) @dataclass @@ -14602,7 +14496,7 @@ class GetExternalStorageAWSS3Response(DataClassJsonMixin): bucket: str = dc_field(metadata=dc_config(field_name="bucket")) region: str = dc_field(metadata=dc_config(field_name="region")) role_arn: str = dc_field(metadata=dc_config(field_name="role_arn")) - path_prefix: Optional[str] = dc_field( + path_prefix: str | None = dc_field( default=None, metadata=dc_config(field_name="path_prefix") ) @@ -14611,7 +14505,7 @@ class GetExternalStorageAWSS3Response(DataClassJsonMixin): class GetExternalStorageGCSResponse(DataClassJsonMixin): bucket: str = dc_field(metadata=dc_config(field_name="bucket")) credentials_set: bool = dc_field(metadata=dc_config(field_name="credentials_set")) - path_prefix: Optional[str] = dc_field( + path_prefix: str | None = dc_field( default=None, metadata=dc_config(field_name="path_prefix") ) @@ -14637,14 +14531,25 @@ class GetExternalStorageResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - aws_s3: "Optional[GetExternalStorageAWSS3Response]" = dc_field( + aws_s3: "GetExternalStorageAWSS3Response | None" = dc_field( default=None, metadata=dc_config(field_name="aws_s3") ) - gcs: "Optional[GetExternalStorageGCSResponse]" = dc_field( + gcs: "GetExternalStorageGCSResponse | None" = dc_field( default=None, metadata=dc_config(field_name="gcs") ) +@dataclass +class GetFeedCountsResponse(DataClassJsonMixin): + # Number of activities in the feed + activity_count: int = dc_field(metadata=dc_config(field_name="activity_count")) + # Total number of comments on those activities, including nested replies + comment_count: int = dc_field(metadata=dc_config(field_name="comment_count")) + duration: str = dc_field(metadata=dc_config(field_name="duration")) + # Sum of activity_count and comment_count + total_count: int = dc_field(metadata=dc_config(field_name="total_count")) + + @dataclass class GetFeedGroupResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) @@ -14671,23 +14576,23 @@ class GetFeedVisibilityResponse(DataClassJsonMixin): class GetFeedsRateLimitsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Rate limits for Android platform (endpoint name -> limit info) - android: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + android: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="android") ) # Rate limits for iOS platform (endpoint name -> limit info) - ios: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + ios: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="ios") ) # Rate limits for server-side platform (endpoint name -> limit info) - server_side: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + server_side: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="server_side") ) # Rate limits for Unity platform (endpoint name -> limit info) - unity: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + unity: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="unity") ) # Rate limits for Web platform (endpoint name -> limit info) - web: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + web: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="web") ) @@ -14699,7 +14604,7 @@ class GetFlagCountRequest(DataClassJsonMixin): metadata=dc_config(field_name="entity_creator_id") ) # Optional entity type filter (e.g., stream:chat:v1:message, stream:user) - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) @@ -14715,10 +14620,10 @@ class GetFlagCountResponse(DataClassJsonMixin): class GetFollowSuggestionsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of suggested feeds to follow - suggestions: "List[FeedSuggestionResponse]" = dc_field( + suggestions: "list[FeedSuggestionResponse]" = dc_field( metadata=dc_config(field_name="suggestions") ) - algorithm_used: Optional[str] = dc_field( + algorithm_used: str | None = dc_field( default=None, metadata=dc_config(field_name="algorithm_used") ) @@ -14727,7 +14632,7 @@ class GetFollowSuggestionsResponse(DataClassJsonMixin): class GetImportResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - import_task: "Optional[ImportTask]" = dc_field( + import_task: "ImportTask | None" = dc_field( default=None, metadata=dc_config(field_name="import_task") ) @@ -14759,7 +14664,7 @@ class GetImportV2TaskResponse(DataClassJsonMixin): settings: "ImportV2TaskSettings" = dc_field( metadata=dc_config(field_name="settings") ) - result: Optional[Dict[str, object]] = dc_field( + result: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="result") ) @@ -14768,7 +14673,7 @@ class GetImportV2TaskResponse(DataClassJsonMixin): class GetManyMessagesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of messages - messages: "List[MessageResponse]" = dc_field( + messages: "list[MessageResponse]" = dc_field( metadata=dc_config(field_name="messages") ) @@ -14781,7 +14686,7 @@ class GetMessageResponse(DataClassJsonMixin): message: "MessageWithChannelResponse" = dc_field( metadata=dc_config(field_name="message") ) - pending_message_metadata: "Optional[Dict[str, str]]" = dc_field( + pending_message_metadata: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="pending_message_metadata") ) @@ -14790,7 +14695,7 @@ class GetMessageResponse(DataClassJsonMixin): class GetModerationRuleResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - rule: "Optional[ModerationRuleV2Response]" = dc_field( + rule: "ModerationRuleV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="rule") ) @@ -14798,94 +14703,86 @@ class GetModerationRuleResponse(DataClassJsonMixin): @dataclass class GetOGResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # URL of detected video or audio - asset_url: Optional[str] = dc_field( + asset_url: str | None = dc_field( default=None, metadata=dc_config(field_name="asset_url") ) - author_icon: Optional[str] = dc_field( + author_icon: str | None = dc_field( default=None, metadata=dc_config(field_name="author_icon") ) # og:site - author_link: Optional[str] = dc_field( + author_link: str | None = dc_field( default=None, metadata=dc_config(field_name="author_link") ) # og:site_name - author_name: Optional[str] = dc_field( + author_name: str | None = dc_field( default=None, metadata=dc_config(field_name="author_name") ) - color: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="color") - ) - fallback: Optional[str] = dc_field( + color: str | None = dc_field(default=None, metadata=dc_config(field_name="color")) + fallback: str | None = dc_field( default=None, metadata=dc_config(field_name="fallback") ) - footer: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="footer") - ) - footer_icon: Optional[str] = dc_field( + footer: str | None = dc_field(default=None, metadata=dc_config(field_name="footer")) + footer_icon: str | None = dc_field( default=None, metadata=dc_config(field_name="footer_icon") ) # URL of detected image - image_url: Optional[str] = dc_field( + image_url: str | None = dc_field( default=None, metadata=dc_config(field_name="image_url") ) # extracted url from the text - og_scrape_url: Optional[str] = dc_field( + og_scrape_url: str | None = dc_field( default=None, metadata=dc_config(field_name="og_scrape_url") ) - original_height: Optional[int] = dc_field( + original_height: int | None = dc_field( default=None, metadata=dc_config(field_name="original_height") ) - original_width: Optional[int] = dc_field( + original_width: int | None = dc_field( default=None, metadata=dc_config(field_name="original_width") ) - pretext: Optional[str] = dc_field( + pretext: str | None = dc_field( default=None, metadata=dc_config(field_name="pretext") ) # og:description - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) # URL of detected thumb image - thumb_url: Optional[str] = dc_field( + thumb_url: str | None = dc_field( default=None, metadata=dc_config(field_name="thumb_url") ) # og:title - title: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="title") - ) + title: str | None = dc_field(default=None, metadata=dc_config(field_name="title")) # og:url - title_link: Optional[str] = dc_field( + title_link: str | None = dc_field( default=None, metadata=dc_config(field_name="title_link") ) # Attachment type, could be empty, image, audio or video - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - actions: "Optional[List[Action]]" = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + actions: "list[Action] | None" = dc_field( default=None, metadata=dc_config(field_name="actions") ) - fields: "Optional[List[Field]]" = dc_field( + fields: "list[Field] | None" = dc_field( default=None, metadata=dc_config(field_name="fields") ) - giphy: "Optional[Images]" = dc_field( + giphy: "Images | None" = dc_field( default=None, metadata=dc_config(field_name="giphy") ) @dataclass class GetOrCreateCallRequest(DataClassJsonMixin): - members_limit: Optional[int] = dc_field( + members_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="members_limit") ) # if provided it sends a notification event to the members for this call - notify: Optional[bool] = dc_field( + notify: bool | None = dc_field( default=None, metadata=dc_config(field_name="notify") ) # if provided it sends a ring event to the members for this call - ring: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="ring")) - video: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="video") - ) + ring: bool | None = dc_field(default=None, metadata=dc_config(field_name="ring")) + video: bool | None = dc_field(default=None, metadata=dc_config(field_name="video")) # CallRequest is the payload for creating a call. - data: "Optional[CallRequest]" = dc_field( + data: "CallRequest | None" = dc_field( default=None, metadata=dc_config(field_name="data") ) @@ -14894,8 +14791,8 @@ class GetOrCreateCallRequest(DataClassJsonMixin): class GetOrCreateCallResponse(DataClassJsonMixin): created: bool = dc_field(metadata=dc_config(field_name="created")) duration: str = dc_field(metadata=dc_config(field_name="duration")) - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) - own_capabilities: "List[OwnCapability]" = dc_field( + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + own_capabilities: "list[OwnCapability]" = dc_field( metadata=dc_config(field_name="own_capabilities") ) # Represents a call @@ -14905,37 +14802,37 @@ class GetOrCreateCallResponse(DataClassJsonMixin): @dataclass class GetOrCreateFeedGroupRequest(DataClassJsonMixin): # Default visibility for the feed group, can be 'public', 'visible', 'followers', 'members', or 'private'. Defaults to 'visible' if not provided. - default_visibility: Optional[str] = dc_field( + default_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="default_visibility") ) # Configuration for activity processors - activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + activity_processors: "list[ActivityProcessorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_processors") ) # Configuration for activity selectors - activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + activity_selectors: "list[ActivitySelectorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_selectors") ) - activity_filter: "Optional[ActivityFilterConfig]" = dc_field( + activity_filter: "ActivityFilterConfig | None" = dc_field( default=None, metadata=dc_config(field_name="activity_filter") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) # Custom data for the feed group - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - notification: "Optional[NotificationConfig]" = dc_field( + notification: "NotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="notification") ) - push_notification: "Optional[PushNotificationConfig]" = dc_field( + push_notification: "PushNotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="push_notification") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) - stories: "Optional[StoriesConfig]" = dc_field( + stories: "StoriesConfig | None" = dc_field( default=None, metadata=dc_config(field_name="stories") ) @@ -14952,55 +14849,51 @@ class GetOrCreateFeedGroupResponse(DataClassJsonMixin): @dataclass class GetOrCreateFeedRequest(DataClassJsonMixin): - id_around: Optional[str] = dc_field( + id_around: str | None = dc_field( default=None, metadata=dc_config(field_name="id_around") ) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - overwrite_interest_weights: Optional[bool] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + overwrite_interest_weights: bool | None = dc_field( default=None, metadata=dc_config(field_name="overwrite_interest_weights") ) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - view: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="view")) - watch: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="watch") - ) - data: "Optional[FeedInput]" = dc_field( + view: str | None = dc_field(default=None, metadata=dc_config(field_name="view")) + watch: bool | None = dc_field(default=None, metadata=dc_config(field_name="watch")) + data: "FeedInput | None" = dc_field( default=None, metadata=dc_config(field_name="data") ) # Options to skip specific enrichments to improve performance. Default is false (enrichments are included). Setting a field to true skips that enrichment. - enrichment_options: "Optional[EnrichmentOptions]" = dc_field( + enrichment_options: "EnrichmentOptions | None" = dc_field( default=None, metadata=dc_config(field_name="enrichment_options") ) - external_ranking: Optional[Dict[str, object]] = dc_field( + external_ranking: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="external_ranking") ) - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) - followers_pagination: "Optional[PagerRequest]" = dc_field( + followers_pagination: "PagerRequest | None" = dc_field( default=None, metadata=dc_config(field_name="followers_pagination") ) - following_pagination: "Optional[PagerRequest]" = dc_field( + following_pagination: "PagerRequest | None" = dc_field( default=None, metadata=dc_config(field_name="following_pagination") ) # Options to control fetching reactions from friends (users you follow or have mutual follows with). - friend_reactions_options: "Optional[FriendReactionsOptions]" = dc_field( + friend_reactions_options: "FriendReactionsOptions | None" = dc_field( default=None, metadata=dc_config(field_name="friend_reactions_options") ) - interest_weights: "Optional[Dict[str, float]]" = dc_field( + interest_weights: "dict[str, float] | None" = dc_field( default=None, metadata=dc_config(field_name="interest_weights") ) - member_pagination: "Optional[PagerRequest]" = dc_field( + member_pagination: "PagerRequest | None" = dc_field( default=None, metadata=dc_config(field_name="member_pagination") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -15010,37 +14903,37 @@ class GetOrCreateFeedResponse(DataClassJsonMixin): created: bool = dc_field(metadata=dc_config(field_name="created")) # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - activities: "List[ActivityResponse]" = dc_field( + activities: "list[ActivityResponse]" = dc_field( metadata=dc_config(field_name="activities") ) - aggregated_activities: "List[AggregatedActivityResponse]" = dc_field( + aggregated_activities: "list[AggregatedActivityResponse]" = dc_field( metadata=dc_config(field_name="aggregated_activities") ) - followers: "List[FollowResponse]" = dc_field( + followers: "list[FollowResponse]" = dc_field( metadata=dc_config(field_name="followers") ) - following: "List[FollowResponse]" = dc_field( + following: "list[FollowResponse]" = dc_field( metadata=dc_config(field_name="following") ) - members: "List[FeedMemberResponse]" = dc_field( + members: "list[FeedMemberResponse]" = dc_field( metadata=dc_config(field_name="members") ) - pinned_activities: "List[ActivityPinResponse]" = dc_field( + pinned_activities: "list[ActivityPinResponse]" = dc_field( metadata=dc_config(field_name="pinned_activities") ) feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="feed")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - followers_pagination: "Optional[PagerResponse]" = dc_field( + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + followers_pagination: "PagerResponse | None" = dc_field( default=None, metadata=dc_config(field_name="followers_pagination") ) - following_pagination: "Optional[PagerResponse]" = dc_field( + following_pagination: "PagerResponse | None" = dc_field( default=None, metadata=dc_config(field_name="following_pagination") ) - member_pagination: "Optional[PagerResponse]" = dc_field( + member_pagination: "PagerResponse | None" = dc_field( default=None, metadata=dc_config(field_name="member_pagination") ) - notification_status: "Optional[NotificationStatusResponse]" = dc_field( + notification_status: "NotificationStatusResponse | None" = dc_field( default=None, metadata=dc_config(field_name="notification_status") ) @@ -15048,13 +14941,13 @@ class GetOrCreateFeedResponse(DataClassJsonMixin): @dataclass class GetOrCreateFeedViewRequest(DataClassJsonMixin): # Configuration for selecting activities - activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + activity_selectors: "list[ActivitySelectorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_selectors") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) @@ -15074,7 +14967,7 @@ class GetOrCreateFollowResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) # Whether a notification activity was successfully created (only set when the follow was newly created) - notification_created: Optional[bool] = dc_field( + notification_created: bool | None = dc_field( default=None, metadata=dc_config(field_name="notification_created") ) @@ -15086,15 +14979,15 @@ class GetOrCreateUnfollowRequest(DataClassJsonMixin): # Fully qualified ID of the target feed target: str = dc_field(metadata=dc_config(field_name="target")) # Whether to delete the corresponding notification activity (default: false) - delete_notification_activity: Optional[bool] = dc_field( + delete_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="delete_notification_activity") ) # If true, enriches the follow's source_feed and target_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) # When true, activities from the unfollowed feed will remain in the source feed's timeline (default: false) - keep_history: Optional[bool] = dc_field( + keep_history: bool | None = dc_field( default=None, metadata=dc_config(field_name="keep_history") ) @@ -15104,16 +14997,35 @@ class GetOrCreateUnfollowResponse(DataClassJsonMixin): # True if a follow was found and removed by this request; false if no follow existed deleted: bool = dc_field(metadata=dc_config(field_name="deleted")) duration: str = dc_field(metadata=dc_config(field_name="duration")) - follow: "Optional[FollowResponse]" = dc_field( + follow: "FollowResponse | None" = dc_field( default=None, metadata=dc_config(field_name="follow") ) +@dataclass +class GetPinnedMessagesResponse(DataClassJsonMixin): + # Duration of the request in milliseconds + duration: str = dc_field(metadata=dc_config(field_name="duration")) + # Messages + messages: "list[MessageResponse]" = dc_field( + metadata=dc_config(field_name="messages") + ) + + +@dataclass +class GetPredefinedFilterResponse(DataClassJsonMixin): + # Duration of the request in milliseconds + duration: str = dc_field(metadata=dc_config(field_name="duration")) + predefined_filter: "PredefinedFilterResponse | None" = dc_field( + default=None, metadata=dc_config(field_name="predefined_filter") + ) + + @dataclass class GetPushTemplatesResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - templates: "List[PushTemplateResponse]" = dc_field( + templates: "list[PushTemplateResponse]" = dc_field( metadata=dc_config(field_name="templates") ) @@ -15122,23 +15034,23 @@ class GetPushTemplatesResponse(DataClassJsonMixin): class GetRateLimitsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Map of endpoint rate limits for the Android platform - android: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + android: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="android") ) # Map of endpoint rate limits for the iOS platform - ios: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + ios: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="ios") ) # Map of endpoint rate limits for the server-side platform - server_side: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + server_side: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="server_side") ) # Map of endpoint rate limits for the Unity platform - unity: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + unity: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="unity") ) # Map of endpoint rate limits for the web platform - web: "Optional[Dict[str, LimitInfoResponse]]" = dc_field( + web: "dict[str, LimitInfoResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="web") ) @@ -15147,7 +15059,7 @@ class GetRateLimitsResponse(DataClassJsonMixin): class GetReactionsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of reactions - reactions: "List[ReactionResponse]" = dc_field( + reactions: "list[ReactionResponse]" = dc_field( metadata=dc_config(field_name="reactions") ) @@ -15156,7 +15068,7 @@ class GetReactionsResponse(DataClassJsonMixin): class GetRepliesResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - messages: "List[MessageResponse]" = dc_field( + messages: "list[MessageResponse]" = dc_field( metadata=dc_config(field_name="messages") ) @@ -15165,24 +15077,22 @@ class GetRepliesResponse(DataClassJsonMixin): class GetRetentionPolicyResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - policies: "List[RetentionPolicy]" = dc_field( + policies: "list[RetentionPolicy]" = dc_field( metadata=dc_config(field_name="policies") ) @dataclass class GetRetentionPolicyRunsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) @@ -15191,15 +15101,15 @@ class GetRetentionPolicyRunsRequest(DataClassJsonMixin): class GetRetentionPolicyRunsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - runs: "List[RetentionRunResponse]" = dc_field(metadata=dc_config(field_name="runs")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + runs: "list[RetentionRunResponse]" = dc_field(metadata=dc_config(field_name="runs")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class GetReviewQueueItemResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - item: "Optional[ReviewQueueItemResponse]" = dc_field( + item: "ReviewQueueItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="item") ) @@ -15208,7 +15118,7 @@ class GetReviewQueueItemResponse(DataClassJsonMixin): class GetSegmentResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - segment: "Optional[SegmentResponse]" = dc_field( + segment: "SegmentResponse | None" = dc_field( default=None, metadata=dc_config(field_name="segment") ) @@ -15216,7 +15126,7 @@ class GetSegmentResponse(DataClassJsonMixin): @dataclass class GetSetupSessionResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - setup_session: "Optional[SetupSession]" = dc_field( + setup_session: "SetupSession | None" = dc_field( default=None, metadata=dc_config(field_name="setup_session") ) @@ -15244,11 +15154,11 @@ class GetTaskResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - error: "Optional[ErrorResult]" = dc_field( + error: "ErrorResult | None" = dc_field( default=None, metadata=dc_config(field_name="error") ) # Result produced by task after completion - result: Optional[Dict[str, object]] = dc_field( + result: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="result") ) @@ -15262,7 +15172,7 @@ class GetThreadResponse(DataClassJsonMixin): @dataclass class GetUserGroupResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - user_group: "Optional[UserGroupResponse]" = dc_field( + user_group: "UserGroupResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -15271,38 +15181,38 @@ class GetUserGroupResponse(DataClassJsonMixin): class GetUserInterestsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Top-N interest tags sorted by descending count, then alphabetically by tag - interests: "List[InterestTagResponse]" = dc_field( + interests: "list[InterestTagResponse]" = dc_field( metadata=dc_config(field_name="interests") ) @dataclass class GoLiveRequest(DataClassJsonMixin): - recording_storage_name: Optional[str] = dc_field( + recording_storage_name: str | None = dc_field( default=None, metadata=dc_config(field_name="recording_storage_name") ) - start_closed_caption: Optional[bool] = dc_field( + start_closed_caption: bool | None = dc_field( default=None, metadata=dc_config(field_name="start_closed_caption") ) - start_composite_recording: Optional[bool] = dc_field( + start_composite_recording: bool | None = dc_field( default=None, metadata=dc_config(field_name="start_composite_recording") ) - start_hls: Optional[bool] = dc_field( + start_hls: bool | None = dc_field( default=None, metadata=dc_config(field_name="start_hls") ) - start_individual_recording: Optional[bool] = dc_field( + start_individual_recording: bool | None = dc_field( default=None, metadata=dc_config(field_name="start_individual_recording") ) - start_raw_recording: Optional[bool] = dc_field( + start_raw_recording: bool | None = dc_field( default=None, metadata=dc_config(field_name="start_raw_recording") ) - start_recording: Optional[bool] = dc_field( + start_recording: bool | None = dc_field( default=None, metadata=dc_config(field_name="start_recording") ) - start_transcription: Optional[bool] = dc_field( + start_transcription: bool | None = dc_field( default=None, metadata=dc_config(field_name="start_transcription") ) - transcription_storage_name: Optional[str] = dc_field( + transcription_storage_name: str | None = dc_field( default=None, metadata=dc_config(field_name="transcription_storage_name") ) @@ -15317,7 +15227,7 @@ class GoLiveResponse(DataClassJsonMixin): @dataclass class GoogleVisionConfig(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) @@ -15325,43 +15235,39 @@ class GoogleVisionConfig(DataClassJsonMixin): @dataclass class GroupedChannelsBucket(DataClassJsonMixin): # Channels returned for this bucket - channels: "List[ChannelStateResponseFields]" = dc_field( + channels: "list[ChannelStateResponseFields]" = dc_field( metadata=dc_config(field_name="channels") ) # Cursor for the next page of this group - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for the previous page of this group - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Unread channels currently classified into this bucket - unread_channels: Optional[int] = dc_field( + unread_channels: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_channels") ) @dataclass class GroupedChannelsGroupRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class GroupedQueryChannelsRequest(DataClassJsonMixin): # Default max channels per group (default 10) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Groups to return, keyed by group name. Each group can define limit, next, or prev. 'next' and 'prev' cursors are only allowed when the request contains exactly one group; multi-group pagination is rejected. - groups: "Optional[Dict[str, GroupedChannelsGroupRequest]]" = dc_field( + groups: "dict[str, GroupedChannelsGroupRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="groups") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -15371,7 +15277,7 @@ class GroupedQueryChannelsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Predefined channel groups keyed by group name - groups: "Dict[str, GroupedChannelsBucket]" = dc_field( + groups: "dict[str, GroupedChannelsBucket]" = dc_field( metadata=dc_config(field_name="groups") ) @@ -15386,10 +15292,10 @@ class GroupedStatsResponse(DataClassJsonMixin): class HLSSettings(DataClassJsonMixin): auto_on: bool = dc_field(metadata=dc_config(field_name="auto_on")) enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - quality_tracks: List[str] = dc_field( + quality_tracks: list[str] = dc_field( metadata=dc_config(field_name="quality_tracks") ) - layout: "Optional[LayoutSettings]" = dc_field( + layout: "LayoutSettings | None" = dc_field( default=None, metadata=dc_config(field_name="layout") ) @@ -15397,18 +15303,18 @@ class HLSSettings(DataClassJsonMixin): @dataclass class HLSSettingsRequest(DataClassJsonMixin): # Quality tracks for HLS. One of: 360p, 480p, 720p, 1080p, 1440p, portrait-360x640, portrait-480x854, portrait-720x1280, portrait-1080x1920, portrait-1440x2560 - quality_tracks: List[str] = dc_field( + quality_tracks: list[str] = dc_field( metadata=dc_config(field_name="quality_tracks") ) # Whether HLS broadcasting should start automatically - auto_on: Optional[bool] = dc_field( + auto_on: bool | None = dc_field( default=None, metadata=dc_config(field_name="auto_on") ) # Whether HLS broadcasting is enabled - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - layout: "Optional[LayoutSettingsRequest]" = dc_field( + layout: "LayoutSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="layout") ) @@ -15417,7 +15323,7 @@ class HLSSettingsRequest(DataClassJsonMixin): class HLSSettingsResponse(DataClassJsonMixin): auto_on: bool = dc_field(metadata=dc_config(field_name="auto_on")) enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - quality_tracks: List[str] = dc_field( + quality_tracks: list[str] = dc_field( metadata=dc_config(field_name="quality_tracks") ) layout: "LayoutSettingsResponse" = dc_field(metadata=dc_config(field_name="layout")) @@ -15425,19 +15331,19 @@ class HLSSettingsResponse(DataClassJsonMixin): @dataclass class HarmConfig(DataClassJsonMixin): - cooldown_period: Optional[int] = dc_field( + cooldown_period: int | None = dc_field( default=None, metadata=dc_config(field_name="cooldown_period") ) - severity: Optional[int] = dc_field( + severity: int | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - action_sequences: "Optional[List[ActionSequence]]" = dc_field( + action_sequences: "list[ActionSequence] | None" = dc_field( default=None, metadata=dc_config(field_name="action_sequences") ) - harm_types: Optional[List[str]] = dc_field( + harm_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_types") ) @@ -15445,14 +15351,14 @@ class HarmConfig(DataClassJsonMixin): @dataclass class HideChannelRequest(DataClassJsonMixin): # Whether to clear message history of the channel or not - clear_history: Optional[bool] = dc_field( + clear_history: bool | None = dc_field( default=None, metadata=dc_config(field_name="clear_history") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -15465,59 +15371,55 @@ class HideChannelResponse(DataClassJsonMixin): @dataclass class HuaweiConfig(DataClassJsonMixin): - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="Disabled") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - secret: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="secret") - ) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + secret: str | None = dc_field(default=None, metadata=dc_config(field_name="secret")) @dataclass class HuaweiConfigFields(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - secret: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="secret") - ) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + secret: str | None = dc_field(default=None, metadata=dc_config(field_name="secret")) @dataclass class IPContentCountRuleParameters(DataClassJsonMixin): - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) @dataclass class IPFlagCountRuleParameters(DataClassJsonMixin): - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) @dataclass class ImageContentParameters(DataClassJsonMixin): - label_operator: Optional[str] = dc_field( + label_operator: str | None = dc_field( default=None, metadata=dc_config(field_name="label_operator") ) - min_confidence: Optional[float] = dc_field( + min_confidence: float | None = dc_field( default=None, metadata=dc_config(field_name="min_confidence") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) @@ -15533,16 +15435,16 @@ class ImageData(DataClassJsonMixin): @dataclass class ImageRuleParameters(DataClassJsonMixin): - min_confidence: Optional[float] = dc_field( + min_confidence: float | None = dc_field( default=None, metadata=dc_config(field_name="min_confidence") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) @@ -15550,29 +15452,23 @@ class ImageRuleParameters(DataClassJsonMixin): @dataclass class ImageSize(DataClassJsonMixin): # Crop mode. One of: top, bottom, left, right, center - crop: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="crop")) + crop: str | None = dc_field(default=None, metadata=dc_config(field_name="crop")) # Target image height - height: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="height") - ) + height: int | None = dc_field(default=None, metadata=dc_config(field_name="height")) # Resize method. One of: clip, crop, scale, fill - resize: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="resize") - ) + resize: str | None = dc_field(default=None, metadata=dc_config(field_name="resize")) # Target image width - width: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="width") - ) + width: int | None = dc_field(default=None, metadata=dc_config(field_name="width")) @dataclass class ImageUploadRequest(DataClassJsonMixin): - file: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="file")) + file: str | None = dc_field(default=None, metadata=dc_config(field_name="file")) # field with JSON-encoded array of image size configurations - upload_sizes: "Optional[List[ImageSize]]" = dc_field( + upload_sizes: "list[ImageSize] | None" = dc_field( default=None, metadata=dc_config(field_name="upload_sizes") ) - user: "Optional[OnlyUserID]" = dc_field( + user: "OnlyUserID | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -15581,12 +15477,12 @@ class ImageUploadRequest(DataClassJsonMixin): class ImageUploadResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - file: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="file")) - thumb_url: Optional[str] = dc_field( + file: str | None = dc_field(default=None, metadata=dc_config(field_name="file")) + thumb_url: str | None = dc_field( default=None, metadata=dc_config(field_name="thumb_url") ) # Array of image size configurations - upload_sizes: "Optional[List[ImageSize]]" = dc_field( + upload_sizes: "list[ImageSize] | None" = dc_field( default=None, metadata=dc_config(field_name="upload_sizes") ) @@ -15612,8 +15508,8 @@ class Images(DataClassJsonMixin): @dataclass class ImportBlockListRequest(DataClassJsonMixin): - items: List[str] = dc_field(metadata=dc_config(field_name="items")) - chunk_size: Optional[int] = dc_field( + items: list[str] = dc_field(metadata=dc_config(field_name="items")) + chunk_size: int | None = dc_field( default=None, metadata=dc_config(field_name="chunk_size") ) @@ -15647,10 +15543,10 @@ class ImportTask(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - history: "List[ImportTaskHistory]" = dc_field( + history: "list[ImportTaskHistory]" = dc_field( metadata=dc_config(field_name="history") ) - size: Optional[int] = dc_field(default=None, metadata=dc_config(field_name="size")) + size: int | None = dc_field(default=None, metadata=dc_config(field_name="size")) @dataclass @@ -15692,38 +15588,34 @@ class ImportV2TaskItem(DataClassJsonMixin): settings: "ImportV2TaskSettings" = dc_field( metadata=dc_config(field_name="settings") ) - result: Optional[Dict[str, object]] = dc_field( + result: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="result") ) @dataclass class ImportV2TaskSettings(DataClassJsonMixin): - merge_custom: Optional[bool] = dc_field( + merge_custom: bool | None = dc_field( default=None, metadata=dc_config(field_name="merge_custom") ) - mode: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mode")) - path: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="path")) - skip_references_check: Optional[bool] = dc_field( + mode: str | None = dc_field(default=None, metadata=dc_config(field_name="mode")) + path: str | None = dc_field(default=None, metadata=dc_config(field_name="path")) + skip_references_check: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_references_check") ) - use_import_time_as_op_time: Optional[bool] = dc_field( + use_import_time_as_op_time: bool | None = dc_field( default=None, metadata=dc_config(field_name="use_import_time_as_op_time") ) - s3: "Optional[ImportV2TaskSettingsS3]" = dc_field( + s3: "ImportV2TaskSettingsS3 | None" = dc_field( default=None, metadata=dc_config(field_name="s3") ) @dataclass class ImportV2TaskSettingsS3(DataClassJsonMixin): - bucket: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="bucket") - ) - dir: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="dir")) - region: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="region") - ) + bucket: str | None = dc_field(default=None, metadata=dc_config(field_name="bucket")) + dir: str | None = dc_field(default=None, metadata=dc_config(field_name="dir")) + region: str | None = dc_field(default=None, metadata=dc_config(field_name="region")) @dataclass @@ -15739,7 +15631,7 @@ class Incident(DataClassJsonMixin): @dataclass class IndividualRecordSettings(DataClassJsonMixin): mode: str = dc_field(metadata=dc_config(field_name="mode")) - output_types: Optional[List[str]] = dc_field( + output_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="output_types") ) @@ -15754,7 +15646,7 @@ class IndividualRecordingSettingsRequest(DataClassJsonMixin): # Recording mode. One of: available, disabled, auto-on mode: str = dc_field(metadata=dc_config(field_name="mode")) # Output types to include: audio_only, video_only, audio_video, screenshare_audio_only, screenshare_video_only, screenshare_audio_video - output_types: Optional[List[str]] = dc_field( + output_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="output_types") ) @@ -15762,7 +15654,7 @@ class IndividualRecordingSettingsRequest(DataClassJsonMixin): @dataclass class IndividualRecordingSettingsResponse(DataClassJsonMixin): mode: str = dc_field(metadata=dc_config(field_name="mode")) - output_types: Optional[List[str]] = dc_field( + output_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="output_types") ) @@ -15778,7 +15670,7 @@ class IngressAudioEncodingOptions(DataClassJsonMixin): class IngressAudioEncodingOptionsRequest(DataClassJsonMixin): bitrate: int = dc_field(metadata=dc_config(field_name="bitrate")) channels: int = dc_field(metadata=dc_config(field_name="channels")) - enable_dtx: Optional[bool] = dc_field( + enable_dtx: bool | None = dc_field( default=None, metadata=dc_config(field_name="enable_dtx") ) @@ -15812,41 +15704,41 @@ class IngressErrorEvent(DataClassJsonMixin): # The type of event: "ingress.error" in this case type: str = dc_field(default="ingress.error", metadata=dc_config(field_name="type")) # Error code - code: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="code")) + code: str | None = dc_field(default=None, metadata=dc_config(field_name="code")) @dataclass class IngressSettings(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - audio_encoding_options: "Optional[IngressAudioEncodingOptions]" = dc_field( + audio_encoding_options: "IngressAudioEncodingOptions | None" = dc_field( default=None, metadata=dc_config(field_name="audio_encoding_options") ) - video_encoding_options: "Optional[Dict[str, IngressVideoEncodingOptions]]" = ( - dc_field(default=None, metadata=dc_config(field_name="video_encoding_options")) + video_encoding_options: "dict[str, IngressVideoEncodingOptions] | None" = dc_field( + default=None, metadata=dc_config(field_name="video_encoding_options") ) @dataclass class IngressSettingsRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - audio_encoding_options: "Optional[IngressAudioEncodingOptionsRequest]" = dc_field( + audio_encoding_options: "IngressAudioEncodingOptionsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="audio_encoding_options") ) - video_encoding_options: "Optional[Dict[str, IngressVideoEncodingOptionsRequest]]" = dc_field( - default=None, metadata=dc_config(field_name="video_encoding_options") + video_encoding_options: "dict[str, IngressVideoEncodingOptionsRequest] | None" = ( + dc_field(default=None, metadata=dc_config(field_name="video_encoding_options")) ) @dataclass class IngressSettingsResponse(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - audio_encoding_options: "Optional[IngressAudioEncodingResponse]" = dc_field( + audio_encoding_options: "IngressAudioEncodingResponse | None" = dc_field( default=None, metadata=dc_config(field_name="audio_encoding_options") ) - video_encoding_options: "Optional[Dict[str, IngressVideoEncodingResponse]]" = ( - dc_field(default=None, metadata=dc_config(field_name="video_encoding_options")) + video_encoding_options: "dict[str, IngressVideoEncodingResponse] | None" = dc_field( + default=None, metadata=dc_config(field_name="video_encoding_options") ) @@ -15895,15 +15787,15 @@ class IngressStartedEvent(DataClassJsonMixin): default="ingress.started", metadata=dc_config(field_name="type") ) # Client IP address - client_ip: Optional[str] = dc_field( + client_ip: str | None = dc_field( default=None, metadata=dc_config(field_name="client_ip") ) # Streaming client software name (e.g., 'OBS Studio') - client_name: Optional[str] = dc_field( + client_name: str | None = dc_field( default=None, metadata=dc_config(field_name="client_name") ) # Client software version - version: Optional[str] = dc_field( + version: str | None = dc_field( default=None, metadata=dc_config(field_name="version") ) @@ -15933,17 +15825,17 @@ class IngressStoppedEvent(DataClassJsonMixin): @dataclass class IngressVideoEncodingOptions(DataClassJsonMixin): - layers: "List[IngressVideoLayer]" = dc_field( + layers: "list[IngressVideoLayer]" = dc_field( metadata=dc_config(field_name="layers") ) - source: "Optional[IngressSource]" = dc_field( + source: "IngressSource | None" = dc_field( default=None, metadata=dc_config(field_name="source") ) @dataclass class IngressVideoEncodingOptionsRequest(DataClassJsonMixin): - layers: "List[IngressVideoLayerRequest]" = dc_field( + layers: "list[IngressVideoLayerRequest]" = dc_field( metadata=dc_config(field_name="layers") ) source: "IngressSourceRequest" = dc_field(metadata=dc_config(field_name="source")) @@ -15951,7 +15843,7 @@ class IngressVideoEncodingOptionsRequest(DataClassJsonMixin): @dataclass class IngressVideoEncodingResponse(DataClassJsonMixin): - layers: "List[IngressVideoLayerResponse]" = dc_field( + layers: "list[IngressVideoLayerResponse]" = dc_field( metadata=dc_config(field_name="layers") ) source: "IngressSourceResponse" = dc_field(metadata=dc_config(field_name="source")) @@ -15997,19 +15889,17 @@ class InsertActionLogRequest(DataClassJsonMixin): # Type of entity the action was taken on entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) # Reason for the action - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) # Type of reporter; 'api_integration' when the action was triggered by an API integration call with no authenticated user - reporter_type: Optional[str] = dc_field( + reporter_type: str | None = dc_field( default=None, metadata=dc_config(field_name="reporter_type") ) # ID of the user who triggered the action; empty for automated actions - reporter_user_id: Optional[str] = dc_field( + reporter_user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="reporter_user_id") ) # Custom metadata for the action log - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -16031,7 +15921,7 @@ class InterestTagResponse(DataClassJsonMixin): class JoinCallAPIMetrics(DataClassJsonMixin): failures: float = dc_field(metadata=dc_config(field_name="failures")) total: float = dc_field(metadata=dc_config(field_name="total")) - latency: "Optional[ActiveCallsLatencyStats]" = dc_field( + latency: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="latency") ) @@ -16039,45 +15929,45 @@ class JoinCallAPIMetrics(DataClassJsonMixin): @dataclass class Joins(DataClassJsonMixin): reason: str = dc_field(metadata=dc_config(field_name="reason")) - disconnect_reasons: "Dict[str, int]" = dc_field( + disconnect_reasons: "dict[str, int]" = dc_field( metadata=dc_config(field_name="disconnect_reasons") ) - failure_stages: "Dict[str, int]" = dc_field( + failure_stages: "dict[str, int]" = dc_field( metadata=dc_config(field_name="failure_stages") ) - join_attempts: Optional[int] = dc_field( + join_attempts: int | None = dc_field( default=None, metadata=dc_config(field_name="join_attempts") ) - join_success_rate: Optional[float] = dc_field( + join_success_rate: float | None = dc_field( default=None, metadata=dc_config(field_name="join_success_rate") ) @dataclass class KeyframeOCRRuleParameters(DataClassJsonMixin): - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) @dataclass class KeyframeRuleParameters(DataClassJsonMixin): - min_confidence: Optional[float] = dc_field( + min_confidence: float | None = dc_field( default=None, metadata=dc_config(field_name="min_confidence") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) @@ -16087,15 +15977,13 @@ class KickUserRequest(DataClassJsonMixin): # The user to kick user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # If true, also block the user from rejoining the call - block: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="block") - ) + block: bool | None = dc_field(default=None, metadata=dc_config(field_name="block")) # Server-side: ID of the user performing the action - kicked_by_id: Optional[str] = dc_field( + kicked_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="kicked_by_id") ) # User request object - kicked_by: "Optional[UserRequest]" = dc_field( + kicked_by: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="kicked_by") ) @@ -16124,26 +16012,24 @@ class KickedUserEvent(DataClassJsonMixin): default="call.kicked_user", metadata=dc_config(field_name="type") ) # User response object - kicked_by_user: "Optional[UserResponse]" = dc_field( + kicked_by_user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="kicked_by_user") ) @dataclass class LLMConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - app_context: Optional[str] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + app_context: str | None = dc_field( default=None, metadata=dc_config(field_name="app_context") ) - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - rules: "Optional[List[LLMRule]]" = dc_field( + rules: "list[LLMRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) - severity_descriptions: "Optional[Dict[str, str]]" = dc_field( + severity_descriptions: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="severity_descriptions") ) @@ -16151,13 +16037,11 @@ class LLMConfig(DataClassJsonMixin): @dataclass class LLMRule(DataClassJsonMixin): label: str = dc_field(metadata=dc_config(field_name="label")) - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") - ) - description: Optional[str] = dc_field( + action: str | None = dc_field(default=None, metadata=dc_config(field_name="action")) + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - severity_rules: "Optional[List[BodyguardSeverityRule]]" = dc_field( + severity_rules: "list[BodyguardSeverityRule] | None" = dc_field( default=None, metadata=dc_config(field_name="severity_rules") ) @@ -16165,10 +16049,10 @@ class LLMRule(DataClassJsonMixin): @dataclass class LabelResponse(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) - phrase_list_ids: "Optional[List[int]]" = dc_field( + phrase_list_ids: "list[int] | None" = dc_field( default=None, metadata=dc_config(field_name="phrase_list_ids") ) @@ -16202,28 +16086,26 @@ class LabelResultResponse(DataClassJsonMixin): # Severity level severity: str = dc_field(metadata=dc_config(field_name="severity")) # Moderation labels - labels: List[str] = dc_field(metadata=dc_config(field_name="labels")) + labels: list[str] = dc_field(metadata=dc_config(field_name="labels")) # Customer-supplied identifier for the moderated content - content_id: Optional[str] = dc_field( + content_id: str | None = dc_field( default=None, metadata=dc_config(field_name="content_id") ) # Who the content is directed at (USER, GROUP, EVERYONE, NONE, etc.) - directed_at: Optional[str] = dc_field( + directed_at: str | None = dc_field( default=None, metadata=dc_config(field_name="directed_at") ) # The stored content with every non-whitespace character masked. Present only when recommended_action is not 'keep'. Derived at runtime and never stored. - fully_masked_content: Optional[str] = dc_field( + fully_masked_content: str | None = dc_field( default=None, metadata=dc_config(field_name="fully_masked_content") ) # Content with blocklisted tokens masked (when a blocklist rule with action=mask rewrote the original) - masked_content: Optional[str] = dc_field( + masked_content: str | None = dc_field( default=None, metadata=dc_config(field_name="masked_content") ) - policy: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="policy") - ) + policy: str | None = dc_field(default=None, metadata=dc_config(field_name="policy")) # Customer-supplied user identifier for the content author - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) @@ -16231,13 +16113,9 @@ class LabelResultResponse(DataClassJsonMixin): @dataclass class LabelThresholds(DataClassJsonMixin): # Threshold for automatic message block - block: Optional[float] = dc_field( - default=None, metadata=dc_config(field_name="block") - ) + block: float | None = dc_field(default=None, metadata=dc_config(field_name="block")) # Threshold for automatic message flag - flag: Optional[float] = dc_field( - default=None, metadata=dc_config(field_name="flag") - ) + flag: float | None = dc_field(default=None, metadata=dc_config(field_name="flag")) @dataclass @@ -16245,27 +16123,25 @@ class LabelsRequest(DataClassJsonMixin): # Content to moderate content: str = dc_field(metadata=dc_config(field_name="content")) # Optional category for filtering (max 128 chars) - category: Optional[str] = dc_field( + category: str | None = dc_field( default=None, metadata=dc_config(field_name="category") ) # Customer-supplied identifier for the moderated content, for tracing - content_id: Optional[str] = dc_field( + content_id: str | None = dc_field( default=None, metadata=dc_config(field_name="content_id") ) # Type of content: 'text' (default), 'message', or 'username'. Stored as-sent; only 'username' routes to the username moderation API. - content_type: Optional[str] = dc_field( + content_type: str | None = dc_field( default=None, metadata=dc_config(field_name="content_type") ) # When true, run moderation and return labels without persisting the result. Useful for one-off checks (e.g. UI testers) that should not be recorded in the stored history. - dry_run: Optional[bool] = dc_field( + dry_run: bool | None = dc_field( default=None, metadata=dc_config(field_name="dry_run") ) # Optional moderation policy key (max 128 chars). For username moderation, set this to a policy whose key starts with 'username:' (e.g. 'username:default') to opt into the low-latency fast-path: blocklists (customer + Stream-managed defaults) short-circuit the LLM, and the LLM fallback uses gpt-4.1-nano with a 24h Valkey verdict cache. Without a 'username:' prefix the request falls through to the standard Bodyguard Analyze v1 username path. - policy: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="policy") - ) + policy: str | None = dc_field(default=None, metadata=dc_config(field_name="policy")) # Optional customer-supplied user identifier for the content author (max 256 chars). Enables filtering stored results by user_id. - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) @@ -16278,35 +16154,35 @@ class LabelsResponse(DataClassJsonMixin): metadata=dc_config(field_name="recommended_action") ) # Customer-supplied identifier for the moderated content, for tracing - content_id: Optional[str] = dc_field( + content_id: str | None = dc_field( default=None, metadata=dc_config(field_name="content_id") ) # Who the content is directed at (USER, GROUP, EVERYONE, NONE, etc.), when the provider exposes it - directed_at: Optional[str] = dc_field( + directed_at: str | None = dc_field( default=None, metadata=dc_config(field_name="directed_at") ) # The original content with every non-whitespace character masked. Present only when recommended_action is not 'keep'. Derived at runtime and never stored. - fully_masked_content: Optional[str] = dc_field( + fully_masked_content: str | None = dc_field( default=None, metadata=dc_config(field_name="fully_masked_content") ) # High-level harm category - harm_type: Optional[str] = dc_field( + harm_type: str | None = dc_field( default=None, metadata=dc_config(field_name="harm_type") ) # Detected language - language: Optional[str] = dc_field( + language: str | None = dc_field( default=None, metadata=dc_config(field_name="language") ) # Content with blocklisted tokens masked or substituted. Present only when a blocklist rewrote the original content. - masked_content: Optional[str] = dc_field( + masked_content: str | None = dc_field( default=None, metadata=dc_config(field_name="masked_content") ) # Severity level - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) # Moderation labels detected - labels: Optional[List[str]] = dc_field( + labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="labels") ) @@ -16316,10 +16192,10 @@ class LayoutSettings(DataClassJsonMixin): external_app_url: str = dc_field(metadata=dc_config(field_name="external_app_url")) external_css_url: str = dc_field(metadata=dc_config(field_name="external_css_url")) name: str = dc_field(metadata=dc_config(field_name="name")) - detect_orientation: Optional[bool] = dc_field( + detect_orientation: bool | None = dc_field( default=None, metadata=dc_config(field_name="detect_orientation") ) - options: Optional[Dict[str, object]] = dc_field( + options: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="options") ) @@ -16327,16 +16203,16 @@ class LayoutSettings(DataClassJsonMixin): @dataclass class LayoutSettingsRequest(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) - detect_orientation: Optional[bool] = dc_field( + detect_orientation: bool | None = dc_field( default=None, metadata=dc_config(field_name="detect_orientation") ) - external_app_url: Optional[str] = dc_field( + external_app_url: str | None = dc_field( default=None, metadata=dc_config(field_name="external_app_url") ) - external_css_url: Optional[str] = dc_field( + external_css_url: str | None = dc_field( default=None, metadata=dc_config(field_name="external_css_url") ) - options: Optional[Dict[str, object]] = dc_field( + options: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="options") ) @@ -16346,10 +16222,10 @@ class LayoutSettingsResponse(DataClassJsonMixin): external_app_url: str = dc_field(metadata=dc_config(field_name="external_app_url")) external_css_url: str = dc_field(metadata=dc_config(field_name="external_css_url")) name: str = dc_field(metadata=dc_config(field_name="name")) - detect_orientation: Optional[bool] = dc_field( + detect_orientation: bool | None = dc_field( default=None, metadata=dc_config(field_name="detect_orientation") ) - options: Optional[Dict[str, object]] = dc_field( + options: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="options") ) @@ -16366,48 +16242,48 @@ class LimitInfoResponse(DataClassJsonMixin): @dataclass class LimitsSettings(DataClassJsonMixin): - max_participants_exclude_roles: List[str] = dc_field( + max_participants_exclude_roles: list[str] = dc_field( metadata=dc_config(field_name="max_participants_exclude_roles") ) - max_duration_seconds: Optional[int] = dc_field( + max_duration_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="max_duration_seconds") ) - max_participants: Optional[int] = dc_field( + max_participants: int | None = dc_field( default=None, metadata=dc_config(field_name="max_participants") ) - max_participants_exclude_owner: Optional[bool] = dc_field( + max_participants_exclude_owner: bool | None = dc_field( default=None, metadata=dc_config(field_name="max_participants_exclude_owner") ) @dataclass class LimitsSettingsRequest(DataClassJsonMixin): - max_duration_seconds: Optional[int] = dc_field( + max_duration_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="max_duration_seconds") ) - max_participants: Optional[int] = dc_field( + max_participants: int | None = dc_field( default=None, metadata=dc_config(field_name="max_participants") ) - max_participants_exclude_owner: Optional[bool] = dc_field( + max_participants_exclude_owner: bool | None = dc_field( default=None, metadata=dc_config(field_name="max_participants_exclude_owner") ) - max_participants_exclude_roles: Optional[List[str]] = dc_field( + max_participants_exclude_roles: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="max_participants_exclude_roles") ) @dataclass class LimitsSettingsResponse(DataClassJsonMixin): - max_participants_exclude_roles: List[str] = dc_field( + max_participants_exclude_roles: list[str] = dc_field( metadata=dc_config(field_name="max_participants_exclude_roles") ) - max_duration_seconds: Optional[int] = dc_field( + max_duration_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="max_duration_seconds") ) - max_participants: Optional[int] = dc_field( + max_participants: int | None = dc_field( default=None, metadata=dc_config(field_name="max_participants") ) - max_participants_exclude_owner: Optional[bool] = dc_field( + max_participants_exclude_owner: bool | None = dc_field( default=None, metadata=dc_config(field_name="max_participants_exclude_owner") ) @@ -16416,10 +16292,10 @@ class LimitsSettingsResponse(DataClassJsonMixin): class ListBlockListResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - blocklists: "List[BlockListResponse]" = dc_field( + blocklists: "list[BlockListResponse]" = dc_field( metadata=dc_config(field_name="blocklists") ) - next_cursor: Optional[str] = dc_field( + next_cursor: str | None = dc_field( default=None, metadata=dc_config(field_name="next_cursor") ) @@ -16427,7 +16303,7 @@ class ListBlockListResponse(DataClassJsonMixin): @dataclass class ListCallTypeResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - call_types: "Dict[str, CallTypeResponse]" = dc_field( + call_types: "dict[str, CallTypeResponse]" = dc_field( metadata=dc_config(field_name="call_types") ) @@ -16436,7 +16312,7 @@ class ListCallTypeResponse(DataClassJsonMixin): class ListChannelTypesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Object with all channel types - channel_types: "Dict[str, Optional[ChannelTypeConfig]]" = dc_field( + channel_types: "dict[str, ChannelTypeConfig | None]" = dc_field( metadata=dc_config(field_name="channel_types") ) @@ -16445,21 +16321,21 @@ class ListChannelTypesResponse(DataClassJsonMixin): class ListCommandsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of commands - commands: "List[Command]" = dc_field(metadata=dc_config(field_name="commands")) + commands: "list[Command]" = dc_field(metadata=dc_config(field_name="commands")) @dataclass class ListDevicesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of devices - devices: "List[DeviceResponse]" = dc_field(metadata=dc_config(field_name="devices")) + devices: "list[DeviceResponse]" = dc_field(metadata=dc_config(field_name="devices")) @dataclass class ListExternalStorageResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - external_storages: "Dict[str, ExternalStorageResponse]" = dc_field( + external_storages: "dict[str, ExternalStorageResponse]" = dc_field( metadata=dc_config(field_name="external_storages") ) @@ -16468,7 +16344,7 @@ class ListExternalStorageResponse(DataClassJsonMixin): class ListFeedGroupsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - groups: "Dict[str, FeedGroupResponse]" = dc_field( + groups: "dict[str, FeedGroupResponse]" = dc_field( metadata=dc_config(field_name="groups") ) @@ -16477,7 +16353,7 @@ class ListFeedGroupsResponse(DataClassJsonMixin): class ListFeedViewsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Map of feed view ID to feed view - views: "Dict[str, FeedViewResponse]" = dc_field( + views: "dict[str, FeedViewResponse]" = dc_field( metadata=dc_config(field_name="views") ) @@ -16486,7 +16362,7 @@ class ListFeedViewsResponse(DataClassJsonMixin): class ListFeedVisibilitiesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Map of feed visibility configurations by name - feed_visibilities: "Dict[str, FeedVisibilityResponse]" = dc_field( + feed_visibilities: "dict[str, FeedVisibilityResponse]" = dc_field( metadata=dc_config(field_name="feed_visibilities") ) @@ -16495,18 +16371,18 @@ class ListFeedVisibilitiesResponse(DataClassJsonMixin): class ListImportV2TasksResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - import_tasks: "List[ImportV2TaskItem]" = dc_field( + import_tasks: "list[ImportV2TaskItem]" = dc_field( metadata=dc_config(field_name="import_tasks") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class ListImportsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - import_tasks: "List[ImportTask]" = dc_field( + import_tasks: "list[ImportTask]" = dc_field( metadata=dc_config(field_name="import_tasks") ) @@ -16515,7 +16391,7 @@ class ListImportsResponse(DataClassJsonMixin): class ListPermissionsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - permissions: "List[Permission]" = dc_field( + permissions: "list[Permission]" = dc_field( metadata=dc_config(field_name="permissions") ) @@ -16524,7 +16400,7 @@ class ListPermissionsResponse(DataClassJsonMixin): class ListPushProvidersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - push_providers: "List[PushProviderResponse]" = dc_field( + push_providers: "list[PushProviderResponse]" = dc_field( metadata=dc_config(field_name="push_providers") ) @@ -16533,7 +16409,7 @@ class ListPushProvidersResponse(DataClassJsonMixin): class ListQueuesResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - queues: "List[ModerationQueueResponse]" = dc_field( + queues: "list[ModerationQueueResponse]" = dc_field( metadata=dc_config(field_name="queues") ) @@ -16541,7 +16417,7 @@ class ListQueuesResponse(DataClassJsonMixin): @dataclass class ListRecordingsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - recordings: "List[CallRecording]" = dc_field( + recordings: "list[CallRecording]" = dc_field( metadata=dc_config(field_name="recordings") ) @@ -16550,14 +16426,14 @@ class ListRecordingsResponse(DataClassJsonMixin): class ListRolesResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - roles: "List[Role]" = dc_field(metadata=dc_config(field_name="roles")) + roles: "list[Role]" = dc_field(metadata=dc_config(field_name="roles")) @dataclass class ListSIPInboundRoutingRuleResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of SIP Inbound Routing Rules for the application - sip_inbound_routing_rules: "List[SIPInboundRoutingRuleResponse]" = dc_field( + sip_inbound_routing_rules: "list[SIPInboundRoutingRuleResponse]" = dc_field( metadata=dc_config(field_name="sip_inbound_routing_rules") ) @@ -16566,7 +16442,7 @@ class ListSIPInboundRoutingRuleResponse(DataClassJsonMixin): class ListSIPTrunksResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of SIP trunks for the application - sip_trunks: "List[SIPTrunkResponse]" = dc_field( + sip_trunks: "list[SIPTrunkResponse]" = dc_field( metadata=dc_config(field_name="sip_trunks") ) @@ -16575,7 +16451,7 @@ class ListSIPTrunksResponse(DataClassJsonMixin): class ListTranscriptionsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of transcriptions for the call - transcriptions: "List[CallTranscription]" = dc_field( + transcriptions: "list[CallTranscription]" = dc_field( metadata=dc_config(field_name="transcriptions") ) @@ -16584,7 +16460,7 @@ class ListTranscriptionsResponse(DataClassJsonMixin): class ListUserGroupsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of user groups - user_groups: "List[UserGroupResponse]" = dc_field( + user_groups: "list[UserGroupResponse]" = dc_field( metadata=dc_config(field_name="user_groups") ) @@ -16612,52 +16488,52 @@ class LocationResponse(DataClassJsonMixin): @dataclass class MarkActivityRequest(DataClassJsonMixin): # Whether to mark all activities as read - mark_all_read: Optional[bool] = dc_field( + mark_all_read: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_all_read") ) # Whether to mark all activities as seen - mark_all_seen: Optional[bool] = dc_field( + mark_all_seen: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_all_seen") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # List of activity IDs to mark as read - mark_read: Optional[List[str]] = dc_field( + mark_read: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mark_read") ) # List of activity IDs to mark as seen - mark_seen: Optional[List[str]] = dc_field( + mark_seen: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mark_seen") ) # List of activity IDs to mark as watched (for stories) - mark_watched: Optional[List[str]] = dc_field( + mark_watched: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mark_watched") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class MarkChannelsReadRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Map of channel ID to last read message ID - read_by_channel: "Optional[Dict[str, str]]" = dc_field( + read_by_channel: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="read_by_channel") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class MarkDeliveredRequest(DataClassJsonMixin): - latest_delivered_messages: "Optional[List[DeliveredMessagePayload]]" = dc_field( + latest_delivered_messages: "list[DeliveredMessagePayload] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_delivered_messages") ) @@ -16671,18 +16547,18 @@ class MarkDeliveredResponse(DataClassJsonMixin): @dataclass class MarkReadRequest(DataClassJsonMixin): # ID of the message that is considered last read by client - message_id: Optional[str] = dc_field( + message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="message_id") ) # Optional Thread ID to specifically mark a given thread as read - thread_id: Optional[str] = dc_field( + thread_id: str | None = dc_field( default=None, metadata=dc_config(field_name="thread_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -16691,7 +16567,7 @@ class MarkReadRequest(DataClassJsonMixin): class MarkReadResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - event: "Optional[MarkReadResponseEvent]" = dc_field( + event: "MarkReadResponseEvent | None" = dc_field( default=None, metadata=dc_config(field_name="event") ) @@ -16710,7 +16586,7 @@ class MarkReadResponseEvent(DataClassJsonMixin): ) ) type: str = dc_field(metadata=dc_config(field_name="type")) - channel_last_message_at: Optional[datetime] = dc_field( + channel_last_message_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="channel_last_message_at", @@ -16719,18 +16595,18 @@ class MarkReadResponseEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - last_read_message_id: Optional[str] = dc_field( + last_read_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="last_read_message_id") ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) - thread: "Optional[ThreadResponse]" = dc_field( + thread: "ThreadResponse | None" = dc_field( default=None, metadata=dc_config(field_name="thread") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -16738,15 +16614,15 @@ class MarkReadResponseEvent(DataClassJsonMixin): @dataclass class MarkReviewedRequestPayload(DataClassJsonMixin): # Maximum content items to mark as reviewed - content_to_mark_as_reviewed_limit: Optional[int] = dc_field( + content_to_mark_as_reviewed_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="content_to_mark_as_reviewed_limit") ) # Reason for the appeal decision - decision_reason: Optional[str] = dc_field( + decision_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="decision_reason") ) # Skip marking content as reviewed - disable_marking_content_as_reviewed: Optional[bool] = dc_field( + disable_marking_content_as_reviewed: bool | None = dc_field( default=None, metadata=dc_config(field_name="disable_marking_content_as_reviewed"), ) @@ -16755,11 +16631,11 @@ class MarkReviewedRequestPayload(DataClassJsonMixin): @dataclass class MarkUnreadRequest(DataClassJsonMixin): # ID of the message from where the channel is marked unread - message_id: Optional[str] = dc_field( + message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="message_id") ) # Timestamp of the message from where the channel is marked unread - message_timestamp: Optional[datetime] = dc_field( + message_timestamp: datetime | None = dc_field( default=None, metadata=dc_config( field_name="message_timestamp", @@ -16769,14 +16645,14 @@ class MarkUnreadRequest(DataClassJsonMixin): ), ) # Mark a thread unread, specify one of the thread, message timestamp, or message id - thread_id: Optional[str] = dc_field( + thread_id: str | None = dc_field( default=None, metadata=dc_config(field_name="thread_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -16797,20 +16673,20 @@ class MatchedContent(DataClassJsonMixin): # Content type that contributed this entry: `image` or `text`. type: str = dc_field(metadata=dc_config(field_name="type")) # Image-classification entries only. Aggregate (max) confidence score across the entry's classifications + sub-classifications. Absent on text and OCR entries. - confidence: Optional[float] = dc_field( + confidence: float | None = dc_field( default=None, metadata=dc_config(field_name="confidence") ) # Text and OCR entries. Aggregate (max) Bodyguard severity level (`LOW` / `MEDIUM` / `HIGH` / `CRITICAL`). Absent on image-classification entries. - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) # Image-classification entries (keyframe rule, Type=image) carry nested L1 → L2 classifications. Text entries (closed_caption rule, Type=text) carry flat label + severity. Resolved against the app's effective taxonomy on the image side. - classifications: "Optional[List[Classification]]" = dc_field( + classifications: "list[Classification] | None" = dc_field( default=None, metadata=dc_config(field_name="classifications") ) # OCR entries only (keyframe_ocr rule, Type=image). Bodyguard labels that fired against the keyframe's OCR-extracted text (e.g. `INSULT`, `HATE_SPEECH`). Distinct from `classifications` so consumers can route OCR matches separately from image-classification matches. - ocr_classifications: "Optional[List[Classification]]" = dc_field( + ocr_classifications: "list[Classification] | None" = dc_field( default=None, metadata=dc_config(field_name="ocr_classifications") ) @@ -16825,11 +16701,11 @@ class MaxStreakChangedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="channel.max_streak_changed", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -16853,29 +16729,29 @@ class MemberAddedEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) member: "ChannelMemberResponse" = dc_field(metadata=dc_config(field_name="member")) # The type of event: "member.added" in this case type: str = dc_field(default="member.added", metadata=dc_config(field_name="type")) # The ID of the channel to which the member was added - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel to which the member was added - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel to which the member was added - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -16885,11 +16761,11 @@ class MemberAddedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -16907,31 +16783,31 @@ class MemberRemovedEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) member: "ChannelMemberResponse" = dc_field(metadata=dc_config(field_name="member")) # The type of event: "member.removed" in this case type: str = dc_field( default="member.removed", metadata=dc_config(field_name="type") ) # The ID of the channel from which the member was removed - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel from which the member was removed - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel from which the member was removed - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -16941,11 +16817,11 @@ class MemberRemovedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -16953,9 +16829,9 @@ class MemberRemovedEvent(DataClassJsonMixin): @dataclass class MemberRequest(DataClassJsonMixin): user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - role: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="role")) + role: str | None = dc_field(default=None, metadata=dc_config(field_name="role")) # Custom data for this object - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -16982,11 +16858,11 @@ class MemberResponse(DataClassJsonMixin): ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Custom member response data - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # Date/time of deletion - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -16995,7 +16871,7 @@ class MemberResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - role: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="role")) + role: str | None = dc_field(default=None, metadata=dc_config(field_name="role")) @dataclass @@ -17011,31 +16887,31 @@ class MemberUpdatedEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) member: "ChannelMemberResponse" = dc_field(metadata=dc_config(field_name="member")) # The type of event: "member.updated" in this case type: str = dc_field( default="member.updated", metadata=dc_config(field_name="type") ) # The ID of the channel in which the member was updated - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel in which the member was updated - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel in which the member was updated - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -17045,11 +16921,11 @@ class MemberUpdatedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -17059,7 +16935,7 @@ class MembersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of found members - members: "List[ChannelMemberResponse]" = dc_field( + members: "list[ChannelMemberResponse]" = dc_field( metadata=dc_config(field_name="members") ) @@ -17091,13 +16967,13 @@ class MembershipLevelResponse(DataClassJsonMixin): ) ) # Activity tags this membership level gives access to - tags: List[str] = dc_field(metadata=dc_config(field_name="tags")) + tags: list[str] = dc_field(metadata=dc_config(field_name="tags")) # Description of the membership level - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Custom data for the membership level - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -17105,12 +16981,12 @@ class MembershipLevelResponse(DataClassJsonMixin): @dataclass class MessageActionRequest(DataClassJsonMixin): # ReadOnlyData to execute command with - form_data: "Dict[str, str]" = dc_field(metadata=dc_config(field_name="form_data")) - user_id: Optional[str] = dc_field( + form_data: "dict[str, str]" = dc_field(metadata=dc_config(field_name="form_data")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -17120,7 +16996,7 @@ class MessageActionResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @@ -17156,7 +17032,7 @@ class MessageDeletedEvent(DataClassJsonMixin): # Whether the message was hard deleted hard_delete: bool = dc_field(metadata=dc_config(field_name="hard_delete")) message_id: str = dc_field(metadata=dc_config(field_name="message_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) # The type of event: "message.deleted" in this case @@ -17164,28 +17040,28 @@ class MessageDeletedEvent(DataClassJsonMixin): default="message.deleted", metadata=dc_config(field_name="type") ) # The ID of the channel where the message was sent - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the message was sent - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the message was sent - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) # Whether the message was deleted only for the current user - deleted_for_me: Optional[bool] = dc_field( + deleted_for_me: bool | None = dc_field( default=None, metadata=dc_config(field_name="deleted_for_me") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -17195,11 +17071,11 @@ class MessageDeletedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -17225,7 +17101,7 @@ class MessageFlagResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - approved_at: Optional[datetime] = dc_field( + approved_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="approved_at", @@ -17234,10 +17110,8 @@ class MessageFlagResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - rejected_at: Optional[datetime] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + rejected_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="rejected_at", @@ -17246,7 +17120,7 @@ class MessageFlagResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reviewed_at: Optional[datetime] = dc_field( + reviewed_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="reviewed_at", @@ -17255,29 +17129,29 @@ class MessageFlagResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - details: "Optional[FlagDetailsResponse]" = dc_field( + details: "FlagDetailsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="details") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) - moderation_feedback: "Optional[FlagFeedbackResponse]" = dc_field( + moderation_feedback: "FlagFeedbackResponse | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_feedback") ) # Result of the message moderation - moderation_result: "Optional[MessageModerationResult]" = dc_field( + moderation_result: "MessageModerationResult | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_result") ) # User response object - reviewed_by: "Optional[UserResponse]" = dc_field( + reviewed_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="reviewed_by") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -17301,28 +17175,26 @@ class MessageFlaggedEvent(DataClassJsonMixin): default="message.flagged", metadata=dc_config(field_name="type") ) # The ID of the channel where the message was sent - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the message was sent - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the message was sent - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) # The reason for the flag - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - received_at: Optional[datetime] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -17332,26 +17204,26 @@ class MessageFlaggedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # The total number of flags for the user - total_flags: Optional[int] = dc_field( + total_flags: int | None = dc_field( default=None, metadata=dc_config(field_name="total_flags") ) - channel_custom: Optional[Dict[str, object]] = dc_field( + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) # Custom data - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # Result of the message moderation - details: "Optional[MessageModerationResult]" = dc_field( + details: "MessageModerationResult | None" = dc_field( default=None, metadata=dc_config(field_name="details") ) - flag: "Optional[FlagResponse]" = dc_field( + flag: "FlagResponse | None" = dc_field( default=None, metadata=dc_config(field_name="flag") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -17372,10 +17244,10 @@ class MessageHistoryEntryResponse(DataClassJsonMixin): metadata=dc_config(field_name="message_updated_by_id") ) text: str = dc_field(metadata=dc_config(field_name="text")) - attachments: "List[Attachment]" = dc_field( + attachments: "list[Attachment]" = dc_field( metadata=dc_config(field_name="attachments") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) @dataclass @@ -17407,22 +17279,22 @@ class MessageModerationResult(DataClassJsonMixin): # Karma of the user user_karma: float = dc_field(metadata=dc_config(field_name="user_karma")) # Word that was blocked - blocked_word: Optional[str] = dc_field( + blocked_word: str | None = dc_field( default=None, metadata=dc_config(field_name="blocked_word") ) # Name of the blocklist - blocklist_name: Optional[str] = dc_field( + blocklist_name: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_name") ) # User who moderated the message - moderated_by: Optional[str] = dc_field( + moderated_by: str | None = dc_field( default=None, metadata=dc_config(field_name="moderated_by") ) - ai_moderation_response: "Optional[ModerationResponse]" = dc_field( + ai_moderation_response: "ModerationResponse | None" = dc_field( default=None, metadata=dc_config(field_name="ai_moderation_response") ) # Sets thresholds for AI moderation - moderation_thresholds: "Optional[Thresholds]" = dc_field( + moderation_thresholds: "Thresholds | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_thresholds") ) @@ -17441,34 +17313,34 @@ class MessageNewEvent(DataClassJsonMixin): message_id: str = dc_field(metadata=dc_config(field_name="message_id")) # The number of watchers watcher_count: int = dc_field(metadata=dc_config(field_name="watcher_count")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) # The type of event: "message.new" in this case type: str = dc_field(default="message.new", metadata=dc_config(field_name="type")) # The ID of the channel where the message was sent - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the message was sent - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the message was sent - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) # The author of the parent message - parent_author: Optional[str] = dc_field( + parent_author: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_author") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -17478,42 +17350,42 @@ class MessageNewEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - total_unread_count: Optional[int] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + total_unread_count: int | None = dc_field( default=None, metadata=dc_config(field_name="total_unread_count") ) - unread_channels: Optional[int] = dc_field( + unread_channels: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_channels") ) # The number of unread messages - unread_count: Optional[int] = dc_field( + unread_count: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_count") ) # The participants of the thread - thread_participants: "Optional[List[UserResponseCommonFields]]" = dc_field( + thread_participants: "list[UserResponseCommonFields] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) - channel_custom: Optional[Dict[str, object]] = dc_field( + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - grouped_unread_channels: "Optional[Dict[str, int]]" = dc_field( + grouped_unread_channels: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="grouped_unread_channels") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class MessageOptions(DataClassJsonMixin): - include_thread_participants: Optional[bool] = dc_field( + include_thread_participants: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_thread_participants") ) - member_custom_include: Optional[List[str]] = dc_field( + member_custom_include: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="member_custom_include") ) @@ -17521,7 +17393,7 @@ class MessageOptions(DataClassJsonMixin): @dataclass class MessagePaginationParams(DataClassJsonMixin): # The timestamp to get messages with a created_at timestamp greater than - created_at_after: Optional[datetime] = dc_field( + created_at_after: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at_after", @@ -17531,7 +17403,7 @@ class MessagePaginationParams(DataClassJsonMixin): ), ) # The timestamp to get messages with a created_at timestamp greater than or equal to - created_at_after_or_equal: Optional[datetime] = dc_field( + created_at_after_or_equal: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at_after_or_equal", @@ -17541,7 +17413,7 @@ class MessagePaginationParams(DataClassJsonMixin): ), ) # The result will be a set of messages, that are both older and newer than the created_at timestamp provided, distributed evenly around the timestamp - created_at_around: Optional[datetime] = dc_field( + created_at_around: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at_around", @@ -17551,7 +17423,7 @@ class MessagePaginationParams(DataClassJsonMixin): ), ) # The timestamp to get messages with a created_at timestamp smaller than - created_at_before: Optional[datetime] = dc_field( + created_at_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at_before", @@ -17561,7 +17433,7 @@ class MessagePaginationParams(DataClassJsonMixin): ), ) # The timestamp to get messages with a created_at timestamp smaller than or equal to - created_at_before_or_equal: Optional[datetime] = dc_field( + created_at_before_or_equal: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at_before_or_equal", @@ -17571,29 +17443,19 @@ class MessagePaginationParams(DataClassJsonMixin): ), ) # The result will be a set of messages, that are both older and newer than the message with the provided ID, and the message with the ID provided will be in the middle of the set - id_around: Optional[str] = dc_field( + id_around: str | None = dc_field( default=None, metadata=dc_config(field_name="id_around") ) # The ID of the message to get messages with a timestamp greater than - id_gt: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="id_gt") - ) + id_gt: str | None = dc_field(default=None, metadata=dc_config(field_name="id_gt")) # The ID of the message to get messages with a timestamp greater than or equal to - id_gte: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="id_gte") - ) + id_gte: str | None = dc_field(default=None, metadata=dc_config(field_name="id_gte")) # The ID of the message to get messages with a timestamp smaller than - id_lt: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="id_lt") - ) + id_lt: str | None = dc_field(default=None, metadata=dc_config(field_name="id_lt")) # The ID of the message to get messages with a timestamp smaller than or equal to - id_lte: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="id_lte") - ) + id_lte: str | None = dc_field(default=None, metadata=dc_config(field_name="id_lte")) # The maximum number of messages to return (max limit - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) @dataclass @@ -17607,32 +17469,32 @@ class MessageReadEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "message.read" in this case type: str = dc_field(default="message.read", metadata=dc_config(field_name="type")) # The ID of the channel where the message was read - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the message was read - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the message was read - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) # The ID of the last read message - last_read_message_id: Optional[str] = dc_field( + last_read_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="last_read_message_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -17642,18 +17504,18 @@ class MessageReadEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) - channel_custom: Optional[Dict[str, object]] = dc_field( + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - thread: "Optional[ThreadResponse]" = dc_field( + thread: "ThreadResponse | None" = dc_field( default=None, metadata=dc_config(field_name="thread") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -17661,23 +17523,23 @@ class MessageReadEvent(DataClassJsonMixin): @dataclass class MessageRequest(DataClassJsonMixin): # Contains HTML markup of the message. Can only be set when using server-side API - html: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="html")) + html: str | None = dc_field(default=None, metadata=dc_config(field_name="html")) # Message ID is unique string identifier of the message - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - mentioned_channel: Optional[bool] = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + mentioned_channel: bool | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_channel") ) - mentioned_here: Optional[bool] = dc_field( + mentioned_here: bool | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_here") ) # Should be empty if `text` is provided. Can only be set when using server-side API - mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) + mml: str | None = dc_field(default=None, metadata=dc_config(field_name="mml")) # ID of parent message (thread) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # Date when pinned message expires - pin_expires: Optional[datetime] = dc_field( + pin_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pin_expires", @@ -17687,11 +17549,11 @@ class MessageRequest(DataClassJsonMixin): ), ) # Whether message is pinned or not - pinned: Optional[bool] = dc_field( + pinned: bool | None = dc_field( default=None, metadata=dc_config(field_name="pinned") ) # Date when message got pinned - pinned_at: Optional[datetime] = dc_field( + pinned_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pinned_at", @@ -17701,54 +17563,54 @@ class MessageRequest(DataClassJsonMixin): ), ) # Identifier of the poll to include in the message - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) - quoted_message_id: Optional[str] = dc_field( + quoted_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="quoted_message_id") ) # Whether thread reply should be shown in the channel as well - show_in_channel: Optional[bool] = dc_field( + show_in_channel: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_in_channel") ) # Whether message is silent or not - silent: Optional[bool] = dc_field( + silent: bool | None = dc_field( default=None, metadata=dc_config(field_name="silent") ) # Text of the message. Should be empty if `mml` is provided - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) # Contains type of the message. One of: regular, system - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - user_id: Optional[str] = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of message attachments - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # List of user group IDs to mention. Group members who are also channel members will receive push notifications. Max 10 groups - mentioned_group_ids: Optional[List[str]] = dc_field( + mentioned_group_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_group_ids") ) - mentioned_roles: Optional[List[str]] = dc_field( + mentioned_roles: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_roles") ) # Array of user IDs to mention - mentioned_users: Optional[List[str]] = dc_field( + mentioned_users: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_users") ) # A list of user ids that have restricted visibility to the message - restricted_visibility: Optional[List[str]] = dc_field( + restricted_visibility: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="restricted_visibility") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - shared_location: "Optional[SharedLocation]" = dc_field( + shared_location: "SharedLocation | None" = dc_field( default=None, metadata=dc_config(field_name="shared_location") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -17801,42 +17663,42 @@ class MessageResponse(DataClassJsonMixin): ) ) # Array of message attachments - attachments: "List[Attachment]" = dc_field( + attachments: "list[Attachment]" = dc_field( metadata=dc_config(field_name="attachments") ) # List of 10 latest reactions to this message - latest_reactions: "List[ReactionResponse]" = dc_field( + latest_reactions: "list[ReactionResponse]" = dc_field( metadata=dc_config(field_name="latest_reactions") ) # List of mentioned users - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) # List of 10 latest reactions of authenticated user to this message - own_reactions: "List[ReactionResponse]" = dc_field( + own_reactions: "list[ReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) # A list of user ids that have restricted visibility to the message, if the list is not empty, the message is only visible to the users in the list - restricted_visibility: List[str] = dc_field( + restricted_visibility: list[str] = dc_field( metadata=dc_config(field_name="restricted_visibility") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # An object containing number of reactions of each type. Key: reaction type (string), value: number of reactions (int) - reaction_counts: "Dict[str, int]" = dc_field( + reaction_counts: "dict[str, int]" = dc_field( metadata=dc_config(field_name="reaction_counts") ) # An object containing scores of reactions of each type. Key: reaction type (string), value: total score of reactions (int) - reaction_scores: "Dict[str, int]" = dc_field( + reaction_scores: "dict[str, int]" = dc_field( metadata=dc_config(field_name="reaction_scores") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # Contains provided slash command - command: Optional[str] = dc_field( + command: str | None = dc_field( default=None, metadata=dc_config(field_name="command") ) # Date/time of deletion - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -17845,10 +17707,10 @@ class MessageResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_for_me: Optional[bool] = dc_field( + deleted_for_me: bool | None = dc_field( default=None, metadata=dc_config(field_name="deleted_for_me") ) - message_text_updated_at: Optional[datetime] = dc_field( + message_text_updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="message_text_updated_at", @@ -17858,13 +17720,13 @@ class MessageResponse(DataClassJsonMixin): ), ) # Should be empty if `text` is provided. Can only be set when using server-side API - mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) + mml: str | None = dc_field(default=None, metadata=dc_config(field_name="mml")) # ID of parent message (thread) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # Date when pinned message expires - pin_expires: Optional[datetime] = dc_field( + pin_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pin_expires", @@ -17874,7 +17736,7 @@ class MessageResponse(DataClassJsonMixin): ), ) # Date when message got pinned - pinned_at: Optional[datetime] = dc_field( + pinned_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pinned_at", @@ -17884,74 +17746,74 @@ class MessageResponse(DataClassJsonMixin): ), ) # Identifier of the poll to include in the message - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) - quoted_message_id: Optional[str] = dc_field( + quoted_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="quoted_message_id") ) # Whether thread reply should be shown in the channel as well - show_in_channel: Optional[bool] = dc_field( + show_in_channel: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_in_channel") ) # List of user group IDs mentioned in the message. Group members who are also channel members will receive push notifications based on their push preferences. Max 10 groups - mentioned_group_ids: Optional[List[str]] = dc_field( + mentioned_group_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_group_ids") ) # List of mentioned user group objects. - mentioned_groups: "Optional[List[UserGroupResponse]]" = dc_field( + mentioned_groups: "list[UserGroupResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="mentioned_groups") ) # List of roles mentioned in the message (e.g. admin, channel_moderator, custom roles). Members with matching roles will receive push notifications based on their push preferences. Max 10 roles - mentioned_roles: Optional[List[str]] = dc_field( + mentioned_roles: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_roles") ) # List of users who participate in thread - thread_participants: "Optional[List[UserResponse]]" = dc_field( + thread_participants: "list[UserResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) - draft: "Optional[DraftResponse]" = dc_field( + draft: "DraftResponse | None" = dc_field( default=None, metadata=dc_config(field_name="draft") ) # Object with translations. Key `language` contains the original language key. Other keys contain translations - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) # Contains image moderation information - image_labels: "Optional[Dict[str, List[str]]]" = dc_field( + image_labels: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="image_labels") ) - member: "Optional[ChannelMemberPartialResponse]" = dc_field( + member: "ChannelMemberPartialResponse | None" = dc_field( default=None, metadata=dc_config(field_name="member") ) - moderation: "Optional[ModerationV2Response]" = dc_field( + moderation: "ModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) # User response object - pinned_by: "Optional[UserResponse]" = dc_field( + pinned_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="pinned_by") ) - poll: "Optional[PollResponseData]" = dc_field( + poll: "PollResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll") ) # Represents any chat message - quoted_message: "Optional[MessageResponse]" = dc_field( + quoted_message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="quoted_message") ) - reaction_groups: "Optional[Dict[str, Optional[ReactionGroupResponse]]]" = dc_field( + reaction_groups: "dict[str, ReactionGroupResponse | None] | None" = dc_field( default=None, metadata=dc_config(field_name="reaction_groups") ) - reminder: "Optional[ReminderResponseData]" = dc_field( + reminder: "ReminderResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="reminder") ) - shared_location: "Optional[SharedLocationResponseData]" = dc_field( + shared_location: "SharedLocationResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="shared_location") ) @dataclass class MessageStatsResponse(DataClassJsonMixin): - count_over_time: "Optional[List[CountByMinuteResponse]]" = dc_field( + count_over_time: "list[CountByMinuteResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="count_over_time") ) @@ -17968,7 +17830,7 @@ class MessageUnblockedEvent(DataClassJsonMixin): ) ) message_id: str = dc_field(metadata=dc_config(field_name="message_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) # The type of event: "message.unblocked" in this case @@ -17976,8 +17838,8 @@ class MessageUnblockedEvent(DataClassJsonMixin): default="message.unblocked", metadata=dc_config(field_name="type") ) # The CID of the channel where the message was unblocked - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -17986,7 +17848,7 @@ class MessageUnblockedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -18003,7 +17865,7 @@ class MessageUndeletedEvent(DataClassJsonMixin): ) ) message_id: str = dc_field(metadata=dc_config(field_name="message_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) # The type of event: "message.undeleted" in this case @@ -18011,24 +17873,24 @@ class MessageUndeletedEvent(DataClassJsonMixin): default="message.undeleted", metadata=dc_config(field_name="type") ) # The ID of the channel where the message was sent - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the message was sent - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the message was sent - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -18038,18 +17900,18 @@ class MessageUndeletedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) @dataclass class MessageUpdate(DataClassJsonMixin): - old_text: Optional[str] = dc_field( + old_text: str | None = dc_field( default=None, metadata=dc_config(field_name="old_text") ) - change_set: "Optional[MessageChangeSet]" = dc_field( + change_set: "MessageChangeSet | None" = dc_field( default=None, metadata=dc_config(field_name="change_set") ) @@ -18066,7 +17928,7 @@ class MessageUpdatedEvent(DataClassJsonMixin): ) ) message_id: str = dc_field(metadata=dc_config(field_name="message_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) # The type of event: "message.updated" in this case @@ -18074,24 +17936,24 @@ class MessageUpdatedEvent(DataClassJsonMixin): default="message.updated", metadata=dc_config(field_name="type") ) # The ID of the channel where the message was sent - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the message was sent - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the message was sent - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -18101,14 +17963,14 @@ class MessageUpdatedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - message_update: "Optional[MessageUpdate]" = dc_field( + message_update: "MessageUpdate | None" = dc_field( default=None, metadata=dc_config(field_name="message_update") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -18161,44 +18023,44 @@ class MessageWithChannelResponse(DataClassJsonMixin): ) ) # Array of message attachments - attachments: "List[Attachment]" = dc_field( + attachments: "list[Attachment]" = dc_field( metadata=dc_config(field_name="attachments") ) # List of 10 latest reactions to this message - latest_reactions: "List[ReactionResponse]" = dc_field( + latest_reactions: "list[ReactionResponse]" = dc_field( metadata=dc_config(field_name="latest_reactions") ) # List of mentioned users - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) # List of 10 latest reactions of authenticated user to this message - own_reactions: "List[ReactionResponse]" = dc_field( + own_reactions: "list[ReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) # A list of user ids that have restricted visibility to the message, if the list is not empty, the message is only visible to the users in the list - restricted_visibility: List[str] = dc_field( + restricted_visibility: list[str] = dc_field( metadata=dc_config(field_name="restricted_visibility") ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # An object containing number of reactions of each type. Key: reaction type (string), value: number of reactions (int) - reaction_counts: "Dict[str, int]" = dc_field( + reaction_counts: "dict[str, int]" = dc_field( metadata=dc_config(field_name="reaction_counts") ) # An object containing scores of reactions of each type. Key: reaction type (string), value: total score of reactions (int) - reaction_scores: "Dict[str, int]" = dc_field( + reaction_scores: "dict[str, int]" = dc_field( metadata=dc_config(field_name="reaction_scores") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # Contains provided slash command - command: Optional[str] = dc_field( + command: str | None = dc_field( default=None, metadata=dc_config(field_name="command") ) # Date/time of deletion - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -18207,10 +18069,10 @@ class MessageWithChannelResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_for_me: Optional[bool] = dc_field( + deleted_for_me: bool | None = dc_field( default=None, metadata=dc_config(field_name="deleted_for_me") ) - message_text_updated_at: Optional[datetime] = dc_field( + message_text_updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="message_text_updated_at", @@ -18220,13 +18082,13 @@ class MessageWithChannelResponse(DataClassJsonMixin): ), ) # Should be empty if `text` is provided. Can only be set when using server-side API - mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) + mml: str | None = dc_field(default=None, metadata=dc_config(field_name="mml")) # ID of parent message (thread) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) # Date when pinned message expires - pin_expires: Optional[datetime] = dc_field( + pin_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pin_expires", @@ -18236,7 +18098,7 @@ class MessageWithChannelResponse(DataClassJsonMixin): ), ) # Date when message got pinned - pinned_at: Optional[datetime] = dc_field( + pinned_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pinned_at", @@ -18246,67 +18108,67 @@ class MessageWithChannelResponse(DataClassJsonMixin): ), ) # Identifier of the poll to include in the message - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) - quoted_message_id: Optional[str] = dc_field( + quoted_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="quoted_message_id") ) # Whether thread reply should be shown in the channel as well - show_in_channel: Optional[bool] = dc_field( + show_in_channel: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_in_channel") ) # List of user group IDs mentioned in the message. Group members who are also channel members will receive push notifications based on their push preferences. Max 10 groups - mentioned_group_ids: Optional[List[str]] = dc_field( + mentioned_group_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_group_ids") ) # List of mentioned user group objects. - mentioned_groups: "Optional[List[UserGroupResponse]]" = dc_field( + mentioned_groups: "list[UserGroupResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="mentioned_groups") ) # List of roles mentioned in the message (e.g. admin, channel_moderator, custom roles). Members with matching roles will receive push notifications based on their push preferences. Max 10 roles - mentioned_roles: Optional[List[str]] = dc_field( + mentioned_roles: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_roles") ) # List of users who participate in thread - thread_participants: "Optional[List[UserResponse]]" = dc_field( + thread_participants: "list[UserResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) - draft: "Optional[DraftResponse]" = dc_field( + draft: "DraftResponse | None" = dc_field( default=None, metadata=dc_config(field_name="draft") ) # Object with translations. Key `language` contains the original language key. Other keys contain translations - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) # Contains image moderation information - image_labels: "Optional[Dict[str, List[str]]]" = dc_field( + image_labels: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="image_labels") ) - member: "Optional[ChannelMemberPartialResponse]" = dc_field( + member: "ChannelMemberPartialResponse | None" = dc_field( default=None, metadata=dc_config(field_name="member") ) - moderation: "Optional[ModerationV2Response]" = dc_field( + moderation: "ModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) # User response object - pinned_by: "Optional[UserResponse]" = dc_field( + pinned_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="pinned_by") ) - poll: "Optional[PollResponseData]" = dc_field( + poll: "PollResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll") ) # Represents any chat message - quoted_message: "Optional[MessageResponse]" = dc_field( + quoted_message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="quoted_message") ) - reaction_groups: "Optional[Dict[str, Optional[ReactionGroupResponse]]]" = dc_field( + reaction_groups: "dict[str, ReactionGroupResponse | None] | None" = dc_field( default=None, metadata=dc_config(field_name="reaction_groups") ) - reminder: "Optional[ReminderResponseData]" = dc_field( + reminder: "ReminderResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="reminder") ) - shared_location: "Optional[SharedLocationResponseData]" = dc_field( + shared_location: "SharedLocationResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="shared_location") ) @@ -18314,10 +18176,10 @@ class MessageWithChannelResponse(DataClassJsonMixin): @dataclass class MetricDescriptor(DataClassJsonMixin): label: str = dc_field(metadata=dc_config(field_name="label")) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - unit: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="unit")) + unit: str | None = dc_field(default=None, metadata=dc_config(field_name="unit")) @dataclass @@ -18325,7 +18187,7 @@ class MetricStats(DataClassJsonMixin): # Aggregated total value total: int = dc_field(metadata=dc_config(field_name="total")) # Per-day values (only present in daily mode) - daily: "Optional[List[DailyValue]]" = dc_field( + daily: "list[DailyValue] | None" = dc_field( default=None, metadata=dc_config(field_name="daily") ) @@ -18335,34 +18197,34 @@ class MetricThreshold(DataClassJsonMixin): level: str = dc_field(metadata=dc_config(field_name="level")) operator: str = dc_field(metadata=dc_config(field_name="operator")) value: float = dc_field(metadata=dc_config(field_name="value")) - value_unit: Optional[str] = dc_field( + value_unit: str | None = dc_field( default=None, metadata=dc_config(field_name="value_unit") ) - window_seconds: Optional[int] = dc_field( + window_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="window_seconds") ) @dataclass class MetricTimeSeries(DataClassJsonMixin): - data_points: "Optional[List[List[float]]]" = dc_field( + data_points: "list[list[float]] | None" = dc_field( default=None, metadata=dc_config(field_name="data_points") ) @dataclass class MetricsPct(DataClassJsonMixin): - freezes: Optional[float] = dc_field( + freezes: float | None = dc_field( default=None, metadata=dc_config(field_name="freezes") ) - geo: Optional[float] = dc_field(default=None, metadata=dc_config(field_name="geo")) - jitter: Optional[float] = dc_field( + geo: float | None = dc_field(default=None, metadata=dc_config(field_name="geo")) + jitter: float | None = dc_field( default=None, metadata=dc_config(field_name="jitter") ) - latency: Optional[float] = dc_field( + latency: float | None = dc_field( default=None, metadata=dc_config(field_name="latency") ) - quality_score: Optional[float] = dc_field( + quality_score: float | None = dc_field( default=None, metadata=dc_config(field_name="quality_score") ) @@ -18379,13 +18241,13 @@ class ModerationActionConfigResponse(DataClassJsonMixin): icon: str = dc_field(metadata=dc_config(field_name="icon")) # Display order (lower numbers shown first) order: int = dc_field(metadata=dc_config(field_name="order")) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # Queue type this action config belongs to - queue_type: Optional[str] = dc_field( + queue_type: str | None = dc_field( default=None, metadata=dc_config(field_name="queue_type") ) # Custom data for the action - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -18404,22 +18266,22 @@ class ModerationAnalysisFailedEvent(DataClassJsonMixin): default="moderation.analysis.failed", metadata=dc_config(field_name="type") ) # The moderation policy key the request targeted. - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) # Echo of the `entity_creator_id` on the /analyze request. - entity_creator_id: Optional[str] = dc_field( + entity_creator_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) # Echo of the `entity_id` on the /analyze request. - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Echo of the `entity_type` on the /analyze request. - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -18429,11 +18291,11 @@ class ModerationAnalysisFailedEvent(DataClassJsonMixin): ), ) # Echo of the request's `content_ids`, keyed by text/image label. On keyframe and caption streams every request repeats the same entity_type/entity_id/entity_creator_id, so this is what identifies the specific submission that went unscreened. - content_ids: "Optional[Dict[str, str]]" = dc_field( + content_ids: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="content_ids") ) # Echo of the `custom` metadata on the /analyze request. - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -18472,14 +18334,14 @@ class ModerationCallResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_ids: List[str] = dc_field( + blocked_user_ids: list[str] = dc_field( metadata=dc_config(field_name="blocked_user_ids") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - channel_cid: Optional[str] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) - ended_at: Optional[datetime] = dc_field( + ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ended_at", @@ -18488,13 +18350,13 @@ class ModerationCallResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - join_ahead_time_seconds: Optional[int] = dc_field( + join_ahead_time_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="join_ahead_time_seconds") ) - routing_number: Optional[str] = dc_field( + routing_number: str | None = dc_field( default=None, metadata=dc_config(field_name="routing_number") ) - starts_at: Optional[datetime] = dc_field( + starts_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="starts_at", @@ -18503,9 +18365,9 @@ class ModerationCallResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) @@ -18532,11 +18394,11 @@ class ModerationCheckCompletedEvent(DataClassJsonMixin): review_queue_item_id: str = dc_field( metadata=dc_config(field_name="review_queue_item_id") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="moderation_check.completed", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -18549,10 +18411,8 @@ class ModerationCheckCompletedEvent(DataClassJsonMixin): @dataclass class ModerationConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - created_at: Optional[datetime] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -18561,9 +18421,9 @@ class ModerationConfig(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - key: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="key")) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - updated_at: Optional[datetime] = dc_field( + key: str | None = dc_field(default=None, metadata=dc_config(field_name="key")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="updated_at", @@ -18572,50 +18432,47 @@ class ModerationConfig(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - supported_video_call_harm_types: Optional[List[str]] = dc_field( + supported_video_call_harm_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="supported_video_call_harm_types") ) - ai_image_config: "Optional[AIImageConfig]" = dc_field( + ai_image_config: "AIImageConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_image_config") ) - ai_image_lite_config: "Optional[BodyguardImageAnalysisConfig]" = dc_field( + ai_image_lite_config: "BodyguardImageAnalysisConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_image_lite_config") ) - ai_text_config: "Optional[AITextConfig]" = dc_field( + ai_text_config: "AITextConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_text_config") ) - ai_video_config: "Optional[AIVideoConfig]" = dc_field( + ai_video_config: "AIVideoConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_video_config") ) - automod_platform_circumvention_config: "Optional[AutomodPlatformCircumventionConfig]" = dc_field( + automod_platform_circumvention_config: "AutomodPlatformCircumventionConfig | None" = dc_field( default=None, metadata=dc_config(field_name="automod_platform_circumvention_config"), ) - automod_semantic_filters_config: "Optional[AutomodSemanticFiltersConfig]" = ( - dc_field( - default=None, - metadata=dc_config(field_name="automod_semantic_filters_config"), - ) + automod_semantic_filters_config: "AutomodSemanticFiltersConfig | None" = dc_field( + default=None, metadata=dc_config(field_name="automod_semantic_filters_config") ) - automod_toxicity_config: "Optional[AutomodToxicityConfig]" = dc_field( + automod_toxicity_config: "AutomodToxicityConfig | None" = dc_field( default=None, metadata=dc_config(field_name="automod_toxicity_config") ) - block_list_config: "Optional[BlockListConfig]" = dc_field( + block_list_config: "BlockListConfig | None" = dc_field( default=None, metadata=dc_config(field_name="block_list_config") ) - flood_config: "Optional[FloodConfig]" = dc_field( + flood_config: "FloodConfig | None" = dc_field( default=None, metadata=dc_config(field_name="flood_config") ) - google_vision_config: "Optional[GoogleVisionConfig]" = dc_field( + google_vision_config: "GoogleVisionConfig | None" = dc_field( default=None, metadata=dc_config(field_name="google_vision_config") ) - llm_config: "Optional[LLMConfig]" = dc_field( + llm_config: "LLMConfig | None" = dc_field( default=None, metadata=dc_config(field_name="llm_config") ) - velocity_filter_config: "Optional[VelocityFilterConfig]" = dc_field( + velocity_filter_config: "VelocityFilterConfig | None" = dc_field( default=None, metadata=dc_config(field_name="velocity_filter_config") ) - video_call_rule_config: "Optional[VideoCallRuleConfig]" = dc_field( + video_call_rule_config: "VideoCallRuleConfig | None" = dc_field( default=None, metadata=dc_config(field_name="video_call_rule_config") ) @@ -18632,14 +18489,14 @@ class ModerationCustomActionEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) review_queue_item: "ReviewQueueItemResponse" = dc_field( metadata=dc_config(field_name="review_queue_item") ) type: str = dc_field( default="moderation.custom_action", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -18649,57 +18506,57 @@ class ModerationCustomActionEvent(DataClassJsonMixin): ), ) # Additional options passed to the custom action - action_options: Optional[Dict[str, object]] = dc_field( + action_options: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="action_options") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @dataclass class ModerationDashboardPreferences(DataClassJsonMixin): - async_review_queue_upsert: Optional[bool] = dc_field( + async_review_queue_upsert: bool | None = dc_field( default=None, metadata=dc_config(field_name="async_review_queue_upsert") ) - block_foreign_cdn_attachments: Optional[bool] = dc_field( + block_foreign_cdn_attachments: bool | None = dc_field( default=None, metadata=dc_config(field_name="block_foreign_cdn_attachments") ) - custom_views_enabled: Optional[bool] = dc_field( + custom_views_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="custom_views_enabled") ) - disable_audit_logs: Optional[bool] = dc_field( + disable_audit_logs: bool | None = dc_field( default=None, metadata=dc_config(field_name="disable_audit_logs") ) - disable_flagging_reviewed_entity: Optional[bool] = dc_field( + disable_flagging_reviewed_entity: bool | None = dc_field( default=None, metadata=dc_config(field_name="disable_flagging_reviewed_entity") ) - escalation_queue_enabled: Optional[bool] = dc_field( + escalation_queue_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="escalation_queue_enabled") ) - flag_user_on_flagged_content: Optional[bool] = dc_field( + flag_user_on_flagged_content: bool | None = dc_field( default=None, metadata=dc_config(field_name="flag_user_on_flagged_content") ) - include_attachment_payload: Optional[bool] = dc_field( + include_attachment_payload: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_attachment_payload") ) - media_queue_blur_enabled: Optional[bool] = dc_field( + media_queue_blur_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="media_queue_blur_enabled") ) - allowed_moderation_action_reasons: Optional[List[str]] = dc_field( + allowed_moderation_action_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_moderation_action_reasons") ) - escalation_reasons: Optional[List[str]] = dc_field( + escalation_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="escalation_reasons") ) - filterable_custom_keys: Optional[List[str]] = dc_field( + filterable_custom_keys: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filterable_custom_keys") ) - keyframe_classifications_map: "Optional[Dict[str, Dict[str, bool]]]" = dc_field( + keyframe_classifications_map: "dict[str, dict[str, bool]] | None" = dc_field( default=None, metadata=dc_config(field_name="keyframe_classifications_map") ) - overview_dashboard: "Optional[OverviewDashboardConfig]" = dc_field( + overview_dashboard: "OverviewDashboardConfig | None" = dc_field( default=None, metadata=dc_config(field_name="overview_dashboard") ) @@ -18726,33 +18583,31 @@ class ModerationFlagResponse(DataClassJsonMixin): ) ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - result: "List[Dict[str, object]]" = dc_field( + result: "list[dict[str, object]]" = dc_field( metadata=dc_config(field_name="result") ) - entity_creator_id: Optional[str] = dc_field( + entity_creator_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - review_queue_item_id: Optional[str] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + review_queue_item_id: str | None = dc_field( default=None, metadata=dc_config(field_name="review_queue_item_id") ) - labels: Optional[List[str]] = dc_field( + labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="labels") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # Content payload for moderation - moderation_payload: "Optional[ModerationPayloadResponse]" = dc_field( + moderation_payload: "ModerationPayloadResponse | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_payload") ) - review_queue_item: "Optional[ReviewQueueItemResponse]" = dc_field( + review_queue_item: "ReviewQueueItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="review_queue_item") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -18771,11 +18626,11 @@ class ModerationFlaggedEvent(DataClassJsonMixin): ) # The ID of the flagged content object_id: str = dc_field(metadata=dc_config(field_name="object_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="moderation.flagged", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -18801,22 +18656,22 @@ class ModerationImageAnalysisCompleteEvent(DataClassJsonMixin): metadata=dc_config(field_name="type"), ) # The moderation policy key that was applied. - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) # Echo of the `entity_creator_id` on the /analyze request. - entity_creator_id: Optional[str] = dc_field( + entity_creator_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) # Echo of the `entity_id` on the /analyze request. - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Echo of the `entity_type` on the /analyze request. - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -18826,19 +18681,19 @@ class ModerationImageAnalysisCompleteEvent(DataClassJsonMixin): ), ) # Review queue row ID for deep-linking into the dashboard. - review_queue_item_id: Optional[str] = dc_field( + review_queue_item_id: str | None = dc_field( default=None, metadata=dc_config(field_name="review_queue_item_id") ) # Echo of the `custom` metadata on the /analyze request. - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # Per-image verdicts, same shape as the /analyze HTTP response. Each entry carries `id` when the request supplied `content_ids`. - images: "Optional[Dict[str, AnalyzeImageField]]" = dc_field( + images: "dict[str, AnalyzeImageField] | None" = dc_field( default=None, metadata=dc_config(field_name="images") ) # Per-text-field verdicts, same shape as the /analyze HTTP response. Each entry carries `id` when the request supplied `content_ids`. - texts: "Optional[Dict[str, AnalyzeTextField]]" = dc_field( + texts: "dict[str, AnalyzeTextField] | None" = dc_field( default=None, metadata=dc_config(field_name="texts") ) @@ -18853,12 +18708,12 @@ class ModerationMarkReviewedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) item: "ReviewQueueItemResponse" = dc_field(metadata=dc_config(field_name="item")) type: str = dc_field( default="moderation.mark_reviewed", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -18868,41 +18723,41 @@ class ModerationMarkReviewedEvent(DataClassJsonMixin): ), ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @dataclass class ModerationPayload(DataClassJsonMixin): - audios: Optional[List[str]] = dc_field( + audios: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="audios") ) - image_ordered_keys: Optional[List[str]] = dc_field( + image_ordered_keys: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="image_ordered_keys") ) - images: Optional[List[str]] = dc_field( + images: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="images") ) - other_media: Optional[List[str]] = dc_field( + other_media: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="other_media") ) - text_ordered_keys: Optional[List[str]] = dc_field( + text_ordered_keys: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="text_ordered_keys") ) - texts: Optional[List[str]] = dc_field( + texts: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="texts") ) - videos: Optional[List[str]] = dc_field( + videos: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="videos") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - image_ids: "Optional[Dict[str, str]]" = dc_field( + image_ids: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="image_ids") ) - text_ids: "Optional[Dict[str, str]]" = dc_field( + text_ids: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="text_ids") ) @@ -18910,23 +18765,23 @@ class ModerationPayload(DataClassJsonMixin): @dataclass class ModerationPayloadRequest(DataClassJsonMixin): # Audio URLs to moderate - audios: Optional[List[str]] = dc_field( + audios: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="audios") ) # Image URLs to moderate (max 30) - images: Optional[List[str]] = dc_field( + images: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="images") ) # Text content to moderate - texts: Optional[List[str]] = dc_field( + texts: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="texts") ) # Video URLs to moderate - videos: Optional[List[str]] = dc_field( + videos: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="videos") ) # Custom data for moderation - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -18934,43 +18789,43 @@ class ModerationPayloadRequest(DataClassJsonMixin): @dataclass class ModerationPayloadResponse(DataClassJsonMixin): # Audio URLs to moderate - audios: Optional[List[str]] = dc_field( + audios: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="audios") ) # Caller-supplied keys for images, index-aligned with images[] - image_ordered_keys: Optional[List[str]] = dc_field( + image_ordered_keys: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="image_ordered_keys") ) # Image URLs to moderate - images: Optional[List[str]] = dc_field( + images: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="images") ) # Media URLs from attachments outside the typed image/video/audio lists (custom attachment types such as GIF pickers) - other_media: Optional[List[str]] = dc_field( + other_media: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="other_media") ) # Caller-supplied keys for texts (e.g. "title", "description"), index-aligned with texts[] - text_ordered_keys: Optional[List[str]] = dc_field( + text_ordered_keys: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="text_ordered_keys") ) # Text content to moderate - texts: Optional[List[str]] = dc_field( + texts: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="texts") ) # Video URLs to moderate - videos: Optional[List[str]] = dc_field( + videos: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="videos") ) # Custom data for moderation - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # Caller-supplied content IDs per image key (from content_ids on /analyze) - image_ids: "Optional[Dict[str, str]]" = dc_field( + image_ids: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="image_ids") ) # Caller-supplied content IDs per text key (from content_ids on /analyze) - text_ids: "Optional[Dict[str, str]]" = dc_field( + text_ids: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="text_ids") ) @@ -18999,8 +18854,8 @@ class ModerationQueueResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - sort: "List[Dict[str, object]]" = dc_field(metadata=dc_config(field_name="sort")) - filters: Dict[str, object] = dc_field(metadata=dc_config(field_name="filters")) + sort: "list[dict[str, object]]" = dc_field(metadata=dc_config(field_name="sort")) + filters: dict[str, object] = dc_field(metadata=dc_config(field_name="filters")) @dataclass @@ -19043,23 +18898,21 @@ class ModerationRuleV2Response(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - config_keys: List[str] = dc_field(metadata=dc_config(field_name="config_keys")) - cooldown_period: Optional[str] = dc_field( + config_keys: list[str] = dc_field(metadata=dc_config(field_name="config_keys")) + cooldown_period: str | None = dc_field( default=None, metadata=dc_config(field_name="cooldown_period") ) - logic: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="logic") - ) - action_sequences: "Optional[List[CallRuleActionSequence]]" = dc_field( + logic: str | None = dc_field(default=None, metadata=dc_config(field_name="logic")) + action_sequences: "list[CallRuleActionSequence] | None" = dc_field( default=None, metadata=dc_config(field_name="action_sequences") ) - conditions: "Optional[List[RuleBuilderCondition]]" = dc_field( + conditions: "list[RuleBuilderCondition] | None" = dc_field( default=None, metadata=dc_config(field_name="conditions") ) - groups: "Optional[List[RuleBuilderConditionGroup]]" = dc_field( + groups: "list[RuleBuilderConditionGroup] | None" = dc_field( default=None, metadata=dc_config(field_name="groups") ) - action: "Optional[RuleBuilderAction]" = dc_field( + action: "RuleBuilderAction | None" = dc_field( default=None, metadata=dc_config(field_name="action") ) @@ -19081,15 +18934,15 @@ class ModerationRulesTriggeredEvent(DataClassJsonMixin): # The ID of the user who triggered the rule user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Array of action types that were triggered - triggered_actions: List[str] = dc_field( + triggered_actions: list[str] = dc_field( metadata=dc_config(field_name="triggered_actions") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) rule: "ModerationRuleInfo" = dc_field(metadata=dc_config(field_name="rule")) type: str = dc_field( default="moderation_rule.triggered", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -19099,15 +18952,15 @@ class ModerationRulesTriggeredEvent(DataClassJsonMixin): ), ) # The review queue item ID if applicable - review_queue_item_id: Optional[str] = dc_field( + review_queue_item_id: str | None = dc_field( default=None, metadata=dc_config(field_name="review_queue_item_id") ) # The violation number for call rules (optional) - violation_number: Optional[int] = dc_field( + violation_number: int | None = dc_field( default=None, metadata=dc_config(field_name="violation_number") ) # Ordered list of contents whose verdicts contributed to an aggregation rule's threshold. Populated only for aggregation rules when callers supplied `content_ids`. - matched_contents: "Optional[List[MatchedContent]]" = dc_field( + matched_contents: "list[MatchedContent] | None" = dc_field( default=None, metadata=dc_config(field_name="matched_contents") ) @@ -19127,22 +18980,22 @@ class ModerationTextAnalysisCompleteEvent(DataClassJsonMixin): metadata=dc_config(field_name="type"), ) # The moderation policy key that was applied. - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) # Echo of the `entity_creator_id` on the /analyze request. - entity_creator_id: Optional[str] = dc_field( + entity_creator_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) # Echo of the `entity_id` on the /analyze request. - entity_id: Optional[str] = dc_field( + entity_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_id") ) # Echo of the `entity_type` on the /analyze request. - entity_type: Optional[str] = dc_field( + entity_type: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -19152,15 +19005,15 @@ class ModerationTextAnalysisCompleteEvent(DataClassJsonMixin): ), ) # Review queue row ID for deep-linking into the dashboard. - review_queue_item_id: Optional[str] = dc_field( + review_queue_item_id: str | None = dc_field( default=None, metadata=dc_config(field_name="review_queue_item_id") ) # Echo of the `custom` metadata on the /analyze request. - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # Per-text-field verdicts, same shape as the /analyze HTTP response. Each entry carries `id` when the request supplied `content_ids`. - texts: "Optional[Dict[str, AnalyzeTextField]]" = dc_field( + texts: "dict[str, AnalyzeTextField] | None" = dc_field( default=None, metadata=dc_config(field_name="texts") ) @@ -19169,22 +19022,22 @@ class ModerationTextAnalysisCompleteEvent(DataClassJsonMixin): class ModerationV2Response(DataClassJsonMixin): action: str = dc_field(metadata=dc_config(field_name="action")) original_text: str = dc_field(metadata=dc_config(field_name="original_text")) - blocklist_matched: Optional[str] = dc_field( + blocklist_matched: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_matched") ) - platform_circumvented: Optional[bool] = dc_field( + platform_circumvented: bool | None = dc_field( default=None, metadata=dc_config(field_name="platform_circumvented") ) - semantic_filter_matched: Optional[str] = dc_field( + semantic_filter_matched: str | None = dc_field( default=None, metadata=dc_config(field_name="semantic_filter_matched") ) - blocklists_matched: Optional[List[str]] = dc_field( + blocklists_matched: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="blocklists_matched") ) - image_harms: Optional[List[str]] = dc_field( + image_harms: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="image_harms") ) - text_harms: Optional[List[str]] = dc_field( + text_harms: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="text_harms") ) @@ -19192,18 +19045,18 @@ class ModerationV2Response(DataClassJsonMixin): @dataclass class MuteChannelRequest(DataClassJsonMixin): # Duration of mute in milliseconds - expiration: Optional[int] = dc_field( + expiration: int | None = dc_field( default=None, metadata=dc_config(field_name="expiration") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Channel CIDs to mute (if multiple channels) - channel_cids: Optional[List[str]] = dc_field( + channel_cids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="channel_cids") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -19212,13 +19065,13 @@ class MuteChannelRequest(DataClassJsonMixin): class MuteChannelResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Object with mutes (if multiple channels were muted) - channel_mutes: "Optional[List[ChannelMute]]" = dc_field( + channel_mutes: "list[ChannelMute] | None" = dc_field( default=None, metadata=dc_config(field_name="channel_mutes") ) - channel_mute: "Optional[ChannelMute]" = dc_field( + channel_mute: "ChannelMute | None" = dc_field( default=None, metadata=dc_config(field_name="channel_mute") ) - own_user: "Optional[OwnUserResponse]" = dc_field( + own_user: "OwnUserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="own_user") ) @@ -19226,16 +19079,16 @@ class MuteChannelResponse(DataClassJsonMixin): @dataclass class MuteRequest(DataClassJsonMixin): # User IDs to mute (if multiple users) - target_ids: List[str] = dc_field(metadata=dc_config(field_name="target_ids")) + target_ids: list[str] = dc_field(metadata=dc_config(field_name="target_ids")) # Duration of mute in minutes - timeout: Optional[int] = dc_field( + timeout: int | None = dc_field( default=None, metadata=dc_config(field_name="timeout") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -19244,43 +19097,39 @@ class MuteRequest(DataClassJsonMixin): class MuteResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Object with mutes (if multiple users were muted) - mutes: "Optional[List[UserMuteResponse]]" = dc_field( + mutes: "list[UserMuteResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="mutes") ) # A list of users that can't be found. Common cause for this is deleted users - non_existing_users: Optional[List[str]] = dc_field( + non_existing_users: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="non_existing_users") ) - own_user: "Optional[OwnUserResponse]" = dc_field( + own_user: "OwnUserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="own_user") ) @dataclass class MuteUsersRequest(DataClassJsonMixin): - audio: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="audio") - ) - mute_all_users: Optional[bool] = dc_field( + audio: bool | None = dc_field(default=None, metadata=dc_config(field_name="audio")) + mute_all_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="mute_all_users") ) - muted_by_id: Optional[str] = dc_field( + muted_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="muted_by_id") ) - screenshare: Optional[bool] = dc_field( + screenshare: bool | None = dc_field( default=None, metadata=dc_config(field_name="screenshare") ) - screenshare_audio: Optional[bool] = dc_field( + screenshare_audio: bool | None = dc_field( default=None, metadata=dc_config(field_name="screenshare_audio") ) - video: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="video") - ) - user_ids: Optional[List[str]] = dc_field( + video: bool | None = dc_field(default=None, metadata=dc_config(field_name="video")) + user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="user_ids") ) # User request object - muted_by: "Optional[UserRequest]" = dc_field( + muted_by: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="muted_by") ) @@ -19293,16 +19142,16 @@ class MuteUsersResponse(DataClassJsonMixin): @dataclass class NetworkMetricsReportResponse(DataClassJsonMixin): - average_connection_time: Optional[float] = dc_field( + average_connection_time: float | None = dc_field( default=None, metadata=dc_config(field_name="average_connection_time") ) - average_jitter: Optional[float] = dc_field( + average_jitter: float | None = dc_field( default=None, metadata=dc_config(field_name="average_jitter") ) - average_latency: Optional[float] = dc_field( + average_latency: float | None = dc_field( default=None, metadata=dc_config(field_name="average_latency") ) - average_time_to_reconnect: Optional[float] = dc_field( + average_time_to_reconnect: float | None = dc_field( default=None, metadata=dc_config(field_name="average_time_to_reconnect") ) @@ -19317,7 +19166,7 @@ class NotificationComment(DataClassJsonMixin): comment: str = dc_field(metadata=dc_config(field_name="comment")) id: str = dc_field(metadata=dc_config(field_name="id")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) @@ -19325,25 +19174,25 @@ class NotificationComment(DataClassJsonMixin): @dataclass class NotificationConfig(DataClassJsonMixin): # Time window for deduplicating notification activities (reactions and follows). Empty or '0' = always deduplicate (default). Examples: '1h', '24h', '7d', '1w' - deduplication_window: Optional[str] = dc_field( + deduplication_window: str | None = dc_field( default=None, metadata=dc_config(field_name="deduplication_window") ) # Whether to track read status - track_read: Optional[bool] = dc_field( + track_read: bool | None = dc_field( default=None, metadata=dc_config(field_name="track_read") ) # Whether to track seen status - track_seen: Optional[bool] = dc_field( + track_seen: bool | None = dc_field( default=None, metadata=dc_config(field_name="track_seen") ) @dataclass class NotificationContext(DataClassJsonMixin): - target: "Optional[NotificationTarget]" = dc_field( + target: "NotificationTarget | None" = dc_field( default=None, metadata=dc_config(field_name="target") ) - trigger: "Optional[NotificationTrigger]" = dc_field( + trigger: "NotificationTrigger | None" = dc_field( default=None, metadata=dc_config(field_name="trigger") ) @@ -19361,15 +19210,15 @@ class NotificationFeedUpdatedEvent(DataClassJsonMixin): ) # The ID of the feed fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.notification_feed.updated" in this case type: str = dc_field( default="feeds.notification_feed.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -19379,13 +19228,13 @@ class NotificationFeedUpdatedEvent(DataClassJsonMixin): ), ) # Aggregated activities for notification feeds - aggregated_activities: "Optional[List[AggregatedActivityResponse]]" = dc_field( + aggregated_activities: "list[AggregatedActivityResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="aggregated_activities") ) - notification_status: "Optional[NotificationStatusResponse]" = dc_field( + notification_status: "NotificationStatusResponse | None" = dc_field( default=None, metadata=dc_config(field_name="notification_status") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -19401,34 +19250,34 @@ class NotificationMarkUnreadEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "notification.mark_unread" in this case type: str = dc_field( default="notification.mark_unread", metadata=dc_config(field_name="type") ) # The ID of the channel which was marked as unread - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel which was marked as unread - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel which was marked as unread - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) # The ID of the first unread message - first_unread_message_id: Optional[str] = dc_field( + first_unread_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="first_unread_message_id") ) # The time when the channel/thread was marked as unread - last_read_at: Optional[datetime] = dc_field( + last_read_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_read_at", @@ -19438,10 +19287,10 @@ class NotificationMarkUnreadEvent(DataClassJsonMixin): ), ) # The ID of the last read message - last_read_message_id: Optional[str] = dc_field( + last_read_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="last_read_message_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -19451,46 +19300,46 @@ class NotificationMarkUnreadEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # The ID of the thread which was marked as unread - thread_id: Optional[str] = dc_field( + thread_id: str | None = dc_field( default=None, metadata=dc_config(field_name="thread_id") ) # The total number of unread messages - total_unread_count: Optional[int] = dc_field( + total_unread_count: int | None = dc_field( default=None, metadata=dc_config(field_name="total_unread_count") ) # The number of channels with unread messages - unread_channels: Optional[int] = dc_field( + unread_channels: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_channels") ) # The total number of unread messages - unread_count: Optional[int] = dc_field( + unread_count: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_count") ) # The number of unread messages in the channel/thread after first_unread_message_id - unread_messages: Optional[int] = dc_field( + unread_messages: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_messages") ) # The total number of unread messages in the threads - unread_thread_messages: Optional[int] = dc_field( + unread_thread_messages: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_thread_messages") ) # The number of unread threads - unread_threads: Optional[int] = dc_field( + unread_threads: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_threads") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) - channel_custom: Optional[Dict[str, object]] = dc_field( + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - grouped_unread_channels: "Optional[Dict[str, int]]" = dc_field( + grouped_unread_channels: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="grouped_unread_channels") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -19498,12 +19347,12 @@ class NotificationMarkUnreadEvent(DataClassJsonMixin): @dataclass class NotificationParentActivity(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - user_id: Optional[str] = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) @@ -19530,22 +19379,22 @@ class NotificationSettings(DataClassJsonMixin): @dataclass class NotificationSettingsRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - call_live_started: "Optional[EventNotificationSettingsRequest]" = dc_field( + call_live_started: "EventNotificationSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="call_live_started") ) - call_missed: "Optional[EventNotificationSettingsRequest]" = dc_field( + call_missed: "EventNotificationSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="call_missed") ) - call_notification: "Optional[EventNotificationSettingsRequest]" = dc_field( + call_notification: "EventNotificationSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="call_notification") ) - call_ring: "Optional[EventNotificationSettingsRequest]" = dc_field( + call_ring: "EventNotificationSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="call_ring") ) - session_started: "Optional[EventNotificationSettingsRequest]" = dc_field( + session_started: "EventNotificationSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="session_started") ) @@ -19577,7 +19426,7 @@ class NotificationStatusResponse(DataClassJsonMixin): # Number of unseen notifications unseen: int = dc_field(metadata=dc_config(field_name="unseen")) # When notifications were last read - last_read_at: Optional[datetime] = dc_field( + last_read_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_read_at", @@ -19587,7 +19436,7 @@ class NotificationStatusResponse(DataClassJsonMixin): ), ) # When notifications were last seen - last_seen_at: Optional[datetime] = dc_field( + last_seen_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_seen_at", @@ -19597,11 +19446,11 @@ class NotificationStatusResponse(DataClassJsonMixin): ), ) # Deprecated: use is_read on each activity/group instead. IDs of activities that have been read. Capped at ~101 entries for aggregated feeds. - read_activities: Optional[List[str]] = dc_field( + read_activities: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="read_activities") ) # Deprecated: use is_seen on each activity/group instead. IDs of activities that have been seen. Capped at ~101 entries for aggregated feeds. - seen_activities: Optional[List[str]] = dc_field( + seen_activities: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="seen_activities") ) @@ -19611,27 +19460,27 @@ class NotificationTarget(DataClassJsonMixin): # The ID of the target (activity ID or user ID) id: str = dc_field(metadata=dc_config(field_name="id")) # The name of the target user (for user targets like follows) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # The text content of the target activity (for activity targets) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) # The type of the target activity (for activity targets) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) # The ID of the user who created the target activity (for activity targets) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Attachments on the target activity (for activity targets) - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) - comment: "Optional[NotificationComment]" = dc_field( + comment: "NotificationComment | None" = dc_field( default=None, metadata=dc_config(field_name="comment") ) # Custom data from the target activity - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - parent_activity: "Optional[NotificationParentActivity]" = dc_field( + parent_activity: "NotificationParentActivity | None" = dc_field( default=None, metadata=dc_config(field_name="parent_activity") ) @@ -19654,7 +19503,7 @@ class NotificationThreadMessageNewEvent(DataClassJsonMixin): watcher_count: int = dc_field(metadata=dc_config(field_name="watcher_count")) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) # The type of event: "notification.message_new" in this case @@ -19662,25 +19511,25 @@ class NotificationThreadMessageNewEvent(DataClassJsonMixin): default="notification.thread_message_new", metadata=dc_config(field_name="type") ) # The ID of the channel where the message was sent - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the message was sent - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the message was sent - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - parent_author: Optional[str] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + parent_author: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_author") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -19690,18 +19539,18 @@ class NotificationThreadMessageNewEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - unread_thread_messages: Optional[int] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + unread_thread_messages: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_thread_messages") ) - unread_threads: Optional[int] = dc_field( + unread_threads: int | None = dc_field( default=None, metadata=dc_config(field_name="unread_threads") ) # The participants of the thread - thread_participants: "Optional[List[UserResponseCommonFields]]" = dc_field( + thread_participants: "list[UserResponseCommonFields] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) - channel_custom: Optional[Dict[str, object]] = dc_field( + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) @@ -19712,24 +19561,24 @@ class NotificationTrigger(DataClassJsonMixin): text: str = dc_field(metadata=dc_config(field_name="text")) # The type of notification (mention, reaction, comment, follow, etc.) type: str = dc_field(metadata=dc_config(field_name="type")) - comment: "Optional[NotificationComment]" = dc_field( + comment: "NotificationComment | None" = dc_field( default=None, metadata=dc_config(field_name="comment") ) # Custom data from the trigger object (comment, reaction, etc.) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @dataclass class OCRContentParameters(DataClassJsonMixin): - label_operator: Optional[str] = dc_field( + label_operator: str | None = dc_field( default=None, metadata=dc_config(field_name="label_operator") ) - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) @@ -19747,10 +19596,10 @@ class OnlyUserID(DataClassJsonMixin): @dataclass class OverviewDashboardConfig(DataClassJsonMixin): - default_date_range_days: Optional[int] = dc_field( + default_date_range_days: int | None = dc_field( default=None, metadata=dc_config(field_name="default_date_range_days") ) - visible_charts: Optional[List[str]] = dc_field( + visible_charts: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="visible_charts") ) @@ -19758,16 +19607,16 @@ class OverviewDashboardConfig(DataClassJsonMixin): @dataclass class OwnBatchRequest(DataClassJsonMixin): # List of feed IDs to get own fields for - feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) - user_id: Optional[str] = dc_field( + feeds: list[str] = dc_field(metadata=dc_config(field_name="feeds")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Optional list of specific fields to return. If not specified, all fields (own_follows, own_followings, own_capabilities, own_membership) are returned - fields: Optional[List[str]] = dc_field( + fields: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="fields") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -19776,7 +19625,7 @@ class OwnBatchRequest(DataClassJsonMixin): class OwnBatchResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Map of feed ID to own fields data - data: "Dict[str, FeedOwnData]" = dc_field(metadata=dc_config(field_name="data")) + data: "dict[str, FeedOwnData]" = dc_field(metadata=dc_config(field_name="data")) OwnCapabilityType = NewType("OwnCapabilityType", str) @@ -19855,17 +19704,17 @@ class OwnUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - channel_mutes: "List[ChannelMute]" = dc_field( + channel_mutes: "list[ChannelMute]" = dc_field( metadata=dc_config(field_name="channel_mutes") ) - devices: "List[DeviceResponse]" = dc_field(metadata=dc_config(field_name="devices")) - mutes: "List[UserMuteResponse]" = dc_field(metadata=dc_config(field_name="mutes")) - teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - avg_response_time: Optional[int] = dc_field( + devices: "list[DeviceResponse]" = dc_field(metadata=dc_config(field_name="devices")) + mutes: "list[UserMuteResponse]" = dc_field(metadata=dc_config(field_name="mutes")) + teams: list[str] = dc_field(metadata=dc_config(field_name="teams")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: int | None = dc_field( default=None, metadata=dc_config(field_name="avg_response_time") ) - deactivated_at: Optional[datetime] = dc_field( + deactivated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deactivated_at", @@ -19874,7 +19723,7 @@ class OwnUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -19883,10 +19732,8 @@ class OwnUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - image: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image") - ) - last_active: Optional[datetime] = dc_field( + image: str | None = dc_field(default=None, metadata=dc_config(field_name="image")) + last_active: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_active", @@ -19895,8 +19742,8 @@ class OwnUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + revoke_tokens_issued_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="revoke_tokens_issued_before", @@ -19905,56 +19752,50 @@ class OwnUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - blocked_user_ids: Optional[List[str]] = dc_field( + blocked_user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="blocked_user_ids") ) - latest_hidden_channels: Optional[List[str]] = dc_field( + latest_hidden_channels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="latest_hidden_channels") ) - privacy_settings: "Optional[PrivacySettingsResponse]" = dc_field( + privacy_settings: "PrivacySettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="privacy_settings") ) - push_preferences: "Optional[PushPreferencesResponse]" = dc_field( + push_preferences: "PushPreferencesResponse | None" = dc_field( default=None, metadata=dc_config(field_name="push_preferences") ) - teams_role: "Optional[Dict[str, str]]" = dc_field( + teams_role: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="teams_role") ) - total_unread_count_by_team: "Optional[Dict[str, int]]" = dc_field( + total_unread_count_by_team: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="total_unread_count_by_team") ) @dataclass class PagerRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class PagerResponse(DataClassJsonMixin): - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class PaginationParams(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - offset: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + offset: int | None = dc_field(default=None, metadata=dc_config(field_name="offset")) @dataclass class ParsedPredefinedFilterResponse(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) - filter: Dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) - sort: "Optional[List[SortParamRequest]]" = dc_field( + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) @@ -19977,7 +19818,7 @@ class ParticipantCountByMinuteResponse(DataClassJsonMixin): @dataclass class ParticipantCountOverTimeResponse(DataClassJsonMixin): - by_minute: "Optional[List[ParticipantCountByMinuteResponse]]" = dc_field( + by_minute: "list[ParticipantCountByMinuteResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="by_minute") ) @@ -19986,66 +19827,66 @@ class ParticipantCountOverTimeResponse(DataClassJsonMixin): class ParticipantReportResponse(DataClassJsonMixin): sum: int = dc_field(metadata=dc_config(field_name="sum")) unique: int = dc_field(metadata=dc_config(field_name="unique")) - max_concurrent: Optional[int] = dc_field( + max_concurrent: int | None = dc_field( default=None, metadata=dc_config(field_name="max_concurrent") ) - by_browser: "Optional[List[GroupedStatsResponse]]" = dc_field( + by_browser: "list[GroupedStatsResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="by_browser") ) - by_country: "Optional[List[GroupedStatsResponse]]" = dc_field( + by_country: "list[GroupedStatsResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="by_country") ) - by_device: "Optional[List[GroupedStatsResponse]]" = dc_field( + by_device: "list[GroupedStatsResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="by_device") ) - by_operating_system: "Optional[List[GroupedStatsResponse]]" = dc_field( + by_operating_system: "list[GroupedStatsResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="by_operating_system") ) - count_over_time: "Optional[ParticipantCountOverTimeResponse]" = dc_field( + count_over_time: "ParticipantCountOverTimeResponse | None" = dc_field( default=None, metadata=dc_config(field_name="count_over_time") ) - publishers: "Optional[PublisherStatsResponse]" = dc_field( + publishers: "PublisherStatsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="publishers") ) - subscribers: "Optional[SubscriberStatsResponse]" = dc_field( + subscribers: "SubscriberStatsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="subscribers") ) @dataclass class ParticipantSeriesPublisherStats(DataClassJsonMixin): - global_metrics_order: Optional[List[str]] = dc_field( + global_metrics_order: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="global_metrics_order") ) - _global: "Optional[Dict[str, List[List[float]]]]" = dc_field( + _global: "dict[str, list[list[float]]] | None" = dc_field( default=None, metadata=dc_config(field_name="global") ) - global_meta: "Optional[Dict[str, MetricDescriptor]]" = dc_field( + global_meta: "dict[str, MetricDescriptor] | None" = dc_field( default=None, metadata=dc_config(field_name="global_meta") ) - global_thresholds: "Optional[Dict[str, List[MetricThreshold]]]" = dc_field( + global_thresholds: "dict[str, list[MetricThreshold]] | None" = dc_field( default=None, metadata=dc_config(field_name="global_thresholds") ) - tracks: "Optional[Dict[str, List[ParticipantSeriesTrackMetrics]]]" = dc_field( + tracks: "dict[str, list[ParticipantSeriesTrackMetrics]] | None" = dc_field( default=None, metadata=dc_config(field_name="tracks") ) @dataclass class ParticipantSeriesSubscriberStats(DataClassJsonMixin): - global_metrics_order: Optional[List[str]] = dc_field( + global_metrics_order: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="global_metrics_order") ) - subscriptions: "Optional[List[ParticipantSeriesSubscriptionTrackMetrics]]" = ( - dc_field(default=None, metadata=dc_config(field_name="subscriptions")) + subscriptions: "list[ParticipantSeriesSubscriptionTrackMetrics] | None" = dc_field( + default=None, metadata=dc_config(field_name="subscriptions") ) - _global: "Optional[Dict[str, List[List[float]]]]" = dc_field( + _global: "dict[str, list[list[float]]] | None" = dc_field( default=None, metadata=dc_config(field_name="global") ) - global_meta: "Optional[Dict[str, MetricDescriptor]]" = dc_field( + global_meta: "dict[str, MetricDescriptor] | None" = dc_field( default=None, metadata=dc_config(field_name="global_meta") ) - global_thresholds: "Optional[Dict[str, List[MetricThreshold]]]" = dc_field( + global_thresholds: "dict[str, list[MetricThreshold]] | None" = dc_field( default=None, metadata=dc_config(field_name="global_thresholds") ) @@ -20055,13 +19896,13 @@ class ParticipantSeriesSubscriptionTrackMetrics(DataClassJsonMixin): publisher_user_id: str = dc_field( metadata=dc_config(field_name="publisher_user_id") ) - publisher_name: Optional[str] = dc_field( + publisher_name: str | None = dc_field( default=None, metadata=dc_config(field_name="publisher_name") ) - publisher_user_session_id: Optional[str] = dc_field( + publisher_user_session_id: str | None = dc_field( default=None, metadata=dc_config(field_name="publisher_user_session_id") ) - tracks: "Optional[Dict[str, List[ParticipantSeriesTrackMetrics]]]" = dc_field( + tracks: "dict[str, list[ParticipantSeriesTrackMetrics]] | None" = dc_field( default=None, metadata=dc_config(field_name="tracks") ) @@ -20091,42 +19932,38 @@ class ParticipantSeriesTimeframe(DataClassJsonMixin): @dataclass class ParticipantSeriesTrackMetrics(DataClassJsonMixin): track_id: str = dc_field(metadata=dc_config(field_name="track_id")) - codec: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="codec") - ) - label: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="label") - ) - rid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="rid")) - track_type: Optional[str] = dc_field( + codec: str | None = dc_field(default=None, metadata=dc_config(field_name="codec")) + label: str | None = dc_field(default=None, metadata=dc_config(field_name="label")) + rid: str | None = dc_field(default=None, metadata=dc_config(field_name="rid")) + track_type: str | None = dc_field( default=None, metadata=dc_config(field_name="track_type") ) - metrics_order: Optional[List[str]] = dc_field( + metrics_order: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="metrics_order") ) - metrics: "Optional[Dict[str, List[List[float]]]]" = dc_field( + metrics: "dict[str, list[list[float]]] | None" = dc_field( default=None, metadata=dc_config(field_name="metrics") ) - metrics_meta: "Optional[Dict[str, MetricDescriptor]]" = dc_field( + metrics_meta: "dict[str, MetricDescriptor] | None" = dc_field( default=None, metadata=dc_config(field_name="metrics_meta") ) - thresholds: "Optional[Dict[str, List[MetricThreshold]]]" = dc_field( + thresholds: "dict[str, list[MetricThreshold]] | None" = dc_field( default=None, metadata=dc_config(field_name="thresholds") ) @dataclass class ParticipantSeriesUserStats(DataClassJsonMixin): - metrics_order: Optional[List[str]] = dc_field( + metrics_order: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="metrics_order") ) - metrics: "Optional[Dict[str, List[List[float]]]]" = dc_field( + metrics: "dict[str, list[list[float]]] | None" = dc_field( default=None, metadata=dc_config(field_name="metrics") ) - metrics_meta: "Optional[Dict[str, MetricDescriptor]]" = dc_field( + metrics_meta: "dict[str, MetricDescriptor] | None" = dc_field( default=None, metadata=dc_config(field_name="metrics_meta") ) - thresholds: "Optional[Dict[str, List[MetricThreshold]]]" = dc_field( + thresholds: "dict[str, list[MetricThreshold]] | None" = dc_field( default=None, metadata=dc_config(field_name="thresholds") ) @@ -20136,11 +19973,11 @@ class ParticipantSessionDetails(DataClassJsonMixin): publisher_type: str = dc_field(metadata=dc_config(field_name="publisher_type")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) user_session_id: str = dc_field(metadata=dc_config(field_name="user_session_id")) - roles: List[str] = dc_field(metadata=dc_config(field_name="roles")) - duration_in_seconds: Optional[int] = dc_field( + roles: list[str] = dc_field(metadata=dc_config(field_name="roles")) + duration_in_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="duration_in_seconds") ) - joined_at: Optional[datetime] = dc_field( + joined_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="joined_at", @@ -20149,7 +19986,7 @@ class ParticipantSessionDetails(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - left_at: Optional[datetime] = dc_field( + left_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="left_at", @@ -20173,12 +20010,12 @@ class PendingMessageEvent(DataClassJsonMixin): ) # The method used for the pending message method: str = dc_field(metadata=dc_config(field_name="method")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "message.pending" in this case type: str = dc_field( default="message.pending", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -20188,19 +20025,19 @@ class PendingMessageEvent(DataClassJsonMixin): ), ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) # Metadata attached to the pending message - metadata: "Optional[Dict[str, str]]" = dc_field( + metadata: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="metadata") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -20208,18 +20045,18 @@ class PendingMessageEvent(DataClassJsonMixin): @dataclass class PendingMessageResponse(DataClassJsonMixin): # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) - metadata: "Optional[Dict[str, str]]" = dc_field( + metadata: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="metadata") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -20227,13 +20064,44 @@ class PendingMessageResponse(DataClassJsonMixin): @dataclass class PerSDKUsageReport(DataClassJsonMixin): total: int = dc_field(metadata=dc_config(field_name="total")) - by_version: "Dict[str, int]" = dc_field(metadata=dc_config(field_name="by_version")) + by_version: "dict[str, int]" = dc_field(metadata=dc_config(field_name="by_version")) @dataclass class Percentiles(DataClassJsonMixin): - p50: Optional[float] = dc_field(default=None, metadata=dc_config(field_name="p50")) - p95: Optional[float] = dc_field(default=None, metadata=dc_config(field_name="p95")) + p50: float | None = dc_field(default=None, metadata=dc_config(field_name="p50")) + p95: float | None = dc_field(default=None, metadata=dc_config(field_name="p95")) + + +@dataclass +class PerformanceAnalysisResponse(DataClassJsonMixin): + analysis_type: str = dc_field(metadata=dc_config(field_name="analysis_type")) + score: str = dc_field(metadata=dc_config(field_name="score")) + indexed_fields: list[str] = dc_field( + metadata=dc_config(field_name="indexed_fields") + ) + recommendations: list[str] = dc_field( + metadata=dc_config(field_name="recommendations") + ) + unindexed_fields: list[str] = dc_field( + metadata=dc_config(field_name="unindexed_fields") + ) + unindexed_sort_fields: list[str] = dc_field( + metadata=dc_config(field_name="unindexed_sort_fields") + ) + warnings: list[str] = dc_field(metadata=dc_config(field_name="warnings")) + last_analyzed: datetime | None = dc_field( + default=None, + metadata=dc_config( + field_name="last_analyzed", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + scan_type: str | None = dc_field( + default=None, metadata=dc_config(field_name="scan_type") + ) @dataclass @@ -20257,13 +20125,33 @@ class Permission(DataClassJsonMixin): # Whether this permission applies to teammates (multi-tenancy mode only) same_team: bool = dc_field(metadata=dc_config(field_name="same_team")) # List of tags of the permission - tags: List[str] = dc_field(metadata=dc_config(field_name="tags")) + tags: list[str] = dc_field(metadata=dc_config(field_name="tags")) # MongoDB style condition which decides whether or not the permission is granted - condition: Optional[Dict[str, object]] = dc_field( + condition: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="condition") ) +@dataclass +class PermissionRequest(DataClassJsonMixin): + # Action name this permission is for (e.g. SendMessage) + action: str = dc_field(metadata=dc_config(field_name="action")) + # Name of the permission + name: str = dc_field(metadata=dc_config(field_name="name")) + # MongoDB style condition which decides whether or not the permission is granted + condition: dict[str, object] = dc_field(metadata=dc_config(field_name="condition")) + # Description of the permission + description: str | None = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + # Whether this permission applies to resource owner or not + owner: bool | None = dc_field(default=None, metadata=dc_config(field_name="owner")) + # Whether this permission applies to teammates (multi-tenancy mode only) + same_team: bool | None = dc_field( + default=None, metadata=dc_config(field_name="same_team") + ) + + @dataclass class PermissionRequestEvent(DataClassJsonMixin): call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) @@ -20276,7 +20164,7 @@ class PermissionRequestEvent(DataClassJsonMixin): ) ) # The list of permissions requested by the user - permissions: List[str] = dc_field(metadata=dc_config(field_name="permissions")) + permissions: list[str] = dc_field(metadata=dc_config(field_name="permissions")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "call.permission_request" in this case @@ -20288,14 +20176,14 @@ class PermissionRequestEvent(DataClassJsonMixin): @dataclass class PinActivityRequest(DataClassJsonMixin): # If true, enriches the activity's current_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -20362,8 +20250,8 @@ class Policy(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - resources: List[str] = dc_field(metadata=dc_config(field_name="resources")) - roles: List[str] = dc_field(metadata=dc_config(field_name="roles")) + resources: list[str] = dc_field(metadata=dc_config(field_name="resources")) + roles: list[str] = dc_field(metadata=dc_config(field_name="roles")) @dataclass @@ -20381,9 +20269,9 @@ class PolicyRequest(DataClassJsonMixin): # Policy priority priority: int = dc_field(metadata=dc_config(field_name="priority")) # List of resources to apply policy to - resources: List[str] = dc_field(metadata=dc_config(field_name="resources")) + resources: list[str] = dc_field(metadata=dc_config(field_name="resources")) # List of roles to apply policy to - roles: List[str] = dc_field(metadata=dc_config(field_name="roles")) + roles: list[str] = dc_field(metadata=dc_config(field_name="roles")) @dataclass @@ -20407,45 +20295,43 @@ class PolicyTestResult(DataClassJsonMixin): row_index: int = dc_field(metadata=dc_config(field_name="row_index")) run_id: str = dc_field(metadata=dc_config(field_name="run_id")) scored: bool = dc_field(metadata=dc_config(field_name="scored")) - actual_action: Optional[str] = dc_field( + actual_action: str | None = dc_field( default=None, metadata=dc_config(field_name="actual_action") ) - expected_action: Optional[str] = dc_field( + expected_action: str | None = dc_field( default=None, metadata=dc_config(field_name="expected_action") ) - failure_reason: Optional[str] = dc_field( + failure_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="failure_reason") ) - passed: Optional[bool] = dc_field( + passed: bool | None = dc_field( default=None, metadata=dc_config(field_name="passed") ) - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - actual_labels: Optional[List[str]] = dc_field( + actual_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="actual_labels") ) - expected_labels: Optional[List[str]] = dc_field( + expected_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="expected_labels") ) - raw_response: Optional[Dict[str, object]] = dc_field( + raw_response: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="raw_response") ) @dataclass class PolicyTestRow(DataClassJsonMixin): - content_type: Optional[str] = dc_field( + content_type: str | None = dc_field( default=None, metadata=dc_config(field_name="content_type") ) - policy: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="policy") - ) - recommended_action: Optional[str] = dc_field( + policy: str | None = dc_field(default=None, metadata=dc_config(field_name="policy")) + recommended_action: str | None = dc_field( default=None, metadata=dc_config(field_name="recommended_action") ) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - labels: Optional[List[str]] = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="labels") ) @@ -20468,7 +20354,7 @@ class PolicyTestRun(DataClassJsonMixin): status: str = dc_field(metadata=dc_config(field_name="status")) task_id: str = dc_field(metadata=dc_config(field_name="task_id")) triggered_by: str = dc_field(metadata=dc_config(field_name="triggered_by")) - completed_at: Optional[datetime] = dc_field( + completed_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="completed_at", @@ -20477,7 +20363,7 @@ class PolicyTestRun(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - config_updated_at: Optional[datetime] = dc_field( + config_updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="config_updated_at", @@ -20486,10 +20372,10 @@ class PolicyTestRun(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - error_message: Optional[str] = dc_field( + error_message: str | None = dc_field( default=None, metadata=dc_config(field_name="error_message") ) - started_at: Optional[datetime] = dc_field( + started_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="started_at", @@ -20498,7 +20384,7 @@ class PolicyTestRun(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - metrics: "Optional[PolicyTestRunMetrics]" = dc_field( + metrics: "PolicyTestRunMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="metrics") ) @@ -20507,7 +20393,7 @@ class PolicyTestRun(DataClassJsonMixin): class PolicyTestRunMetrics(DataClassJsonMixin): mode: str = dc_field(metadata=dc_config(field_name="mode")) totals: "PolicyTestTotals" = dc_field(metadata=dc_config(field_name="totals")) - by_label: "Optional[Dict[str, PolicyTestLabelDrift]]" = dc_field( + by_label: "dict[str, PolicyTestLabelDrift] | None" = dc_field( default=None, metadata=dc_config(field_name="by_label") ) @@ -20516,10 +20402,10 @@ class PolicyTestRunMetrics(DataClassJsonMixin): class PolicyTestRunResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Per-row results (only present once the run has finished) - results: "Optional[List[PolicyTestResult]]" = dc_field( + results: "list[PolicyTestResult] | None" = dc_field( default=None, metadata=dc_config(field_name="results") ) - run: "Optional[PolicyTestRun]" = dc_field( + run: "PolicyTestRun | None" = dc_field( default=None, metadata=dc_config(field_name="run") ) @@ -20529,7 +20415,7 @@ class PolicyTestSeedSpec(DataClassJsonMixin): # How many rows to sample, newest first; capped at 1000 limit: int = dc_field(metadata=dc_config(field_name="limit")) # Sample only records carrying any of these labels; empty samples everything - labels: Optional[List[str]] = dc_field( + labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="labels") ) @@ -20558,11 +20444,11 @@ class PolicyTestSet(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - rows: "Optional[List[PolicyTestRow]]" = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + rows: "list[PolicyTestRow] | None" = dc_field( default=None, metadata=dc_config(field_name="rows") ) - last_run: "Optional[PolicyTestRun]" = dc_field( + last_run: "PolicyTestRun | None" = dc_field( default=None, metadata=dc_config(field_name="last_run") ) @@ -20571,21 +20457,21 @@ class PolicyTestSet(DataClassJsonMixin): class PolicyTestSetListResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of policy test sets for the app - sets: "List[PolicyTestSet]" = dc_field(metadata=dc_config(field_name="sets")) + sets: "list[PolicyTestSet]" = dc_field(metadata=dc_config(field_name="sets")) @dataclass class PolicyTestSetResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # The set's baseline run (earliest completed run); later runs are scored against it. Absent until the first run completes - baseline_run_id: Optional[str] = dc_field( + baseline_run_id: str | None = dc_field( default=None, metadata=dc_config(field_name="baseline_run_id") ) # Retained run history for this set, newest first - recent_runs: "Optional[List[PolicyTestRun]]" = dc_field( + recent_runs: "list[PolicyTestRun] | None" = dc_field( default=None, metadata=dc_config(field_name="recent_runs") ) - set: "Optional[PolicyTestSet]" = dc_field( + set: "PolicyTestSet | None" = dc_field( default=None, metadata=dc_config(field_name="set") ) @@ -20601,8 +20487,8 @@ class PolicyTestTotals(DataClassJsonMixin): @dataclass class PollOptionInput(DataClassJsonMixin): - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - custom: Optional[Dict[str, object]] = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -20610,8 +20496,8 @@ class PollOptionInput(DataClassJsonMixin): @dataclass class PollOptionRequest(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - custom: Optional[Dict[str, object]] = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -20629,7 +20515,7 @@ class PollOptionResponse(DataClassJsonMixin): class PollOptionResponseData(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) text: str = dc_field(metadata=dc_config(field_name="text")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) @dataclass @@ -20673,30 +20559,30 @@ class PollResponseData(DataClassJsonMixin): voting_visibility: str = dc_field( metadata=dc_config(field_name="voting_visibility") ) - latest_answers: "List[PollVoteResponseData]" = dc_field( + latest_answers: "list[PollVoteResponseData]" = dc_field( metadata=dc_config(field_name="latest_answers") ) - options: "List[PollOptionResponseData]" = dc_field( + options: "list[PollOptionResponseData]" = dc_field( metadata=dc_config(field_name="options") ) - own_votes: "List[PollVoteResponseData]" = dc_field( + own_votes: "list[PollVoteResponseData]" = dc_field( metadata=dc_config(field_name="own_votes") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - latest_votes_by_option: "Dict[str, List[PollVoteResponseData]]" = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + latest_votes_by_option: "dict[str, list[PollVoteResponseData]]" = dc_field( metadata=dc_config(field_name="latest_votes_by_option") ) - vote_counts_by_option: "Dict[str, int]" = dc_field( + vote_counts_by_option: "dict[str, int]" = dc_field( metadata=dc_config(field_name="vote_counts_by_option") ) - is_closed: Optional[bool] = dc_field( + is_closed: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_closed") ) - max_votes_allowed: Optional[int] = dc_field( + max_votes_allowed: int | None = dc_field( default=None, metadata=dc_config(field_name="max_votes_allowed") ) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) @@ -20705,10 +20591,10 @@ class PollResponseData(DataClassJsonMixin): class PollVoteResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - poll: "Optional[PollResponseData]" = dc_field( + poll: "PollResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll") ) - vote: "Optional[PollVoteResponseData]" = dc_field( + vote: "PollVoteResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="vote") ) @@ -20734,17 +20620,17 @@ class PollVoteResponseData(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - answer_text: Optional[str] = dc_field( + answer_text: str | None = dc_field( default=None, metadata=dc_config(field_name="answer_text") ) - is_answer: Optional[bool] = dc_field( + is_answer: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_answer") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -20754,11 +20640,11 @@ class PollVotesResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Poll votes - votes: "List[PollVoteResponseData]" = dc_field( + votes: "list[PollVoteResponseData]" = dc_field( metadata=dc_config(field_name="votes") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass @@ -20779,20 +20665,73 @@ class PoorTail(DataClassJsonMixin): metadata=dc_config(field_name="poor_by_cause") ) supporting: "Supporting" = dc_field(metadata=dc_config(field_name="supporting")) - healthy_pct: Optional[float] = dc_field( + healthy_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="healthy_pct") ) +@dataclass +class PredefinedFilterResponse(DataClassJsonMixin): + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + name: str = dc_field(metadata=dc_config(field_name="name")) + operation: str = dc_field(metadata=dc_config(field_name="operation")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + description: str | None = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + query_id: int | None = dc_field( + default=None, metadata=dc_config(field_name="query_id") + ) + sort: "list[SortParam] | None" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + performance: "PerformanceAnalysisResponse | None" = dc_field( + default=None, metadata=dc_config(field_name="performance") + ) + stats: "PredefinedFilterStatsResponse | None" = dc_field( + default=None, metadata=dc_config(field_name="stats") + ) + + +@dataclass +class PredefinedFilterStatsResponse(DataClassJsonMixin): + calls: int = dc_field(metadata=dc_config(field_name="calls")) + max_latency_ms: int = dc_field(metadata=dc_config(field_name="max_latency_ms")) + last_seen: datetime | None = dc_field( + default=None, + metadata=dc_config( + field_name="last_seen", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + + @dataclass class PrivacySettingsResponse(DataClassJsonMixin): - delivery_receipts: "Optional[DeliveryReceiptsResponse]" = dc_field( + delivery_receipts: "DeliveryReceiptsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="delivery_receipts") ) - read_receipts: "Optional[ReadReceiptsResponse]" = dc_field( + read_receipts: "ReadReceiptsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="read_receipts") ) - typing_indicators: "Optional[TypingIndicatorsResponse]" = dc_field( + typing_indicators: "TypingIndicatorsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="typing_indicators") ) @@ -20809,45 +20748,43 @@ class PublishedTrackFlags(DataClassJsonMixin): @dataclass class PublishedTrackMetrics(DataClassJsonMixin): - codec: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="codec") - ) - track_id: Optional[str] = dc_field( + codec: str | None = dc_field(default=None, metadata=dc_config(field_name="codec")) + track_id: str | None = dc_field( default=None, metadata=dc_config(field_name="track_id") ) - track_type: Optional[str] = dc_field( + track_type: str | None = dc_field( default=None, metadata=dc_config(field_name="track_type") ) - warnings: "Optional[List[SessionWarningResponse]]" = dc_field( + warnings: "list[SessionWarningResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="warnings") ) - bitrate: "Optional[MetricTimeSeries]" = dc_field( + bitrate: "MetricTimeSeries | None" = dc_field( default=None, metadata=dc_config(field_name="bitrate") ) - framerate: "Optional[MetricTimeSeries]" = dc_field( + framerate: "MetricTimeSeries | None" = dc_field( default=None, metadata=dc_config(field_name="framerate") ) - resolution: "Optional[ResolutionMetricsTimeSeries]" = dc_field( + resolution: "ResolutionMetricsTimeSeries | None" = dc_field( default=None, metadata=dc_config(field_name="resolution") ) @dataclass class PublisherAllMetrics(DataClassJsonMixin): - audio: "Optional[PublisherAudioMetrics]" = dc_field( + audio: "PublisherAudioMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="audio") ) - rtt_ms: "Optional[ActiveCallsLatencyStats]" = dc_field( + rtt_ms: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="rtt_ms") ) - video: "Optional[PublisherVideoMetrics]" = dc_field( + video: "PublisherVideoMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="video") ) @dataclass class PublisherAudioMetrics(DataClassJsonMixin): - jitter_ms: "Optional[ActiveCallsLatencyStats]" = dc_field( + jitter_ms: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="jitter_ms") ) @@ -20860,24 +20797,22 @@ class PublisherSession(DataClassJsonMixin): ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) user_session_id: str = dc_field(metadata=dc_config(field_name="user_session_id")) - avg_jitter_ms: Optional[float] = dc_field( + avg_jitter_ms: float | None = dc_field( default=None, metadata=dc_config(field_name="avg_jitter_ms") ) - browser: Optional[str] = dc_field( + browser: str | None = dc_field( default=None, metadata=dc_config(field_name="browser") ) - delivery_zone: Optional[str] = dc_field( + delivery_zone: str | None = dc_field( default=None, metadata=dc_config(field_name="delivery_zone") ) - ingest: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="ingest") - ) - os: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="os")) - send_quality_score: Optional[float] = dc_field( + ingest: str | None = dc_field(default=None, metadata=dc_config(field_name="ingest")) + os: str | None = dc_field(default=None, metadata=dc_config(field_name="os")) + send_quality_score: float | None = dc_field( default=None, metadata=dc_config(field_name="send_quality_score") ) - tool: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="tool")) - encoding: "Optional[EncodingProfile]" = dc_field( + tool: str | None = dc_field(default=None, metadata=dc_config(field_name="tool")) + encoding: "EncodingProfile | None" = dc_field( default=None, metadata=dc_config(field_name="encoding") ) @@ -20886,33 +20821,33 @@ class PublisherSession(DataClassJsonMixin): class PublisherStatsResponse(DataClassJsonMixin): total: int = dc_field(metadata=dc_config(field_name="total")) unique: int = dc_field(metadata=dc_config(field_name="unique")) - by_track: "Optional[List[TrackStatsResponse]]" = dc_field( + by_track: "list[TrackStatsResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="by_track") ) @dataclass class PublisherVideoMetrics(DataClassJsonMixin): - bitrate: "Optional[ActiveCallsBitrateStats]" = dc_field( + bitrate: "ActiveCallsBitrateStats | None" = dc_field( default=None, metadata=dc_config(field_name="bitrate") ) - fps_30: "Optional[ActiveCallsFPSStats]" = dc_field( + fps_30: "ActiveCallsFPSStats | None" = dc_field( default=None, metadata=dc_config(field_name="fps_30") ) - frame_encoding_time_ms: "Optional[ActiveCallsLatencyStats]" = dc_field( + frame_encoding_time_ms: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="frame_encoding_time_ms") ) - jitter_ms: "Optional[ActiveCallsLatencyStats]" = dc_field( + jitter_ms: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="jitter_ms") ) - resolution: "Optional[ActiveCallsResolutionStats]" = dc_field( + resolution: "ActiveCallsResolutionStats | None" = dc_field( default=None, metadata=dc_config(field_name="resolution") ) @dataclass class PublishersMetrics(DataClassJsonMixin): - all: "Optional[PublisherAllMetrics]" = dc_field( + all: "PublisherAllMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="all") ) @@ -20920,7 +20855,7 @@ class PublishersMetrics(DataClassJsonMixin): @dataclass class PushConfig(DataClassJsonMixin): version: str = dc_field(metadata=dc_config(field_name="version")) - offline_only: Optional[bool] = dc_field( + offline_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="offline_only") ) @@ -20928,11 +20863,11 @@ class PushConfig(DataClassJsonMixin): @dataclass class PushNotificationConfig(DataClassJsonMixin): # Whether push notifications are enabled for this feed group - enable_push: Optional[bool] = dc_field( + enable_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="enable_push") ) - # List of notification types that should trigger push notifications (e.g., follow, comment, reaction, comment_reaction, mention) - push_types: Optional[List[str]] = dc_field( + # Allowlist of notification types that may trigger push (e.g. follow, comment, reaction, comment_reaction, mention, or any custom activity.type). Empty or omitted means no types. Built-in notifications match notification_context.trigger.type; manually added notification activities match activity.type. + push_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="push_types") ) @@ -20947,17 +20882,17 @@ class PushNotificationFields(DataClassJsonMixin): ) huawei: "HuaweiConfigFields" = dc_field(metadata=dc_config(field_name="huawei")) xiaomi: "XiaomiConfigFields" = dc_field(metadata=dc_config(field_name="xiaomi")) - providers: "Optional[List[PushProvider]]" = dc_field( + providers: "list[PushProvider] | None" = dc_field( default=None, metadata=dc_config(field_name="providers") ) @dataclass class PushNotificationSettingsResponse(DataClassJsonMixin): - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="disabled") ) - disabled_until: Optional[datetime] = dc_field( + disabled_until: datetime | None = dc_field( default=None, metadata=dc_config( field_name="disabled_until", @@ -20971,19 +20906,19 @@ class PushNotificationSettingsResponse(DataClassJsonMixin): @dataclass class PushPreferenceInput(DataClassJsonMixin): # Set the level of call push notifications for the user. One of: all, none, default - call_level: Optional[str] = dc_field( + call_level: str | None = dc_field( default=None, metadata=dc_config(field_name="call_level") ) # Set the push preferences for a specific channel. If empty it sets the default for the user - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) # Set the level of chat push notifications for the user. Note: "mentions" is deprecated in favor of "direct_mentions". One of: all, mentions, direct_mentions, all_mentions, none, default - chat_level: Optional[str] = dc_field( + chat_level: str | None = dc_field( default=None, metadata=dc_config(field_name="chat_level") ) # Disable push notifications till a certain time - disabled_until: Optional[datetime] = dc_field( + disabled_until: datetime | None = dc_field( default=None, metadata=dc_config( field_name="disabled_until", @@ -20993,34 +20928,34 @@ class PushPreferenceInput(DataClassJsonMixin): ), ) # Set the level of feeds push notifications for the user. One of: all, none, default - feeds_level: Optional[str] = dc_field( + feeds_level: str | None = dc_field( default=None, metadata=dc_config(field_name="feeds_level") ) # Remove the disabled until time. (IE stop snoozing notifications) - remove_disable: Optional[bool] = dc_field( + remove_disable: bool | None = dc_field( default=None, metadata=dc_config(field_name="remove_disable") ) # The user id for which to set the push preferences. Required when using server side auths, defaults to current user with client side auth. - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - chat_preferences: "Optional[ChatPreferencesInput]" = dc_field( + chat_preferences: "ChatPreferencesInput | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) - feeds_preferences: "Optional[FeedsPreferences]" = dc_field( + feeds_preferences: "FeedsPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="feeds_preferences") ) @dataclass class PushPreferencesResponse(DataClassJsonMixin): - call_level: Optional[str] = dc_field( + call_level: str | None = dc_field( default=None, metadata=dc_config(field_name="call_level") ) - chat_level: Optional[str] = dc_field( + chat_level: str | None = dc_field( default=None, metadata=dc_config(field_name="chat_level") ) - disabled_until: Optional[datetime] = dc_field( + disabled_until: datetime | None = dc_field( default=None, metadata=dc_config( field_name="disabled_until", @@ -21029,13 +20964,13 @@ class PushPreferencesResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - feeds_level: Optional[str] = dc_field( + feeds_level: str | None = dc_field( default=None, metadata=dc_config(field_name="feeds_level") ) - chat_preferences: "Optional[ChatPreferencesResponse]" = dc_field( + chat_preferences: "ChatPreferencesResponse | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) - feeds_preferences: "Optional[FeedsPreferencesResponse]" = dc_field( + feeds_preferences: "FeedsPreferencesResponse | None" = dc_field( default=None, metadata=dc_config(field_name="feeds_preferences") ) @@ -21060,37 +20995,37 @@ class PushProvider(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - apn_auth_key: Optional[str] = dc_field( + apn_auth_key: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_auth_key") ) - apn_auth_type: Optional[str] = dc_field( + apn_auth_type: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_auth_type") ) - apn_development: Optional[bool] = dc_field( + apn_development: bool | None = dc_field( default=None, metadata=dc_config(field_name="apn_development") ) - apn_host: Optional[str] = dc_field( + apn_host: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_host") ) - apn_key_id: Optional[str] = dc_field( + apn_key_id: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_key_id") ) - apn_notification_template: Optional[str] = dc_field( + apn_notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_notification_template") ) - apn_p12_cert: Optional[str] = dc_field( + apn_p12_cert: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_p12_cert") ) - apn_team_id: Optional[str] = dc_field( + apn_team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_team_id") ) - apn_topic: Optional[str] = dc_field( + apn_topic: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_topic") ) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - disabled_at: Optional[datetime] = dc_field( + disabled_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="disabled_at", @@ -21099,43 +21034,43 @@ class PushProvider(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - disabled_reason: Optional[str] = dc_field( + disabled_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="disabled_reason") ) - firebase_apn_template: Optional[str] = dc_field( + firebase_apn_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_apn_template") ) - firebase_credentials: Optional[str] = dc_field( + firebase_credentials: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_credentials") ) - firebase_data_template: Optional[str] = dc_field( + firebase_data_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_data_template") ) - firebase_host: Optional[str] = dc_field( + firebase_host: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_host") ) - firebase_notification_template: Optional[str] = dc_field( + firebase_notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_notification_template") ) - firebase_server_key: Optional[str] = dc_field( + firebase_server_key: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_server_key") ) - huawei_app_id: Optional[str] = dc_field( + huawei_app_id: str | None = dc_field( default=None, metadata=dc_config(field_name="huawei_app_id") ) - huawei_app_secret: Optional[str] = dc_field( + huawei_app_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="huawei_app_secret") ) - huawei_host: Optional[str] = dc_field( + huawei_host: str | None = dc_field( default=None, metadata=dc_config(field_name="huawei_host") ) - xiaomi_app_secret: Optional[str] = dc_field( + xiaomi_app_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="xiaomi_app_secret") ) - xiaomi_package_name: Optional[str] = dc_field( + xiaomi_package_name: str | None = dc_field( default=None, metadata=dc_config(field_name="xiaomi_package_name") ) - push_templates: "Optional[List[PushTemplate]]" = dc_field( + push_templates: "list[PushTemplate] | None" = dc_field( default=None, metadata=dc_config(field_name="push_templates") ) @@ -21143,37 +21078,37 @@ class PushProvider(DataClassJsonMixin): @dataclass class PushProviderRequest(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) - apn_auth_key: Optional[str] = dc_field( + apn_auth_key: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_auth_key") ) - apn_auth_type: Optional[str] = dc_field( + apn_auth_type: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_auth_type") ) - apn_development: Optional[bool] = dc_field( + apn_development: bool | None = dc_field( default=None, metadata=dc_config(field_name="apn_development") ) - apn_host: Optional[str] = dc_field( + apn_host: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_host") ) - apn_key_id: Optional[str] = dc_field( + apn_key_id: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_key_id") ) - apn_notification_template: Optional[str] = dc_field( + apn_notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_notification_template") ) - apn_p12_cert: Optional[str] = dc_field( + apn_p12_cert: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_p12_cert") ) - apn_team_id: Optional[str] = dc_field( + apn_team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_team_id") ) - apn_topic: Optional[str] = dc_field( + apn_topic: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_topic") ) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - disabled_at: Optional[datetime] = dc_field( + disabled_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="disabled_at", @@ -21182,38 +21117,38 @@ class PushProviderRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - disabled_reason: Optional[str] = dc_field( + disabled_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="disabled_reason") ) - firebase_apn_template: Optional[str] = dc_field( + firebase_apn_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_apn_template") ) - firebase_credentials: Optional[str] = dc_field( + firebase_credentials: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_credentials") ) - firebase_data_template: Optional[str] = dc_field( + firebase_data_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_data_template") ) - firebase_host: Optional[str] = dc_field( + firebase_host: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_host") ) - firebase_notification_template: Optional[str] = dc_field( + firebase_notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_notification_template") ) - firebase_server_key: Optional[str] = dc_field( + firebase_server_key: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_server_key") ) - huawei_app_id: Optional[str] = dc_field( + huawei_app_id: str | None = dc_field( default=None, metadata=dc_config(field_name="huawei_app_id") ) - huawei_app_secret: Optional[str] = dc_field( + huawei_app_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="huawei_app_secret") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - xiaomi_app_secret: Optional[str] = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + xiaomi_app_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="xiaomi_app_secret") ) - xiaomi_package_name: Optional[str] = dc_field( + xiaomi_package_name: str | None = dc_field( default=None, metadata=dc_config(field_name="xiaomi_package_name") ) @@ -21238,43 +21173,43 @@ class PushProviderResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - apn_auth_key: Optional[str] = dc_field( + apn_auth_key: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_auth_key") ) - apn_auth_type: Optional[str] = dc_field( + apn_auth_type: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_auth_type") ) - apn_development: Optional[bool] = dc_field( + apn_development: bool | None = dc_field( default=None, metadata=dc_config(field_name="apn_development") ) - apn_host: Optional[str] = dc_field( + apn_host: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_host") ) - apn_key_id: Optional[str] = dc_field( + apn_key_id: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_key_id") ) - apn_p12_cert: Optional[str] = dc_field( + apn_p12_cert: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_p12_cert") ) - apn_sandbox_certificate: Optional[bool] = dc_field( + apn_sandbox_certificate: bool | None = dc_field( default=None, metadata=dc_config(field_name="apn_sandbox_certificate") ) - apn_supports_remote_notifications: Optional[bool] = dc_field( + apn_supports_remote_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="apn_supports_remote_notifications") ) - apn_supports_voip_notifications: Optional[bool] = dc_field( + apn_supports_voip_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="apn_supports_voip_notifications") ) - apn_team_id: Optional[str] = dc_field( + apn_team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_team_id") ) - apn_topic: Optional[str] = dc_field( + apn_topic: str | None = dc_field( default=None, metadata=dc_config(field_name="apn_topic") ) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - disabled_at: Optional[datetime] = dc_field( + disabled_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="disabled_at", @@ -21283,37 +21218,37 @@ class PushProviderResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - disabled_reason: Optional[str] = dc_field( + disabled_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="disabled_reason") ) - firebase_apn_template: Optional[str] = dc_field( + firebase_apn_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_apn_template") ) - firebase_credentials: Optional[str] = dc_field( + firebase_credentials: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_credentials") ) - firebase_data_template: Optional[str] = dc_field( + firebase_data_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_data_template") ) - firebase_host: Optional[str] = dc_field( + firebase_host: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_host") ) - firebase_notification_template: Optional[str] = dc_field( + firebase_notification_template: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_notification_template") ) - firebase_server_key: Optional[str] = dc_field( + firebase_server_key: str | None = dc_field( default=None, metadata=dc_config(field_name="firebase_server_key") ) - huawei_app_id: Optional[str] = dc_field( + huawei_app_id: str | None = dc_field( default=None, metadata=dc_config(field_name="huawei_app_id") ) - huawei_app_secret: Optional[str] = dc_field( + huawei_app_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="huawei_app_secret") ) - xiaomi_app_secret: Optional[str] = dc_field( + xiaomi_app_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="xiaomi_app_secret") ) - xiaomi_package_name: Optional[str] = dc_field( + xiaomi_package_name: str | None = dc_field( default=None, metadata=dc_config(field_name="xiaomi_package_name") ) @@ -21338,7 +21273,7 @@ class PushTemplate(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - template: Optional[str] = dc_field( + template: str | None = dc_field( default=None, metadata=dc_config(field_name="template") ) @@ -21372,7 +21307,7 @@ class PushTemplateResponse(DataClassJsonMixin): ) ) # The push notification template - template: Optional[str] = dc_field( + template: str | None = dc_field( default=None, metadata=dc_config(field_name="template") ) @@ -21382,7 +21317,7 @@ class Quality(DataClassJsonMixin): viewer_interruption_note: str = dc_field( metadata=dc_config(field_name="viewer_interruption_note") ) - interruption_incidents: "List[Incident]" = dc_field( + interruption_incidents: "list[Incident]" = dc_field( metadata=dc_config(field_name="interruption_incidents") ) connection_avg_jitter_ms: "Percentiles" = dc_field( @@ -21397,65 +21332,63 @@ class Quality(DataClassJsonMixin): score_bands_by_watch_time_pct: "ScoreBands" = dc_field( metadata=dc_config(field_name="score_bands_by_watch_time_pct") ) - p50_quality_score: Optional[float] = dc_field( + p50_quality_score: float | None = dc_field( default=None, metadata=dc_config(field_name="p50_quality_score") ) - p5_quality_score: Optional[float] = dc_field( + p5_quality_score: float | None = dc_field( default=None, metadata=dc_config(field_name="p5_quality_score") ) - viewer_interruption_rate_pct: Optional[float] = dc_field( + viewer_interruption_rate_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="viewer_interruption_rate_pct") ) @dataclass class QualityScoreReport(DataClassJsonMixin): - histogram: "List[ReportByHistogramBucket]" = dc_field( + histogram: "list[ReportByHistogramBucket]" = dc_field( metadata=dc_config(field_name="histogram") ) @dataclass class QualityScoreReportResponse(DataClassJsonMixin): - daily: "List[DailyAggregateQualityScoreReportResponse]" = dc_field( + daily: "list[DailyAggregateQualityScoreReportResponse]" = dc_field( metadata=dc_config(field_name="daily") ) @dataclass class QueryActivitiesRequest(DataClassJsonMixin): - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) # When true, include both expired and non-expired activities in the result. - include_expired_activities: Optional[bool] = dc_field( + include_expired_activities: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_expired_activities") ) - include_private_activities: Optional[bool] = dc_field( + include_private_activities: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_private_activities") ) # When true, include soft-deleted activities in the result. - include_soft_deleted_activities: Optional[bool] = dc_field( + include_soft_deleted_activities: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_soft_deleted_activities") ) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query. Supports location-based queries with 'near' and 'within_bounds' operators. - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -21464,27 +21397,25 @@ class QueryActivitiesRequest(DataClassJsonMixin): class QueryActivitiesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of activities matching the query - activities: "List[ActivityResponse]" = dc_field( + activities: "list[ActivityResponse]" = dc_field( metadata=dc_config(field_name="activities") ) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryActivityReactionsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - sort: "Optional[List[SortParamRequest]]" = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -21493,27 +21424,27 @@ class QueryActivityReactionsRequest(DataClassJsonMixin): class QueryActivityReactionsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - reactions: "List[FeedsReactionResponse]" = dc_field( + reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="reactions") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryActivitySharesResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - shares: "List[ShareResponse]" = dc_field(metadata=dc_config(field_name="shares")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + shares: "list[ShareResponse]" = dc_field(metadata=dc_config(field_name="shares")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryAggregateCallStatsRequest(DataClassJsonMixin): - _from: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="from")) - to: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="to")) - report_types: Optional[List[str]] = dc_field( + _from: str | None = dc_field(default=None, metadata=dc_config(field_name="from")) + to: str | None = dc_field(default=None, metadata=dc_config(field_name="to")) + report_types: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="report_types") ) @@ -21522,51 +21453,49 @@ class QueryAggregateCallStatsRequest(DataClassJsonMixin): class QueryAggregateCallStatsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - call_duration_report: "Optional[CallDurationReportResponse]" = dc_field( + call_duration_report: "CallDurationReportResponse | None" = dc_field( default=None, metadata=dc_config(field_name="call_duration_report") ) - call_participant_count_report: "Optional[CallParticipantCountReportResponse]" = ( + call_participant_count_report: "CallParticipantCountReportResponse | None" = ( dc_field( default=None, metadata=dc_config(field_name="call_participant_count_report") ) ) - calls_per_day_report: "Optional[CallsPerDayReportResponse]" = dc_field( + calls_per_day_report: "CallsPerDayReportResponse | None" = dc_field( default=None, metadata=dc_config(field_name="calls_per_day_report") ) - network_metrics_report: "Optional[NetworkMetricsReportResponse]" = dc_field( + network_metrics_report: "NetworkMetricsReportResponse | None" = dc_field( default=None, metadata=dc_config(field_name="network_metrics_report") ) - quality_score_report: "Optional[QualityScoreReportResponse]" = dc_field( + quality_score_report: "QualityScoreReportResponse | None" = dc_field( default=None, metadata=dc_config(field_name="quality_score_report") ) - sdk_usage_report: "Optional[SDKUsageReportResponse]" = dc_field( + sdk_usage_report: "SDKUsageReportResponse | None" = dc_field( default=None, metadata=dc_config(field_name="sdk_usage_report") ) - user_feedback_report: "Optional[UserFeedbackReportResponse]" = dc_field( + user_feedback_report: "UserFeedbackReportResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user_feedback_report") ) @dataclass class QueryAppealsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters for appeals - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions for appeals - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -21575,38 +21504,34 @@ class QueryAppealsRequest(DataClassJsonMixin): class QueryAppealsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of Appeal Items - items: "List[AppealItemResponse]" = dc_field(metadata=dc_config(field_name="items")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + items: "list[AppealItemResponse]" = dc_field(metadata=dc_config(field_name="items")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryBannedUsersPayload(DataClassJsonMixin): # Filter conditions to apply to the query - filter_conditions: Dict[str, object] = dc_field( + filter_conditions: dict[str, object] = dc_field( metadata=dc_config(field_name="filter_conditions") ) # Whether to exclude expired bans or not - exclude_expired_bans: Optional[bool] = dc_field( + exclude_expired_bans: bool | None = dc_field( default=None, metadata=dc_config(field_name="exclude_expired_bans") ) # Number of records to return - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) # Number of records to offset - offset: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) - user_id: Optional[str] = dc_field( + offset: int | None = dc_field(default=None, metadata=dc_config(field_name="offset")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -21616,22 +21541,20 @@ class QueryBannedUsersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of found bans - bans: "List[BanResponse]" = dc_field(metadata=dc_config(field_name="bans")) + bans: "list[BanResponse]" = dc_field(metadata=dc_config(field_name="bans")) @dataclass class QueryBookmarkFoldersRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Sorting parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -21640,38 +21563,36 @@ class QueryBookmarkFoldersRequest(DataClassJsonMixin): class QueryBookmarkFoldersResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of bookmark folders matching the query - bookmark_folders: "List[BookmarkFolderResponse]" = dc_field( + bookmark_folders: "list[BookmarkFolderResponse]" = dc_field( metadata=dc_config(field_name="bookmark_folders") ) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryBookmarksRequest(DataClassJsonMixin): - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -21680,30 +21601,28 @@ class QueryBookmarksRequest(DataClassJsonMixin): class QueryBookmarksResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of bookmarks matching the query - bookmarks: "List[BookmarkResponse]" = dc_field( + bookmarks: "list[BookmarkResponse]" = dc_field( metadata=dc_config(field_name="bookmarks") ) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryCallMembersRequest(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) type: str = dc_field(metadata=dc_config(field_name="type")) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) @@ -21712,9 +21631,9 @@ class QueryCallMembersRequest(DataClassJsonMixin): class QueryCallMembersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass @@ -21730,12 +21649,12 @@ class QueryCallParticipantSessionsResponse(DataClassJsonMixin): total_participant_sessions: int = dc_field( metadata=dc_config(field_name="total_participant_sessions") ) - participants_sessions: "List[ParticipantSessionDetails]" = dc_field( + participants_sessions: "list[ParticipantSessionDetails]" = dc_field( metadata=dc_config(field_name="participants_sessions") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - session: "Optional[CallSessionResponse]" = dc_field( + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + session: "CallSessionResponse | None" = dc_field( default=None, metadata=dc_config(field_name="session") ) @@ -21743,7 +21662,7 @@ class QueryCallParticipantSessionsResponse(DataClassJsonMixin): @dataclass class QueryCallParticipantsRequest(DataClassJsonMixin): # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) @@ -21754,12 +21673,12 @@ class QueryCallParticipantsResponse(DataClassJsonMixin): total_participants: int = dc_field( metadata=dc_config(field_name="total_participants") ) - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) - own_capabilities: "List[OwnCapability]" = dc_field( + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + own_capabilities: "list[OwnCapability]" = dc_field( metadata=dc_config(field_name="own_capabilities") ) # List of call participants - participants: "List[CallParticipantResponse]" = dc_field( + participants: "list[CallParticipantResponse]" = dc_field( metadata=dc_config(field_name="participants") ) # Represents a call @@ -21773,13 +21692,13 @@ class QueryCallSessionParticipantStatsResponse(DataClassJsonMixin): call_type: str = dc_field(metadata=dc_config(field_name="call_type")) # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - participants: "List[CallStatsParticipant]" = dc_field( + participants: "list[CallStatsParticipant]" = dc_field( metadata=dc_config(field_name="participants") ) counts: "CallStatsParticipantCounts" = dc_field( metadata=dc_config(field_name="counts") ) - call_ended_at: Optional[datetime] = dc_field( + call_ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="call_ended_at", @@ -21788,7 +21707,7 @@ class QueryCallSessionParticipantStatsResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - call_started_at: Optional[datetime] = dc_field( + call_started_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="call_started_at", @@ -21797,12 +21716,12 @@ class QueryCallSessionParticipantStatsResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - tmp_data_source: Optional[str] = dc_field( + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + tmp_data_source: str | None = dc_field( default=None, metadata=dc_config(field_name="tmp_data_source") ) - call_events: "Optional[List[CallLevelEventPayload]]" = dc_field( + call_events: "list[CallLevelEventPayload] | None" = dc_field( default=None, metadata=dc_config(field_name="call_events") ) @@ -21816,24 +21735,22 @@ class QueryCallSessionParticipantStatsTimelineResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) user_session_id: str = dc_field(metadata=dc_config(field_name="user_session_id")) - events: "List[CallParticipantTimeline]" = dc_field( + events: "list[CallParticipantTimeline]" = dc_field( metadata=dc_config(field_name="events") ) @dataclass class QueryCallSessionStatsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) @@ -21842,11 +21759,11 @@ class QueryCallSessionStatsRequest(DataClassJsonMixin): class QueryCallSessionStatsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - call_stats: "List[CallStatsSessionResponse]" = dc_field( + call_stats: "list[CallStatsSessionResponse]" = dc_field( metadata=dc_config(field_name="call_stats") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass @@ -21859,7 +21776,7 @@ class QueryCallStatsMapResponse(DataClassJsonMixin): counts: "CallStatsParticipantCounts" = dc_field( metadata=dc_config(field_name="counts") ) - call_ended_at: Optional[datetime] = dc_field( + call_ended_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="call_ended_at", @@ -21868,7 +21785,7 @@ class QueryCallStatsMapResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - call_started_at: Optional[datetime] = dc_field( + call_started_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="call_started_at", @@ -21877,10 +21794,10 @@ class QueryCallStatsMapResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - data_source: Optional[str] = dc_field( + data_source: str | None = dc_field( default=None, metadata=dc_config(field_name="data_source") ) - end_time: Optional[datetime] = dc_field( + end_time: datetime | None = dc_field( default=None, metadata=dc_config( field_name="end_time", @@ -21889,7 +21806,7 @@ class QueryCallStatsMapResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - generated_at: Optional[datetime] = dc_field( + generated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="generated_at", @@ -21898,7 +21815,7 @@ class QueryCallStatsMapResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - start_time: Optional[datetime] = dc_field( + start_time: datetime | None = dc_field( default=None, metadata=dc_config( field_name="start_time", @@ -21907,30 +21824,28 @@ class QueryCallStatsMapResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - publishers: "Optional[CallStatsMapPublishers]" = dc_field( + publishers: "CallStatsMapPublishers | None" = dc_field( default=None, metadata=dc_config(field_name="publishers") ) - sfus: "Optional[CallStatsMapSFUs]" = dc_field( + sfus: "CallStatsMapSFUs | None" = dc_field( default=None, metadata=dc_config(field_name="sfus") ) - subscribers: "Optional[CallStatsMapSubscribers]" = dc_field( + subscribers: "CallStatsMapSubscribers | None" = dc_field( default=None, metadata=dc_config(field_name="subscribers") ) @dataclass class QueryCallStatsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) @@ -21939,26 +21854,24 @@ class QueryCallStatsRequest(DataClassJsonMixin): class QueryCallStatsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - reports: "List[CallStatsReportSummaryResponse]" = dc_field( + reports: "list[CallStatsReportSummaryResponse]" = dc_field( metadata=dc_config(field_name="reports") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryCallsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) @@ -21967,28 +21880,26 @@ class QueryCallsRequest(DataClassJsonMixin): class QueryCallsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - calls: "List[CallStateResponseFields]" = dc_field( + calls: "list[CallStateResponseFields]" = dc_field( metadata=dc_config(field_name="calls") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryCampaignsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_limit: Optional[int] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="user_limit") ) - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -21997,63 +21908,57 @@ class QueryCampaignsRequest(DataClassJsonMixin): class QueryCampaignsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - campaigns: "List[CampaignResponse]" = dc_field( + campaigns: "list[CampaignResponse]" = dc_field( metadata=dc_config(field_name="campaigns") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryChannelsRequest(DataClassJsonMixin): # Number of channels to limit - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) # Number of members to limit - member_limit: Optional[int] = dc_field( + member_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="member_limit") ) # Number of messages to limit - message_limit: Optional[int] = dc_field( + message_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="message_limit") ) # Channel pagination offset - offset: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) + offset: int | None = dc_field(default=None, metadata=dc_config(field_name="offset")) # ID of a predefined filter to use instead of filter_conditions - predefined_filter: Optional[str] = dc_field( + predefined_filter: str | None = dc_field( default=None, metadata=dc_config(field_name="predefined_filter") ) # Whether to update channel state or not - state: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="state") - ) - user_id: Optional[str] = dc_field( + state: bool | None = dc_field(default=None, metadata=dc_config(field_name="state")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Top-level keys of the message sender's channel-member custom data to include under member.custom (max 8 keys, 64 chars each) - member_custom_include: Optional[List[str]] = dc_field( + member_custom_include: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="member_custom_include") ) # List of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) # Values to interpolate into the predefined filter template - filter_values: Optional[Dict[str, object]] = dc_field( + filter_values: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_values") ) - sort_values: Optional[Dict[str, object]] = dc_field( + sort_values: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="sort_values") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22063,34 +21968,32 @@ class QueryChannelsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of channels - channels: "List[ChannelStateResponseFields]" = dc_field( + channels: "list[ChannelStateResponseFields]" = dc_field( metadata=dc_config(field_name="channels") ) - predefined_filter: "Optional[ParsedPredefinedFilterResponse]" = dc_field( + predefined_filter: "ParsedPredefinedFilterResponse | None" = dc_field( default=None, metadata=dc_config(field_name="predefined_filter") ) @dataclass class QueryCollectionsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22099,27 +22002,25 @@ class QueryCollectionsRequest(DataClassJsonMixin): class QueryCollectionsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of collections matching the query - collections: "List[CollectionResponse]" = dc_field( + collections: "list[CollectionResponse]" = dc_field( metadata=dc_config(field_name="collections") ) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryCommentReactionsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - sort: "Optional[List[SortParamRequest]]" = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -22128,34 +22029,32 @@ class QueryCommentReactionsRequest(DataClassJsonMixin): class QueryCommentReactionsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - reactions: "List[FeedsReactionResponse]" = dc_field( + reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="reactions") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryCommentsRequest(DataClassJsonMixin): # Filter to apply to the query - filter: Dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) # Returns the comment with the specified ID along with surrounding comments for context - id_around: Optional[str] = dc_field( + id_around: str | None = dc_field( default=None, metadata=dc_config(field_name="id_around") ) # Maximum number of comments to return - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="sort")) - user_id: Optional[str] = dc_field( + sort: str | None = dc_field(default=None, metadata=dc_config(field_name="sort")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22164,35 +22063,33 @@ class QueryCommentsRequest(DataClassJsonMixin): class QueryCommentsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of comments matching the query - comments: "List[CommentResponse]" = dc_field( + comments: "list[CommentResponse]" = dc_field( metadata=dc_config(field_name="comments") ) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryDraftsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22202,24 +22099,22 @@ class QueryDraftsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Drafts - drafts: "List[DraftResponse]" = dc_field(metadata=dc_config(field_name="drafts")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + drafts: "list[DraftResponse]" = dc_field(metadata=dc_config(field_name="drafts")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryFeedMembersRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Sort parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter parameters for the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -22228,13 +22123,13 @@ class QueryFeedMembersRequest(DataClassJsonMixin): class QueryFeedMembersResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of feed members - members: "List[FeedMemberResponse]" = dc_field( + members: "list[FeedMemberResponse]" = dc_field( metadata=dc_config(field_name="members") ) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass @@ -22260,7 +22155,7 @@ class QueryFeedModerationTemplate(DataClassJsonMixin): ) ) # Configuration for a feeds moderation template - config: "Optional[FeedsModerationTemplateConfigPayload]" = dc_field( + config: "FeedsModerationTemplateConfigPayload | None" = dc_field( default=None, metadata=dc_config(field_name="config") ) @@ -22269,31 +22164,27 @@ class QueryFeedModerationTemplate(DataClassJsonMixin): class QueryFeedModerationTemplatesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of moderation templates - templates: "List[QueryFeedModerationTemplate]" = dc_field( + templates: "list[QueryFeedModerationTemplate]" = dc_field( metadata=dc_config(field_name="templates") ) @dataclass class QueryFeedsRequest(DataClassJsonMixin): - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Whether to subscribe to realtime updates - watch: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="watch") - ) + watch: bool | None = dc_field(default=None, metadata=dc_config(field_name="watch")) # Sorting parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -22302,19 +22193,19 @@ class QueryFeedsRequest(DataClassJsonMixin): class QueryFeedsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of feeds matching the query - feeds: "List[FeedResponse]" = dc_field(metadata=dc_config(field_name="feeds")) + feeds: "list[FeedResponse]" = dc_field(metadata=dc_config(field_name="feeds")) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryFeedsUsageStatsRequest(DataClassJsonMixin): # Start date in YYYY-MM-DD format (optional, defaults to 30 days ago) - _from: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="from")) + _from: str | None = dc_field(default=None, metadata=dc_config(field_name="from")) # End date in YYYY-MM-DD format (optional, defaults to today) - to: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="to")) + to: str | None = dc_field(default=None, metadata=dc_config(field_name="to")) @dataclass @@ -22332,24 +22223,22 @@ class QueryFeedsUsageStatsResponse(DataClassJsonMixin): openai_requests: "DailyMetricStatsResponse" = dc_field( metadata=dc_config(field_name="openai_requests") ) - emau: "Optional[EMAUStatsResponse]" = dc_field( + emau: "EMAUStatsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="emau") ) @dataclass class QueryFollowsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Sorting parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -22358,40 +22247,36 @@ class QueryFollowsRequest(DataClassJsonMixin): class QueryFollowsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of follow relationships matching the query - follows: "List[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) + follows: "list[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryFutureChannelBansPayload(DataClassJsonMixin): # Whether to exclude expired bans or not - exclude_expired_bans: Optional[bool] = dc_field( + exclude_expired_bans: bool | None = dc_field( default=None, metadata=dc_config(field_name="exclude_expired_bans") ) # When true, the response includes the total number of bans matching the query filter (independent of limit and offset, capped at 100000) - include_total: Optional[bool] = dc_field( + include_total: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_total") ) # Number of records to return - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) # Number of records to offset - offset: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) + offset: int | None = dc_field(default=None, metadata=dc_config(field_name="offset")) # Filter by the target user ID. Server-side: returns all bans against this user. Client-side: narrows the authenticated user's own bans to this target. - target_user_id: Optional[str] = dc_field( + target_user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="target_user_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22401,35 +22286,31 @@ class QueryFutureChannelBansResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of found future channel bans - bans: "List[FutureChannelBanResponse]" = dc_field( + bans: "list[FutureChannelBanResponse]" = dc_field( metadata=dc_config(field_name="bans") ) # Total number of bans matching the query filter, computed at query time and capped at 100000. Only present when include_total is set on the request; omitted when computing the total timed out - total: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="total") - ) + total: int | None = dc_field(default=None, metadata=dc_config(field_name="total")) @dataclass class QueryLabelResultsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22438,56 +22319,50 @@ class QueryLabelResultsRequest(DataClassJsonMixin): class QueryLabelResultsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of moderation label results - label_results: "List[LabelResultResponse]" = dc_field( + label_results: "list[LabelResultResponse]" = dc_field( metadata=dc_config(field_name="label_results") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryMembersPayload(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) # Filter conditions to apply to the query - filter_conditions: Dict[str, object] = dc_field( + filter_conditions: dict[str, object] = dc_field( metadata=dc_config(field_name="filter_conditions") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - offset: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) - user_id: Optional[str] = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + offset: int | None = dc_field(default=None, metadata=dc_config(field_name="offset")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - members: "Optional[List[ChannelMemberRequest]]" = dc_field( + members: "list[ChannelMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class QueryMembershipLevelsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Sorting parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -22495,40 +22370,36 @@ class QueryMembershipLevelsRequest(DataClassJsonMixin): @dataclass class QueryMembershipLevelsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - membership_levels: "List[MembershipLevelResponse]" = dc_field( + membership_levels: "list[MembershipLevelResponse]" = dc_field( metadata=dc_config(field_name="membership_levels") ) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryMessageFlagsPayload(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - offset: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + offset: int | None = dc_field(default=None, metadata=dc_config(field_name="offset")) # Whether to include deleted messages in the results - show_deleted_messages: Optional[bool] = dc_field( + show_deleted_messages: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_deleted_messages") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22538,7 +22409,7 @@ class QueryMessageFlagsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # The flags that match the query - flags: "List[MessageFlagResponse]" = dc_field( + flags: "list[MessageFlagResponse]" = dc_field( metadata=dc_config(field_name="flags") ) @@ -22546,14 +22417,12 @@ class QueryMessageFlagsResponse(DataClassJsonMixin): @dataclass class QueryMessageHistoryRequest(DataClassJsonMixin): # Filter to apply to the query - filter: Dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) @@ -22563,33 +22432,31 @@ class QueryMessageHistoryResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Message history entries - message_history: "List[MessageHistoryEntryResponse]" = dc_field( + message_history: "list[MessageHistoryEntryResponse]" = dc_field( metadata=dc_config(field_name="message_history") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryModerationConfigsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters for the results - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions for moderation configs - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22598,23 +22465,21 @@ class QueryModerationConfigsRequest(DataClassJsonMixin): class QueryModerationConfigsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of moderation configurations - configs: "List[ConfigResponse]" = dc_field(metadata=dc_config(field_name="configs")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + configs: "list[ConfigResponse]" = dc_field(metadata=dc_config(field_name="configs")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryModerationFlagsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - sort: "Optional[List[SortParamRequest]]" = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions for moderation flags - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -22623,33 +22488,31 @@ class QueryModerationFlagsRequest(DataClassJsonMixin): class QueryModerationFlagsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - flags: "List[ModerationFlagResponse]" = dc_field( + flags: "list[ModerationFlagResponse]" = dc_field( metadata=dc_config(field_name="flags") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryModerationLogsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters for the results - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions for moderation logs - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22658,31 +22521,29 @@ class QueryModerationLogsRequest(DataClassJsonMixin): class QueryModerationLogsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of moderation action logs - logs: "List[ActionLogResponse]" = dc_field(metadata=dc_config(field_name="logs")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + logs: "list[ActionLogResponse]" = dc_field(metadata=dc_config(field_name="logs")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryModerationRulesRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters for the results - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions for moderation rules - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22691,59 +22552,57 @@ class QueryModerationRulesRequest(DataClassJsonMixin): class QueryModerationRulesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # AI image label definitions with metadata for dashboard rendering - ai_image_label_definitions: "List[AIImageLabelDefinition]" = dc_field( + ai_image_label_definitions: "list[AIImageLabelDefinition]" = dc_field( metadata=dc_config(field_name="ai_image_label_definitions") ) # Available harm labels for closed caption rules - closed_caption_labels: List[str] = dc_field( + closed_caption_labels: list[str] = dc_field( metadata=dc_config(field_name="closed_caption_labels") ) # Deprecated: use keyframe_label_classifications instead. Available L1 harm labels for keyframe rules - keyframe_labels: List[str] = dc_field( + keyframe_labels: list[str] = dc_field( metadata=dc_config(field_name="keyframe_labels") ) # Available harm labels for OCR-based rule conditions (keyframe_ocr_rule and ocr_content). Mirrors `closed_caption_labels` today but kept as a separate field so the pickers can diverge later. - ocr_labels: List[str] = dc_field(metadata=dc_config(field_name="ocr_labels")) + ocr_labels: list[str] = dc_field(metadata=dc_config(field_name="ocr_labels")) # List of moderation rules - rules: "List[ModerationRuleV2Response]" = dc_field( + rules: "list[ModerationRuleV2Response]" = dc_field( metadata=dc_config(field_name="rules") ) # Stream L1 to leaf-level label name mapping for AI image rules - ai_image_subclassifications: "Dict[str, List[str]]" = dc_field( + ai_image_subclassifications: "dict[str, list[str]]" = dc_field( metadata=dc_config(field_name="ai_image_subclassifications") ) # Default LLM label descriptions - default_llm_labels: "Dict[str, str]" = dc_field( + default_llm_labels: "dict[str, str]" = dc_field( metadata=dc_config(field_name="default_llm_labels") ) # Recommended LLM label descriptions for username-scoped policies (key starts with 'username:'). Used by /moderation/v2/labels fast-path. - default_username_llm_labels: "Dict[str, str]" = dc_field( + default_username_llm_labels: "dict[str, str]" = dc_field( metadata=dc_config(field_name="default_username_llm_labels") ) # L1 to L2 mapping of keyframe harm label classifications - keyframe_label_classifications: "Dict[str, List[str]]" = dc_field( + keyframe_label_classifications: "dict[str, list[str]]" = dc_field( metadata=dc_config(field_name="keyframe_label_classifications") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryPinnedActivitiesRequest(DataClassJsonMixin): - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Sorting parameters for the query - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filters to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -22752,45 +22611,41 @@ class QueryPinnedActivitiesRequest(DataClassJsonMixin): class QueryPinnedActivitiesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of pinned activities matching the query - pinned_activities: "List[ActivityPinResponse]" = dc_field( + pinned_activities: "list[ActivityPinResponse]" = dc_field( metadata=dc_config(field_name="pinned_activities") ) # Cursor for next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Cursor for previous page - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryPollVotesRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @dataclass class QueryPollsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -22800,31 +22655,41 @@ class QueryPollsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Polls data returned by the query - polls: "List[PollResponseData]" = dc_field(metadata=dc_config(field_name="polls")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + polls: "list[PollResponseData]" = dc_field(metadata=dc_config(field_name="polls")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass -class QueryReactionsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") +class QueryPredefinedFiltersResponse(DataClassJsonMixin): + # Duration of the request in milliseconds + duration: str = dc_field(metadata=dc_config(field_name="duration")) + # Predefined filters + predefined_filters: "list[PredefinedFilterResponse]" = dc_field( + metadata=dc_config(field_name="predefined_filters") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + + +@dataclass +class QueryReactionsRequest(DataClassJsonMixin): + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22833,33 +22698,31 @@ class QueryReactionsRequest(DataClassJsonMixin): class QueryReactionsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - reactions: "List[ReactionResponse]" = dc_field( + reactions: "list[ReactionResponse]" = dc_field( metadata=dc_config(field_name="reactions") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryRemindersRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - user_id: Optional[str] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22869,52 +22732,50 @@ class QueryRemindersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # MessageReminders data returned by the query - reminders: "List[ReminderResponseData]" = dc_field( + reminders: "list[ReminderResponseData]" = dc_field( metadata=dc_config(field_name="reminders") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryReviewQueueRequest(DataClassJsonMixin): - exclude_default_action_config: Optional[bool] = dc_field( + exclude_default_action_config: bool | None = dc_field( default=None, metadata=dc_config(field_name="exclude_default_action_config") ) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) # Number of items to lock (1-25) - lock_count: Optional[int] = dc_field( + lock_count: int | None = dc_field( default=None, metadata=dc_config(field_name="lock_count") ) # Duration for which items should be locked - lock_duration: Optional[int] = dc_field( + lock_duration: int | None = dc_field( default=None, metadata=dc_config(field_name="lock_duration") ) # Whether to lock items for review (true), unlock items (false), or just fetch (nil) - lock_items: Optional[bool] = dc_field( + lock_items: bool | None = dc_field( default=None, metadata=dc_config(field_name="lock_items") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Whether to return only statistics - stats_only: Optional[bool] = dc_field( + stats_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="stats_only") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Sorting parameters for the results - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions for review queue items. Accepts built-in fields (e.g. status, channel_cid, severity, recommended_action) and customer-supplied moderation_payload.custom keys: any key that is not a built-in field is matched against the item's custom moderation data (e.g. {"location_id": "loc-42"}). Use filter_config.filterable_custom_keys to discover which custom keys the app exposes as chips. - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -22923,21 +22784,21 @@ class QueryReviewQueueRequest(DataClassJsonMixin): class QueryReviewQueueResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of review queue items - items: "List[ReviewQueueItemResponse]" = dc_field( + items: "list[ReviewQueueItemResponse]" = dc_field( metadata=dc_config(field_name="items") ) # Configuration for moderation actions - action_config: "Dict[str, List[ModerationActionConfigResponse]]" = dc_field( + action_config: "dict[str, list[ModerationActionConfigResponse]]" = dc_field( metadata=dc_config(field_name="action_config") ) # Statistics about the review queue - stats: Dict[str, object] = dc_field(metadata=dc_config(field_name="stats")) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - default_action_config: "Optional[Dict[str, List[ModerationActionConfigResponse]]]" = dc_field( - default=None, metadata=dc_config(field_name="default_action_config") + stats: dict[str, object] = dc_field(metadata=dc_config(field_name="stats")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + default_action_config: "dict[str, list[ModerationActionConfigResponse]] | None" = ( + dc_field(default=None, metadata=dc_config(field_name="default_action_config")) ) - filter_config: "Optional[FilterConfigResponse]" = dc_field( + filter_config: "FilterConfigResponse | None" = dc_field( default=None, metadata=dc_config(field_name="filter_config") ) @@ -22945,14 +22806,12 @@ class QueryReviewQueueResponse(DataClassJsonMixin): @dataclass class QueryRevisionHistoryRequest(DataClassJsonMixin): # Filter to apply to the query - filter: Dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) @@ -22962,27 +22821,25 @@ class QueryRevisionHistoryResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Revision history entries - revisions: "List[RevisionHistoryResponse]" = dc_field( + revisions: "list[RevisionHistoryResponse]" = dc_field( metadata=dc_config(field_name="revisions") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QuerySegmentTargetsRequest(DataClassJsonMixin): # Limit - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) # Next - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Prev - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) - sort: "Optional[List[SortParamRequest]]" = dc_field( + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="Sort") ) - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="Filter") ) @@ -22992,24 +22849,22 @@ class QuerySegmentTargetsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Targets - targets: "List[SegmentTargetResponse]" = dc_field( + targets: "list[SegmentTargetResponse]" = dc_field( metadata=dc_config(field_name="targets") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QuerySegmentsRequest(DataClassJsonMixin): # Filter to apply to the query - filter: Dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) @@ -23019,33 +22874,31 @@ class QuerySegmentsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Segments - segments: "List[SegmentResponse]" = dc_field( + segments: "list[SegmentResponse]" = dc_field( metadata=dc_config(field_name="segments") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryTeamUsageStatsRequest(DataClassJsonMixin): # End date in YYYY-MM-DD format. Used with start_date for custom date range. Returns daily breakdown. - end_date: Optional[str] = dc_field( + end_date: str | None = dc_field( default=None, metadata=dc_config(field_name="end_date") ) # Maximum number of teams to return per page (default: 30, max: 30) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) # Month in YYYY-MM format (e.g., '2026-01'). Mutually exclusive with start_date/end_date. Returns aggregated monthly values. - month: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="month") - ) + month: str | None = dc_field(default=None, metadata=dc_config(field_name="month")) # Cursor for pagination to fetch next page of teams - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Start date in YYYY-MM-DD format. Used with end_date for custom date range. Returns daily breakdown. - start_date: Optional[str] = dc_field( + start_date: str | None = dc_field( default=None, metadata=dc_config(field_name="start_date") ) + # Filter results to a single team ID. Empty string selects users not assigned to any team. Mutually exclusive with 'next'. + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) @dataclass @@ -23053,42 +22906,40 @@ class QueryTeamUsageStatsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Array of team usage statistics - teams: "List[TeamUsageStats]" = dc_field(metadata=dc_config(field_name="teams")) + teams: "list[TeamUsageStats]" = dc_field(metadata=dc_config(field_name="teams")) # Cursor for pagination to fetch next page - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) @dataclass class QueryThreadsRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - member_limit: Optional[int] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + member_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="member_limit") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Limit the number of participants returned per each thread - participant_limit: Optional[int] = dc_field( + participant_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="participant_limit") ) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Limit the number of replies returned per each thread - reply_limit: Optional[int] = dc_field( + reply_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="reply_limit") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23098,26 +22949,24 @@ class QueryThreadsResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of enriched thread states - threads: "List[ThreadStateResponse]" = dc_field( + threads: "list[ThreadStateResponse]" = dc_field( metadata=dc_config(field_name="threads") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryUserFeedbackRequest(DataClassJsonMixin): - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Filter conditions to apply to the query - filter_conditions: Optional[Dict[str, object]] = dc_field( + filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter_conditions") ) @@ -23126,40 +22975,36 @@ class QueryUserFeedbackRequest(DataClassJsonMixin): class QueryUserFeedbackResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - user_feedback: "List[UserFeedbackResponse]" = dc_field( + user_feedback: "list[UserFeedbackResponse]" = dc_field( metadata=dc_config(field_name="user_feedback") ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) @dataclass class QueryUsersPayload(DataClassJsonMixin): # Filter conditions to apply to the query - filter_conditions: Dict[str, object] = dc_field( + filter_conditions: dict[str, object] = dc_field( metadata=dc_config(field_name="filter_conditions") ) - include_deactivated_users: Optional[bool] = dc_field( + include_deactivated_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_deactivated_users") ) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - offset: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) - presence: Optional[bool] = dc_field( + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + offset: int | None = dc_field(default=None, metadata=dc_config(field_name="offset")) + presence: bool | None = dc_field( default=None, metadata=dc_config(field_name="presence") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of sort parameters - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23169,14 +23014,14 @@ class QueryUsersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Array of users as result of filters applied. - users: "List[FullUserResponse]" = dc_field(metadata=dc_config(field_name="users")) + users: "list[FullUserResponse]" = dc_field(metadata=dc_config(field_name="users")) @dataclass class QueueResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - queue: "Optional[ModerationQueueResponse]" = dc_field( + queue: "ModerationQueueResponse | None" = dc_field( default=None, metadata=dc_config(field_name="queue") ) @@ -23188,14 +23033,14 @@ class RTMPBroadcastRequest(DataClassJsonMixin): # URL for the RTMP server to send the call to stream_url: str = dc_field(metadata=dc_config(field_name="stream_url")) # If provided, will override the call's RTMP settings quality. One of: 360p, 480p, 720p, 1080p, 1440p, portrait-360x640, portrait-480x854, portrait-720x1280, portrait-1080x1920, portrait-1440x2560 - quality: Optional[str] = dc_field( + quality: str | None = dc_field( default=None, metadata=dc_config(field_name="quality") ) # If provided, will be appended at the end of stream_url - stream_key: Optional[str] = dc_field( + stream_key: str | None = dc_field( default=None, metadata=dc_config(field_name="stream_key") ) - layout: "Optional[LayoutSettingsRequest]" = dc_field( + layout: "LayoutSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="layout") ) @@ -23215,13 +23060,13 @@ class RTMPLocation(DataClassJsonMixin): @dataclass class RTMPSettings(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - quality_name: Optional[str] = dc_field( + quality_name: str | None = dc_field( default=None, metadata=dc_config(field_name="quality_name") ) - layout: "Optional[LayoutSettings]" = dc_field( + layout: "LayoutSettings | None" = dc_field( default=None, metadata=dc_config(field_name="layout") ) - location: "Optional[RTMPLocation]" = dc_field( + location: "RTMPLocation | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @@ -23229,14 +23074,14 @@ class RTMPSettings(DataClassJsonMixin): @dataclass class RTMPSettingsRequest(DataClassJsonMixin): # Whether RTMP broadcasting is enabled - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) # Resolution to set for the RTMP stream. One of: 360p, 480p, 720p, 1080p, 1440p, portrait-360x640, portrait-480x854, portrait-720x1280, portrait-1080x1920, portrait-1440x2560 - quality: Optional[str] = dc_field( + quality: str | None = dc_field( default=None, metadata=dc_config(field_name="quality") ) - layout: "Optional[LayoutSettingsRequest]" = dc_field( + layout: "LayoutSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="layout") ) @@ -23253,15 +23098,13 @@ class RankingConfig(DataClassJsonMixin): # Type of ranking algorithm. Required. One of: expression, interest type: str = dc_field(metadata=dc_config(field_name="type")) # Scoring formula. Required when type is 'expression' or 'interest' - score: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="score") - ) + score: str | None = dc_field(default=None, metadata=dc_config(field_name="score")) # Default values for ranking - defaults: Optional[Dict[str, object]] = dc_field( + defaults: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="defaults") ) # Decay functions configuration - functions: "Optional[Dict[str, DecayFunctionConfig]]" = dc_field( + functions: "dict[str, DecayFunctionConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="functions") ) @@ -23269,7 +23112,7 @@ class RankingConfig(DataClassJsonMixin): @dataclass class RawRecordSettings(DataClassJsonMixin): mode: str = dc_field(metadata=dc_config(field_name="mode")) - audio_only: Optional[bool] = dc_field( + audio_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="audio_only") ) @@ -23284,7 +23127,7 @@ class RawRecordingSettingsRequest(DataClassJsonMixin): # Recording mode. One of: available, disabled, auto-on mode: str = dc_field(metadata=dc_config(field_name="mode")) # If true, only audio tracks will be recorded - audio_only: Optional[bool] = dc_field( + audio_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="audio_only") ) @@ -23292,7 +23135,7 @@ class RawRecordingSettingsRequest(DataClassJsonMixin): @dataclass class RawRecordingSettingsResponse(DataClassJsonMixin): mode: str = dc_field(metadata=dc_config(field_name="mode")) - audio_only: Optional[bool] = dc_field( + audio_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="audio_only") ) @@ -23318,7 +23161,7 @@ class Reaction(DataClassJsonMixin): ) ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -23327,37 +23170,31 @@ class Reaction(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - parent: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="parent") - ) - score: Optional[float] = dc_field( - default=None, metadata=dc_config(field_name="score") - ) - target_feeds: Optional[List[str]] = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + parent: str | None = dc_field(default=None, metadata=dc_config(field_name="parent")) + score: float | None = dc_field(default=None, metadata=dc_config(field_name="score")) + target_feeds: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="target_feeds") ) - children_counts: Optional[Dict[str, object]] = dc_field( + children_counts: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="children_counts") ) - data: Optional[Dict[str, object]] = dc_field( + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) - latest_children: "Optional[Dict[str, List[Reaction]]]" = dc_field( + latest_children: "dict[str, list[Reaction]] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_children") ) - moderation: Optional[Dict[str, object]] = dc_field( + moderation: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="moderation") ) - own_children: "Optional[Dict[str, List[Reaction]]]" = dc_field( + own_children: "dict[str, list[Reaction]] | None" = dc_field( default=None, metadata=dc_config(field_name="own_children") ) - target_feeds_extra_data: Optional[Dict[str, object]] = dc_field( + target_feeds_extra_data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="target_feeds_extra_data") ) - user: "Optional[User]" = dc_field( - default=None, metadata=dc_config(field_name="user") - ) + user: "User | None" = dc_field(default=None, metadata=dc_config(field_name="user")) @dataclass @@ -23373,33 +23210,33 @@ class ReactionDeletedEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "reaction.deleted" in this case type: str = dc_field( default="reaction.deleted", metadata=dc_config(field_name="type") ) # The ID of the channel containing the message - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel containing the message - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel containing the message - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - message_id: Optional[str] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="message_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -23409,22 +23246,22 @@ class ReactionDeletedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # The participants of the thread - thread_participants: "Optional[List[UserResponseCommonFields]]" = dc_field( + thread_participants: "list[UserResponseCommonFields] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) - channel_custom: Optional[Dict[str, object]] = dc_field( + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) - reaction: "Optional[ReactionResponse]" = dc_field( + reaction: "ReactionResponse | None" = dc_field( default=None, metadata=dc_config(field_name="reaction") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23454,7 +23291,7 @@ class ReactionGroupResponse(DataClassJsonMixin): # SumScores is the sum of all scores of reactions of this type. Medium allows you to clap articles more than once and shows the sum of all claps from all users. For example, you can send `clap` x5 using `score: 5`. sum_scores: int = dc_field(metadata=dc_config(field_name="sum_scores")) # The most recent users who reacted with this type, ordered by most recent first. - latest_reactions_by: "List[ReactionGroupUserResponse]" = dc_field( + latest_reactions_by: "list[ReactionGroupUserResponse]" = dc_field( metadata=dc_config(field_name="latest_reactions_by") ) @@ -23473,7 +23310,7 @@ class ReactionGroupUserResponse(DataClassJsonMixin): # The ID of the user who reacted. user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23491,31 +23328,31 @@ class ReactionNewEvent(DataClassJsonMixin): ) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "reaction.new" in this case type: str = dc_field(default="reaction.new", metadata=dc_config(field_name="type")) # The ID of the channel containing the message - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel containing the message - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel containing the message - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - message_id: Optional[str] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="message_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -23525,22 +23362,22 @@ class ReactionNewEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # The participants of the thread - thread_participants: "Optional[List[UserResponseCommonFields]]" = dc_field( + thread_participants: "list[UserResponseCommonFields] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) - channel_custom: Optional[Dict[str, object]] = dc_field( + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) - reaction: "Optional[ReactionResponse]" = dc_field( + reaction: "ReactionResponse | None" = dc_field( default=None, metadata=dc_config(field_name="reaction") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23550,7 +23387,7 @@ class ReactionRequest(DataClassJsonMixin): # The type of reaction (e.g. 'like', 'laugh', 'wow') type: str = dc_field(metadata=dc_config(field_name="type")) # Date/time of creation - created_at: Optional[datetime] = dc_field( + created_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="created_at", @@ -23560,11 +23397,9 @@ class ReactionRequest(DataClassJsonMixin): ), ) # Reaction score. If not specified reaction has score of 1 - score: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="score") - ) + score: int | None = dc_field(default=None, metadata=dc_config(field_name="score")) # Date/time of the last update - updated_at: Optional[datetime] = dc_field( + updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="updated_at", @@ -23573,14 +23408,14 @@ class ReactionRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23614,7 +23449,7 @@ class ReactionResponse(DataClassJsonMixin): # User ID user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Custom data for this object - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) @@ -23633,7 +23468,7 @@ class ReactionUpdatedEvent(DataClassJsonMixin): message_id: str = dc_field(metadata=dc_config(field_name="message_id")) # Represents channel in chat channel: "ChannelResponse" = dc_field(metadata=dc_config(field_name="channel")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) # The type of event: "reaction.updated" in this case @@ -23641,24 +23476,24 @@ class ReactionUpdatedEvent(DataClassJsonMixin): default="reaction.updated", metadata=dc_config(field_name="type") ) # The ID of the channel containing the message - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # The number of members in the channel - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) # The number of messages in the channel - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel containing the message - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel containing the message - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -23668,14 +23503,14 @@ class ReactionUpdatedEvent(DataClassJsonMixin): ), ) # The team ID - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - reaction: "Optional[ReactionResponse]" = dc_field( + reaction: "ReactionResponse | None" = dc_field( default=None, metadata=dc_config(field_name="reaction") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23683,13 +23518,13 @@ class ReactionUpdatedEvent(DataClassJsonMixin): @dataclass class ReactivateUserRequest(DataClassJsonMixin): # ID of the user who's reactivating the user - created_by_id: Optional[str] = dc_field( + created_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_id") ) # Set this field to put new name for the user - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # Restore previously deleted messages - restore_messages: Optional[bool] = dc_field( + restore_messages: bool | None = dc_field( default=None, metadata=dc_config(field_name="restore_messages") ) @@ -23699,7 +23534,7 @@ class ReactivateUserResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23707,16 +23542,16 @@ class ReactivateUserResponse(DataClassJsonMixin): @dataclass class ReactivateUsersRequest(DataClassJsonMixin): # User IDs to reactivate - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + user_ids: list[str] = dc_field(metadata=dc_config(field_name="user_ids")) # ID of the user who's reactivating the users - created_by_id: Optional[str] = dc_field( + created_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_id") ) - restore_channels: Optional[bool] = dc_field( + restore_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="restore_channels") ) # Restore previously deleted messages - restore_messages: Optional[bool] = dc_field( + restore_messages: bool | None = dc_field( default=None, metadata=dc_config(field_name="restore_messages") ) @@ -23732,7 +23567,7 @@ class ReactivateUsersResponse(DataClassJsonMixin): class ReadCollectionsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of collections matching the references - collections: "List[CollectionResponse]" = dc_field( + collections: "list[CollectionResponse]" = dc_field( metadata=dc_config(field_name="collections") ) @@ -23755,7 +23590,7 @@ class ReadStateResponse(DataClassJsonMixin): unread_messages: int = dc_field(metadata=dc_config(field_name="unread_messages")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - last_delivered_at: Optional[datetime] = dc_field( + last_delivered_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_delivered_at", @@ -23764,10 +23599,10 @@ class ReadStateResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - last_delivered_message_id: Optional[str] = dc_field( + last_delivered_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="last_delivered_message_id") ) - last_read_message_id: Optional[str] = dc_field( + last_read_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="last_read_message_id") ) @@ -23775,13 +23610,13 @@ class ReadStateResponse(DataClassJsonMixin): @dataclass class RecordSettings(DataClassJsonMixin): mode: str = dc_field(metadata=dc_config(field_name="mode")) - audio_only: Optional[bool] = dc_field( + audio_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="audio_only") ) - quality: Optional[str] = dc_field( + quality: str | None = dc_field( default=None, metadata=dc_config(field_name="quality") ) - layout: "Optional[LayoutSettings]" = dc_field( + layout: "LayoutSettings | None" = dc_field( default=None, metadata=dc_config(field_name="layout") ) @@ -23791,14 +23626,14 @@ class RecordSettingsRequest(DataClassJsonMixin): # Recording mode. One of: available, disabled, auto-on mode: str = dc_field(metadata=dc_config(field_name="mode")) # Whether to record audio only - audio_only: Optional[bool] = dc_field( + audio_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="audio_only") ) # Recording quality. One of: 360p, 480p, 720p, 1080p, 1440p, portrait-360x640, portrait-480x854, portrait-720x1280, portrait-1080x1920, portrait-1440x2560 - quality: Optional[str] = dc_field( + quality: str | None = dc_field( default=None, metadata=dc_config(field_name="quality") ) - layout: "Optional[LayoutSettingsRequest]" = dc_field( + layout: "LayoutSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="layout") ) @@ -23819,11 +23654,11 @@ class RejectAppealRequestPayload(DataClassJsonMixin): @dataclass class RejectFeedMemberInviteRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -23865,16 +23700,16 @@ class ReminderCreatedEvent(DataClassJsonMixin): message_id: str = dc_field(metadata=dc_config(field_name="message_id")) # The ID of the user for whom the reminder was created user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "reminder.created" in this case type: str = dc_field( default="reminder.created", metadata=dc_config(field_name="type") ) # The ID of the parent message, if the reminder is for a thread message - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -23883,7 +23718,7 @@ class ReminderCreatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reminder: "Optional[ReminderResponseData]" = dc_field( + reminder: "ReminderResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="reminder") ) @@ -23905,16 +23740,16 @@ class ReminderDeletedEvent(DataClassJsonMixin): message_id: str = dc_field(metadata=dc_config(field_name="message_id")) # The ID of the user for whom the reminder was created user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "reminder.deleted" in this case type: str = dc_field( default="reminder.deleted", metadata=dc_config(field_name="type") ) # The ID of the parent message, if the reminder is for a thread message - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -23923,7 +23758,7 @@ class ReminderDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reminder: "Optional[ReminderResponseData]" = dc_field( + reminder: "ReminderResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="reminder") ) @@ -23945,15 +23780,15 @@ class ReminderNotificationEvent(DataClassJsonMixin): message_id: str = dc_field(metadata=dc_config(field_name="message_id")) # The ID of the user for whom the reminder was created user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "notification.reminder_due" in this case type: str = dc_field( default="notification.reminder_due", metadata=dc_config(field_name="type") ) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -23962,7 +23797,7 @@ class ReminderNotificationEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reminder: "Optional[ReminderResponseData]" = dc_field( + reminder: "ReminderResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="reminder") ) @@ -23988,7 +23823,7 @@ class ReminderResponseData(DataClassJsonMixin): ) ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - remind_at: Optional[datetime] = dc_field( + remind_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="remind_at", @@ -23998,15 +23833,15 @@ class ReminderResponseData(DataClassJsonMixin): ), ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -24028,16 +23863,16 @@ class ReminderUpdatedEvent(DataClassJsonMixin): message_id: str = dc_field(metadata=dc_config(field_name="message_id")) # The ID of the user for whom the reminder was created user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "reminder.updated" in this case type: str = dc_field( default="reminder.updated", metadata=dc_config(field_name="type") ) # The ID of the parent message, if the reminder is for a thread message - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -24046,7 +23881,7 @@ class ReminderUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - reminder: "Optional[ReminderResponseData]" = dc_field( + reminder: "ReminderResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="reminder") ) @@ -24054,8 +23889,8 @@ class ReminderUpdatedEvent(DataClassJsonMixin): @dataclass class RemoveUserGroupMembersRequest(DataClassJsonMixin): # List of user IDs to remove - member_ids: List[str] = dc_field(metadata=dc_config(field_name="member_ids")) - team_id: Optional[str] = dc_field( + member_ids: list[str] = dc_field(metadata=dc_config(field_name="member_ids")) + team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="team_id") ) @@ -24063,7 +23898,7 @@ class RemoveUserGroupMembersRequest(DataClassJsonMixin): @dataclass class RemoveUserGroupMembersResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - user_group: "Optional[UserGroupResponse]" = dc_field( + user_group: "UserGroupResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -24077,7 +23912,7 @@ class RepliesMeta(DataClassJsonMixin): # Number of unread siblings that match current filters. remaining: int = dc_field(metadata=dc_config(field_name="remaining")) # Opaque cursor to request the next page of siblings. - next_cursor: Optional[str] = dc_field( + next_cursor: str | None = dc_field( default=None, metadata=dc_config(field_name="next_cursor") ) @@ -24087,10 +23922,10 @@ class ReportByHistogramBucket(DataClassJsonMixin): category: str = dc_field(metadata=dc_config(field_name="category")) count: int = dc_field(metadata=dc_config(field_name="count")) sum: float = dc_field(metadata=dc_config(field_name="sum")) - lower_bound: "Optional[Bound]" = dc_field( + lower_bound: "Bound | None" = dc_field( default=None, metadata=dc_config(field_name="lower_bound") ) - upper_bound: "Optional[Bound]" = dc_field( + upper_bound: "Bound | None" = dc_field( default=None, metadata=dc_config(field_name="upper_bound") ) @@ -24098,7 +23933,7 @@ class ReportByHistogramBucket(DataClassJsonMixin): @dataclass class ReportClientEventRequest(DataClassJsonMixin): # Client-side events to report (1-100 per request) - events: "List[ClientEvent]" = dc_field(metadata=dc_config(field_name="events")) + events: "list[ClientEvent]" = dc_field(metadata=dc_config(field_name="events")) @dataclass @@ -24120,10 +23955,10 @@ class ReportResponse(DataClassJsonMixin): @dataclass class ResolutionMetricsTimeSeries(DataClassJsonMixin): - height: "Optional[MetricTimeSeries]" = dc_field( + height: "MetricTimeSeries | None" = dc_field( default=None, metadata=dc_config(field_name="height") ) - width: "Optional[MetricTimeSeries]" = dc_field( + width: "MetricTimeSeries | None" = dc_field( default=None, metadata=dc_config(field_name="width") ) @@ -24137,11 +23972,11 @@ class ResolveSipAuthRequest(DataClassJsonMixin): # SIP trunk number to look up sip_trunk_number: str = dc_field(metadata=dc_config(field_name="sip_trunk_number")) # Host from the SIP From header - from_host: Optional[str] = dc_field( + from_host: str | None = dc_field( default=None, metadata=dc_config(field_name="from_host") ) # Transport-layer source IP address of the SIP request - source_ip: Optional[str] = dc_field( + source_ip: str | None = dc_field( default=None, metadata=dc_config(field_name="source_ip") ) @@ -24152,15 +23987,15 @@ class ResolveSipAuthResponse(DataClassJsonMixin): auth_result: str = dc_field(metadata=dc_config(field_name="auth_result")) duration: str = dc_field(metadata=dc_config(field_name="duration")) # Password for digest authentication (when auth_result is password) - password: Optional[str] = dc_field( + password: str | None = dc_field( default=None, metadata=dc_config(field_name="password") ) # ID of the matched SIP trunk - trunk_id: Optional[str] = dc_field( + trunk_id: str | None = dc_field( default=None, metadata=dc_config(field_name="trunk_id") ) # Username for digest authentication (when auth_result is password) - username: Optional[str] = dc_field( + username: str | None = dc_field( default=None, metadata=dc_config(field_name="username") ) @@ -24174,19 +24009,19 @@ class ResolveSipInboundRequest(DataClassJsonMixin): # SIP trunk number to resolve sip_trunk_number: str = dc_field(metadata=dc_config(field_name="sip_trunk_number")) # Optional routing number for routing number-based call routing (10 digits) - routing_number: Optional[str] = dc_field( + routing_number: str | None = dc_field( default=None, metadata=dc_config(field_name="routing_number") ) # Optional pre-authenticated trunk ID (from PreAuth no-auth flow) - trunk_id: Optional[str] = dc_field( + trunk_id: str | None = dc_field( default=None, metadata=dc_config(field_name="trunk_id") ) # SIP digest challenge authentication data - challenge: "Optional[SIPChallengeRequest]" = dc_field( + challenge: "SIPChallengeRequest | None" = dc_field( default=None, metadata=dc_config(field_name="challenge") ) # Optional SIP headers as key-value pairs - sip_headers: "Optional[Dict[str, str]]" = dc_field( + sip_headers: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="sip_headers") ) @@ -24199,11 +24034,11 @@ class ResolveSipInboundResponse(DataClassJsonMixin): metadata=dc_config(field_name="credentials") ) # SIP Inbound Routing Rule response - sip_routing_rule: "Optional[SIPInboundRoutingRuleResponse]" = dc_field( + sip_routing_rule: "SIPInboundRoutingRuleResponse | None" = dc_field( default=None, metadata=dc_config(field_name="sip_routing_rule") ) # SIP trunk information - sip_trunk: "Optional[SIPTrunkResponse]" = dc_field( + sip_trunk: "SIPTrunkResponse | None" = dc_field( default=None, metadata=dc_config(field_name="sip_trunk") ) @@ -24217,18 +24052,18 @@ class Response(DataClassJsonMixin): @dataclass class RestoreActionRequestPayload(DataClassJsonMixin): # Reason for the appeal decision - decision_reason: Optional[str] = dc_field( + decision_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="decision_reason") ) @dataclass class RestoreActivityRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -24241,11 +24076,11 @@ class RestoreActivityResponse(DataClassJsonMixin): @dataclass class RestoreCommentRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -24272,7 +24107,7 @@ class RestoreFeedGroupResponse(DataClassJsonMixin): @dataclass class RestoreUsersRequest(DataClassJsonMixin): - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + user_ids: list[str] = dc_field(metadata=dc_config(field_name="user_ids")) @dataclass @@ -24308,11 +24143,11 @@ class ReviewQueueItemNewEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="review_queue_item.new", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -24322,13 +24157,13 @@ class ReviewQueueItemNewEvent(DataClassJsonMixin): ), ) # The flags associated with this review queue item - flags: "Optional[List[ModerationFlagResponse]]" = dc_field( + flags: "list[ModerationFlagResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="flags") ) - action: "Optional[ActionLogResponse]" = dc_field( + action: "ActionLogResponse | None" = dc_field( default=None, metadata=dc_config(field_name="action") ) - review_queue_item: "Optional[ReviewQueueItemResponse]" = dc_field( + review_queue_item: "ReviewQueueItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="review_queue_item") ) @@ -24378,19 +24213,19 @@ class ReviewQueueItemResponse(DataClassJsonMixin): ) ) # Moderation actions taken - actions: "List[ActionLogResponse]" = dc_field( + actions: "list[ActionLogResponse]" = dc_field( metadata=dc_config(field_name="actions") ) # Associated ban records - bans: "List[BanInfoResponse]" = dc_field(metadata=dc_config(field_name="bans")) + bans: "list[BanInfoResponse]" = dc_field(metadata=dc_config(field_name="bans")) # Associated flag records - flags: "List[ModerationFlagResponse]" = dc_field( + flags: "list[ModerationFlagResponse]" = dc_field( metadata=dc_config(field_name="flags") ) # Detected languages in the content - languages: List[str] = dc_field(metadata=dc_config(field_name="languages")) + languages: list[str] = dc_field(metadata=dc_config(field_name="languages")) # When the review was completed - completed_at: Optional[datetime] = dc_field( + completed_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="completed_at", @@ -24399,15 +24234,15 @@ class ReviewQueueItemResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - config_key: Optional[str] = dc_field( + config_key: str | None = dc_field( default=None, metadata=dc_config(field_name="config_key") ) # ID of who created the entity - entity_creator_id: Optional[str] = dc_field( + entity_creator_id: str | None = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) # When the item was escalated - escalated_at: Optional[datetime] = dc_field( + escalated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="escalated_at", @@ -24417,11 +24252,11 @@ class ReviewQueueItemResponse(DataClassJsonMixin): ), ) # ID of the moderator who escalated the item - escalated_by: Optional[str] = dc_field( + escalated_by: str | None = dc_field( default=None, metadata=dc_config(field_name="escalated_by") ) # When the item was reviewed - reviewed_at: Optional[datetime] = dc_field( + reviewed_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="reviewed_at", @@ -24431,48 +24266,48 @@ class ReviewQueueItemResponse(DataClassJsonMixin): ), ) # Teams associated with this item - teams: Optional[List[str]] = dc_field( + teams: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="teams") ) - activity: "Optional[EnrichedActivity]" = dc_field( + activity: "EnrichedActivity | None" = dc_field( default=None, metadata=dc_config(field_name="activity") ) - appeal: "Optional[AppealItemResponse]" = dc_field( + appeal: "AppealItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="appeal") ) # User response object - assigned_to: "Optional[UserResponse]" = dc_field( + assigned_to: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="assigned_to") ) - call: "Optional[ModerationCallResponse]" = dc_field( + call: "ModerationCallResponse | None" = dc_field( default=None, metadata=dc_config(field_name="call") ) - entity_creator: "Optional[EntityCreatorResponse]" = dc_field( + entity_creator: "EntityCreatorResponse | None" = dc_field( default=None, metadata=dc_config(field_name="entity_creator") ) - escalation_metadata: "Optional[EscalationMetadata]" = dc_field( + escalation_metadata: "EscalationMetadata | None" = dc_field( default=None, metadata=dc_config(field_name="escalation_metadata") ) - feeds_v2_activity: "Optional[EnrichedActivity]" = dc_field( + feeds_v2_activity: "EnrichedActivity | None" = dc_field( default=None, metadata=dc_config(field_name="feeds_v2_activity") ) - feeds_v2_reaction: "Optional[Reaction]" = dc_field( + feeds_v2_reaction: "Reaction | None" = dc_field( default=None, metadata=dc_config(field_name="feeds_v2_reaction") ) - feeds_v3_activity: "Optional[FeedsV3ActivityResponse]" = dc_field( + feeds_v3_activity: "FeedsV3ActivityResponse | None" = dc_field( default=None, metadata=dc_config(field_name="feeds_v3_activity") ) - feeds_v3_comment: "Optional[FeedsV3CommentResponse]" = dc_field( + feeds_v3_comment: "FeedsV3CommentResponse | None" = dc_field( default=None, metadata=dc_config(field_name="feeds_v3_comment") ) - message: "Optional[ChatMessageResponse]" = dc_field( + message: "ChatMessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) # Content payload for moderation - moderation_payload: "Optional[ModerationPayloadResponse]" = dc_field( + moderation_payload: "ModerationPayloadResponse | None" = dc_field( default=None, metadata=dc_config(field_name="moderation_payload") ) - reaction: "Optional[Reaction]" = dc_field( + reaction: "Reaction | None" = dc_field( default=None, metadata=dc_config(field_name="reaction") ) @@ -24487,11 +24322,11 @@ class ReviewQueueItemUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="review_queue_item.updated", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -24501,13 +24336,13 @@ class ReviewQueueItemUpdatedEvent(DataClassJsonMixin): ), ) # The flags associated with this review queue item - flags: "Optional[List[ModerationFlagResponse]]" = dc_field( + flags: "list[ModerationFlagResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="flags") ) - action: "Optional[ActionLogResponse]" = dc_field( + action: "ActionLogResponse | None" = dc_field( default=None, metadata=dc_config(field_name="action") ) - review_queue_item: "Optional[ReviewQueueItemResponse]" = dc_field( + review_queue_item: "ReviewQueueItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="review_queue_item") ) @@ -24527,10 +24362,10 @@ class RevisionHistoryResponse(DataClassJsonMixin): object_id: str = dc_field(metadata=dc_config(field_name="object_id")) object_type: str = dc_field(metadata=dc_config(field_name="object_type")) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - changed_fields: Optional[List[str]] = dc_field( + changed_fields: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="changed_fields") ) - previous_obj_serialized: Optional[Dict[str, object]] = dc_field( + previous_obj_serialized: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="previous_obj_serialized") ) @@ -24538,11 +24373,9 @@ class RevisionHistoryResponse(DataClassJsonMixin): @dataclass class RingCallRequest(DataClassJsonMixin): # Indicate if call should be video - video: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="video") - ) + video: bool | None = dc_field(default=None, metadata=dc_config(field_name="video")) # Members that should receive the ring. If no ids are provided, all call members who are not already in the call will receive ring notifications. - members_ids: Optional[List[str]] = dc_field( + members_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="members_ids") ) @@ -24551,7 +24384,7 @@ class RingCallRequest(DataClassJsonMixin): class RingCallResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of members ringing notification was sent to - members_ids: List[str] = dc_field(metadata=dc_config(field_name="members_ids")) + members_ids: list[str] = dc_field(metadata=dc_config(field_name="members_ids")) @dataclass @@ -24578,7 +24411,7 @@ class RingSettingsRequest(DataClassJsonMixin): metadata=dc_config(field_name="incoming_call_timeout_ms") ) # When a callee doesn't accept or reject a ring call in this time a missed call event will be sent - missed_call_timeout_ms: Optional[int] = dc_field( + missed_call_timeout_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="missed_call_timeout_ms") ) @@ -24621,145 +24454,136 @@ class Role(DataClassJsonMixin): ) ) # List of scopes where this role is currently present. `.app` means that role is present in app-level grants - scopes: List[str] = dc_field(metadata=dc_config(field_name="scopes")) + scopes: list[str] = dc_field(metadata=dc_config(field_name="scopes")) @dataclass class RuleBuilderAction(DataClassJsonMixin): - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - skip_inbox: Optional[bool] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + skip_inbox: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_inbox") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - ban_options: "Optional[BanOptions]" = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + ban_options: "BanOptions | None" = dc_field( default=None, metadata=dc_config(field_name="ban_options") ) - call_options: "Optional[CallActionOptions]" = dc_field( + call_options: "CallActionOptions | None" = dc_field( default=None, metadata=dc_config(field_name="call_options") ) - flag_user_options: "Optional[FlagUserOptions]" = dc_field( + flag_user_options: "FlagUserOptions | None" = dc_field( default=None, metadata=dc_config(field_name="flag_user_options") ) @dataclass class RuleBuilderCondition(DataClassJsonMixin): - confidence: Optional[float] = dc_field( + confidence: float | None = dc_field( default=None, metadata=dc_config(field_name="confidence") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - call_custom_property_params: "Optional[CallCustomPropertyParameters]" = dc_field( + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) + call_custom_property_params: "CallCustomPropertyParameters | None" = dc_field( default=None, metadata=dc_config(field_name="call_custom_property_params") ) - call_type_rule_params: "Optional[CallTypeRuleParameters]" = dc_field( + call_type_rule_params: "CallTypeRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="call_type_rule_params") ) - call_violation_count_params: "Optional[CallViolationCountParameters]" = dc_field( + call_violation_count_params: "CallViolationCountParameters | None" = dc_field( default=None, metadata=dc_config(field_name="call_violation_count_params") ) - channel_message_count_rule_params: "Optional[ChannelMessageCountRuleParameters]" = ( + channel_message_count_rule_params: "ChannelMessageCountRuleParameters | None" = ( dc_field( default=None, metadata=dc_config(field_name="channel_message_count_rule_params"), ) ) - closed_caption_rule_params: "Optional[ClosedCaptionRuleParameters]" = dc_field( + closed_caption_rule_params: "ClosedCaptionRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="closed_caption_rule_params") ) - content_count_rule_params: "Optional[ContentCountRuleParameters]" = dc_field( + content_count_rule_params: "ContentCountRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="content_count_rule_params") ) - content_custom_property_count_params: "Optional[ContentCustomPropertyCountParameters]" = dc_field( + content_custom_property_count_params: "ContentCustomPropertyCountParameters | None" = dc_field( default=None, metadata=dc_config(field_name="content_custom_property_count_params"), ) - content_custom_property_params: "Optional[ContentCustomPropertyParameters]" = ( - dc_field( - default=None, - metadata=dc_config(field_name="content_custom_property_params"), - ) + content_custom_property_params: "ContentCustomPropertyParameters | None" = dc_field( + default=None, metadata=dc_config(field_name="content_custom_property_params") ) - content_flag_count_rule_params: "Optional[FlagCountRuleParameters]" = dc_field( + content_flag_count_rule_params: "FlagCountRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="content_flag_count_rule_params") ) - flood_identical_params: "Optional[FloodIdenticalRuleParameters]" = dc_field( + flood_identical_params: "FloodIdenticalRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="flood_identical_params") ) - flood_similar_params: "Optional[FloodSimilarRuleParameters]" = dc_field( + flood_similar_params: "FloodSimilarRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="flood_similar_params") ) - image_content_params: "Optional[ImageContentParameters]" = dc_field( + image_content_params: "ImageContentParameters | None" = dc_field( default=None, metadata=dc_config(field_name="image_content_params") ) - image_rule_params: "Optional[ImageRuleParameters]" = dc_field( + image_rule_params: "ImageRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="image_rule_params") ) - ip_content_count_rule_params: "Optional[IPContentCountRuleParameters]" = dc_field( + ip_content_count_rule_params: "IPContentCountRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="ip_content_count_rule_params") ) - ip_flag_count_rule_params: "Optional[IPFlagCountRuleParameters]" = dc_field( + ip_flag_count_rule_params: "IPFlagCountRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="ip_flag_count_rule_params") ) - keyframe_ocr_rule_params: "Optional[KeyframeOCRRuleParameters]" = dc_field( + keyframe_ocr_rule_params: "KeyframeOCRRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="keyframe_ocr_rule_params") ) - keyframe_rule_params: "Optional[KeyframeRuleParameters]" = dc_field( + keyframe_rule_params: "KeyframeRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="keyframe_rule_params") ) - ocr_content_params: "Optional[OCRContentParameters]" = dc_field( + ocr_content_params: "OCRContentParameters | None" = dc_field( default=None, metadata=dc_config(field_name="ocr_content_params") ) - text_content_params: "Optional[TextContentParameters]" = dc_field( + text_content_params: "TextContentParameters | None" = dc_field( default=None, metadata=dc_config(field_name="text_content_params") ) - text_rule_params: "Optional[TextRuleParameters]" = dc_field( + text_rule_params: "TextRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="text_rule_params") ) - user_created_within_params: "Optional[UserCreatedWithinParameters]" = dc_field( + user_created_within_params: "UserCreatedWithinParameters | None" = dc_field( default=None, metadata=dc_config(field_name="user_created_within_params") ) - user_custom_property_params: "Optional[UserCustomPropertyParameters]" = dc_field( + user_custom_property_params: "UserCustomPropertyParameters | None" = dc_field( default=None, metadata=dc_config(field_name="user_custom_property_params") ) - user_flag_count_rule_params: "Optional[FlagCountRuleParameters]" = dc_field( + user_flag_count_rule_params: "FlagCountRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="user_flag_count_rule_params") ) - user_identical_content_count_params: "Optional[UserIdenticalContentCountParameters]" = dc_field( + user_identical_content_count_params: "UserIdenticalContentCountParameters | None" = dc_field( default=None, metadata=dc_config(field_name="user_identical_content_count_params"), ) - user_role_params: "Optional[UserRoleParameters]" = dc_field( + user_role_params: "UserRoleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="user_role_params") ) - user_rule_params: "Optional[UserRuleParameters]" = dc_field( + user_rule_params: "UserRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="user_rule_params") ) - video_content_params: "Optional[VideoContentParameters]" = dc_field( + video_content_params: "VideoContentParameters | None" = dc_field( default=None, metadata=dc_config(field_name="video_content_params") ) - video_rule_params: "Optional[VideoRuleParameters]" = dc_field( + video_rule_params: "VideoRuleParameters | None" = dc_field( default=None, metadata=dc_config(field_name="video_rule_params") ) @dataclass class RuleBuilderConditionGroup(DataClassJsonMixin): - logic: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="logic") - ) - conditions: "Optional[List[RuleBuilderCondition]]" = dc_field( + logic: str | None = dc_field(default=None, metadata=dc_config(field_name="logic")) + conditions: "list[RuleBuilderCondition] | None" = dc_field( default=None, metadata=dc_config(field_name="conditions") ) @dataclass class RuleBuilderConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - rules: "Optional[List[RuleBuilderRule]]" = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + rules: "list[RuleBuilderRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -24767,33 +24591,31 @@ class RuleBuilderConfig(DataClassJsonMixin): @dataclass class RuleBuilderRule(DataClassJsonMixin): rule_type: str = dc_field(metadata=dc_config(field_name="rule_type")) - cooldown_period: Optional[str] = dc_field( + cooldown_period: str | None = dc_field( default=None, metadata=dc_config(field_name="cooldown_period") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - logic: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="logic") - ) - action_sequences: "Optional[List[CallRuleActionSequence]]" = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + logic: str | None = dc_field(default=None, metadata=dc_config(field_name="logic")) + action_sequences: "list[CallRuleActionSequence] | None" = dc_field( default=None, metadata=dc_config(field_name="action_sequences") ) - conditions: "Optional[List[RuleBuilderCondition]]" = dc_field( + conditions: "list[RuleBuilderCondition] | None" = dc_field( default=None, metadata=dc_config(field_name="conditions") ) - groups: "Optional[List[RuleBuilderConditionGroup]]" = dc_field( + groups: "list[RuleBuilderConditionGroup] | None" = dc_field( default=None, metadata=dc_config(field_name="groups") ) - action: "Optional[RuleBuilderAction]" = dc_field( + action: "RuleBuilderAction | None" = dc_field( default=None, metadata=dc_config(field_name="action") ) @dataclass class RunStats(DataClassJsonMixin): - channels_deleted: Optional[int] = dc_field( + channels_deleted: int | None = dc_field( default=None, metadata=dc_config(field_name="channels_deleted") ) - messages_deleted: Optional[int] = dc_field( + messages_deleted: int | None = dc_field( default=None, metadata=dc_config(field_name="messages_deleted") ) @@ -24803,29 +24625,29 @@ class S3Request(DataClassJsonMixin): # The AWS region where the bucket is hosted s3_region: str = dc_field(metadata=dc_config(field_name="s3_region")) # The AWS API key. To use Amazon S3 as your storage provider, you have two authentication options: IAM role or API key. If you do not specify the `s3_api_key` parameter, Stream will use IAM role authentication. In that case make sure to have the correct IAM role configured for your application. - s3_api_key: Optional[str] = dc_field( + s3_api_key: str | None = dc_field( default=None, metadata=dc_config(field_name="s3_api_key") ) # The custom endpoint for S3. If you want to use a custom endpoint, you must also provide the `s3_api_key` and `s3_secret` parameters. - s3_custom_endpoint_url: Optional[str] = dc_field( + s3_custom_endpoint_url: str | None = dc_field( default=None, metadata=dc_config(field_name="s3_custom_endpoint_url") ) # The AWS API Secret - s3_secret: Optional[str] = dc_field( + s3_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="s3_secret") ) @dataclass class SDKUsageReport(DataClassJsonMixin): - per_sdk_usage: "Dict[str, Optional[PerSDKUsageReport]]" = dc_field( + per_sdk_usage: "dict[str, PerSDKUsageReport | None]" = dc_field( metadata=dc_config(field_name="per_sdk_usage") ) @dataclass class SDKUsageReportResponse(DataClassJsonMixin): - daily: "List[DailyAggregateSDKUsageReportResponse]" = dc_field( + daily: "list[DailyAggregateSDKUsageReportResponse]" = dc_field( metadata=dc_config(field_name="daily") ) @@ -24840,15 +24662,13 @@ class SFULocationResponse(DataClassJsonMixin): ) # Geographic location metadata location: "LocationResponse" = dc_field(metadata=dc_config(field_name="location")) - count: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="count") - ) + count: int | None = dc_field(default=None, metadata=dc_config(field_name="count")) @dataclass class SIPCallConfigsRequest(DataClassJsonMixin): # Custom data associated with the call - custom_data: Optional[Dict[str, object]] = dc_field( + custom_data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom_data") ) @@ -24856,7 +24676,7 @@ class SIPCallConfigsRequest(DataClassJsonMixin): @dataclass class SIPCallConfigsResponse(DataClassJsonMixin): # Custom data associated with the call - custom_data: Dict[str, object] = dc_field( + custom_data: dict[str, object] = dc_field( metadata=dc_config(field_name="custom_data") ) @@ -24866,7 +24686,7 @@ class SIPCallerConfigsRequest(DataClassJsonMixin): # Unique identifier for the caller (handlebars template) id: str = dc_field(metadata=dc_config(field_name="id")) # Custom data associated with the caller (values are handlebars templates) - custom_data: Optional[Dict[str, object]] = dc_field( + custom_data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom_data") ) @@ -24876,7 +24696,7 @@ class SIPCallerConfigsResponse(DataClassJsonMixin): # Unique identifier for the caller id: str = dc_field(metadata=dc_config(field_name="id")) # Custom data associated with the caller - custom_data: Dict[str, object] = dc_field( + custom_data: dict[str, object] = dc_field( metadata=dc_config(field_name="custom_data") ) @@ -24884,63 +24704,49 @@ class SIPCallerConfigsResponse(DataClassJsonMixin): @dataclass class SIPChallengeRequest(DataClassJsonMixin): # Deprecated: A1 hash for backward compatibility - a1: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="a1")) + a1: str | None = dc_field(default=None, metadata=dc_config(field_name="a1")) # Hash algorithm (e.g., MD5, SHA-256) - algorithm: Optional[str] = dc_field( + algorithm: str | None = dc_field( default=None, metadata=dc_config(field_name="algorithm") ) # Character set - charset: Optional[str] = dc_field( + charset: str | None = dc_field( default=None, metadata=dc_config(field_name="charset") ) # Client nonce for qop=auth - cnonce: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="cnonce") - ) + cnonce: str | None = dc_field(default=None, metadata=dc_config(field_name="cnonce")) # SIP method (e.g., INVITE) - method: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="method") - ) + method: str | None = dc_field(default=None, metadata=dc_config(field_name="method")) # Nonce count for qop=auth - nc: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="nc")) + nc: str | None = dc_field(default=None, metadata=dc_config(field_name="nc")) # Server nonce - nonce: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="nonce") - ) + nonce: str | None = dc_field(default=None, metadata=dc_config(field_name="nonce")) # Opaque value - opaque: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="opaque") - ) + opaque: str | None = dc_field(default=None, metadata=dc_config(field_name="opaque")) # Authentication realm - realm: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="realm") - ) + realm: str | None = dc_field(default=None, metadata=dc_config(field_name="realm")) # Digest response hash from client - response: Optional[str] = dc_field( + response: str | None = dc_field( default=None, metadata=dc_config(field_name="response") ) # Whether the nonce is stale - stale: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="stale") - ) + stale: bool | None = dc_field(default=None, metadata=dc_config(field_name="stale")) # Request URI - uri: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="uri")) + uri: str | None = dc_field(default=None, metadata=dc_config(field_name="uri")) # Whether to hash the username - userhash: Optional[bool] = dc_field( + userhash: bool | None = dc_field( default=None, metadata=dc_config(field_name="userhash") ) # Username for authentication - username: Optional[str] = dc_field( + username: str | None = dc_field( default=None, metadata=dc_config(field_name="username") ) # Domain list - domain: Optional[List[str]] = dc_field( + domain: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="domain") ) # Quality of protection options - qop: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="qop") - ) + qop: list[str] | None = dc_field(default=None, metadata=dc_config(field_name="qop")) @dataclass @@ -24962,23 +24768,23 @@ class SIPDirectRoutingRuleCallConfigsResponse(DataClassJsonMixin): @dataclass class SIPInboundRoutingRulePinConfigsRequest(DataClassJsonMixin): # Optional webhook URL for custom PIN handling - custom_webhook_url: Optional[str] = dc_field( + custom_webhook_url: str | None = dc_field( default=None, metadata=dc_config(field_name="custom_webhook_url") ) # Prompt message for failed PIN attempts - pin_failed_attempt_prompt: Optional[str] = dc_field( + pin_failed_attempt_prompt: str | None = dc_field( default=None, metadata=dc_config(field_name="pin_failed_attempt_prompt") ) # Prompt message for hangup after PIN input - pin_hangup_prompt: Optional[str] = dc_field( + pin_hangup_prompt: str | None = dc_field( default=None, metadata=dc_config(field_name="pin_hangup_prompt") ) # Prompt message for PIN input - pin_prompt: Optional[str] = dc_field( + pin_prompt: str | None = dc_field( default=None, metadata=dc_config(field_name="pin_prompt") ) # Prompt message for successful PIN input - pin_success_prompt: Optional[str] = dc_field( + pin_success_prompt: str | None = dc_field( default=None, metadata=dc_config(field_name="pin_success_prompt") ) @@ -24986,23 +24792,23 @@ class SIPInboundRoutingRulePinConfigsRequest(DataClassJsonMixin): @dataclass class SIPInboundRoutingRulePinConfigsResponse(DataClassJsonMixin): # Optional webhook URL for custom PIN handling - custom_webhook_url: Optional[str] = dc_field( + custom_webhook_url: str | None = dc_field( default=None, metadata=dc_config(field_name="custom_webhook_url") ) # Prompt message for failed PIN attempts - pin_failed_attempt_prompt: Optional[str] = dc_field( + pin_failed_attempt_prompt: str | None = dc_field( default=None, metadata=dc_config(field_name="pin_failed_attempt_prompt") ) # Prompt message for hangup after PIN input - pin_hangup_prompt: Optional[str] = dc_field( + pin_hangup_prompt: str | None = dc_field( default=None, metadata=dc_config(field_name="pin_hangup_prompt") ) # Prompt message for PIN input - pin_prompt: Optional[str] = dc_field( + pin_prompt: str | None = dc_field( default=None, metadata=dc_config(field_name="pin_prompt") ) # Prompt message for successful PIN input - pin_success_prompt: Optional[str] = dc_field( + pin_success_prompt: str | None = dc_field( default=None, metadata=dc_config(field_name="pin_success_prompt") ) @@ -25012,33 +24818,33 @@ class SIPInboundRoutingRuleRequest(DataClassJsonMixin): # Name of the SIP Inbound Routing Rule name: str = dc_field(metadata=dc_config(field_name="name")) # List of SIP trunk IDs - trunk_ids: List[str] = dc_field(metadata=dc_config(field_name="trunk_ids")) + trunk_ids: list[str] = dc_field(metadata=dc_config(field_name="trunk_ids")) # Configuration for SIP caller settings caller_configs: "SIPCallerConfigsRequest" = dc_field( metadata=dc_config(field_name="caller_configs") ) # List of called numbers - called_numbers: Optional[List[str]] = dc_field( + called_numbers: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="called_numbers") ) # List of caller numbers (optional) - caller_numbers: Optional[List[str]] = dc_field( + caller_numbers: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="caller_numbers") ) # Configuration for SIP call settings - call_configs: "Optional[SIPCallConfigsRequest]" = dc_field( + call_configs: "SIPCallConfigsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="call_configs") ) # Configuration for direct routing rule calls - direct_routing_configs: "Optional[SIPDirectRoutingRuleCallConfigsRequest]" = ( - dc_field(default=None, metadata=dc_config(field_name="direct_routing_configs")) + direct_routing_configs: "SIPDirectRoutingRuleCallConfigsRequest | None" = dc_field( + default=None, metadata=dc_config(field_name="direct_routing_configs") ) # Configuration for PIN protection settings - pin_protection_configs: "Optional[SIPPinProtectionConfigsRequest]" = dc_field( + pin_protection_configs: "SIPPinProtectionConfigsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="pin_protection_configs") ) # Configuration for PIN routing rule calls - pin_routing_configs: "Optional[SIPInboundRoutingRulePinConfigsRequest]" = dc_field( + pin_routing_configs: "SIPInboundRoutingRulePinConfigsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="pin_routing_configs") ) @@ -25069,33 +24875,33 @@ class SIPInboundRoutingRuleResponse(DataClassJsonMixin): ) ) # List of called numbers - called_numbers: List[str] = dc_field( + called_numbers: list[str] = dc_field( metadata=dc_config(field_name="called_numbers") ) # List of SIP trunk IDs - trunk_ids: List[str] = dc_field(metadata=dc_config(field_name="trunk_ids")) + trunk_ids: list[str] = dc_field(metadata=dc_config(field_name="trunk_ids")) # List of caller numbers - caller_numbers: Optional[List[str]] = dc_field( + caller_numbers: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="caller_numbers") ) # SIP call configuration response - call_configs: "Optional[SIPCallConfigsResponse]" = dc_field( + call_configs: "SIPCallConfigsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="call_configs") ) # SIP caller configuration response - caller_configs: "Optional[SIPCallerConfigsResponse]" = dc_field( + caller_configs: "SIPCallerConfigsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="caller_configs") ) # Direct routing rule call configuration response - direct_routing_configs: "Optional[SIPDirectRoutingRuleCallConfigsResponse]" = ( - dc_field(default=None, metadata=dc_config(field_name="direct_routing_configs")) + direct_routing_configs: "SIPDirectRoutingRuleCallConfigsResponse | None" = dc_field( + default=None, metadata=dc_config(field_name="direct_routing_configs") ) # PIN protection configuration response - pin_protection_configs: "Optional[SIPPinProtectionConfigsResponse]" = dc_field( + pin_protection_configs: "SIPPinProtectionConfigsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="pin_protection_configs") ) # PIN routing rule call configuration response - pin_routing_configs: "Optional[SIPInboundRoutingRulePinConfigsResponse]" = dc_field( + pin_routing_configs: "SIPInboundRoutingRulePinConfigsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="pin_routing_configs") ) @@ -25103,19 +24909,19 @@ class SIPInboundRoutingRuleResponse(DataClassJsonMixin): @dataclass class SIPPinProtectionConfigsRequest(DataClassJsonMixin): # Default PIN to use if there is no PIN set on the call object - default_pin: Optional[str] = dc_field( + default_pin: str | None = dc_field( default=None, metadata=dc_config(field_name="default_pin") ) # Whether PIN protection is enabled - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) # Maximum number of PIN attempts allowed - max_attempts: Optional[int] = dc_field( + max_attempts: int | None = dc_field( default=None, metadata=dc_config(field_name="max_attempts") ) # Number of digits required for the PIN - required_pin_digits: Optional[int] = dc_field( + required_pin_digits: int | None = dc_field( default=None, metadata=dc_config(field_name="required_pin_digits") ) @@ -25125,15 +24931,15 @@ class SIPPinProtectionConfigsResponse(DataClassJsonMixin): # Whether PIN protection is enabled enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) # Default PIN to use if there is no PIN set on the call object - default_pin: Optional[str] = dc_field( + default_pin: str | None = dc_field( default=None, metadata=dc_config(field_name="default_pin") ) # Maximum number of PIN attempts allowed - max_attempts: Optional[int] = dc_field( + max_attempts: int | None = dc_field( default=None, metadata=dc_config(field_name="max_attempts") ) # Number of digits required for the PIN - required_pin_digits: Optional[int] = dc_field( + required_pin_digits: int | None = dc_field( default=None, metadata=dc_config(field_name="required_pin_digits") ) @@ -25169,9 +24975,9 @@ class SIPTrunkResponse(DataClassJsonMixin): # Username for SIP trunk authentication username: str = dc_field(metadata=dc_config(field_name="username")) # Allowed IPv4/IPv6 addresses or CIDR blocks - allowed_ips: List[str] = dc_field(metadata=dc_config(field_name="allowed_ips")) + allowed_ips: list[str] = dc_field(metadata=dc_config(field_name="allowed_ips")) # Phone numbers associated with this SIP trunk - numbers: List[str] = dc_field(metadata=dc_config(field_name="numbers")) + numbers: list[str] = dc_field(metadata=dc_config(field_name="numbers")) @dataclass @@ -25181,13 +24987,9 @@ class SRTIngress(DataClassJsonMixin): @dataclass class ScoreBands(DataClassJsonMixin): - good: Optional[float] = dc_field( - default=None, metadata=dc_config(field_name="good") - ) - ok: Optional[float] = dc_field(default=None, metadata=dc_config(field_name="ok")) - poor: Optional[float] = dc_field( - default=None, metadata=dc_config(field_name="poor") - ) + good: float | None = dc_field(default=None, metadata=dc_config(field_name="good")) + ok: float | None = dc_field(default=None, metadata=dc_config(field_name="ok")) + poor: float | None = dc_field(default=None, metadata=dc_config(field_name="poor")) @dataclass @@ -25196,20 +24998,20 @@ class ScreensharingSettings(DataClassJsonMixin): metadata=dc_config(field_name="access_request_enabled") ) enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - target_resolution: "Optional[TargetResolution]" = dc_field( + target_resolution: "TargetResolution | None" = dc_field( default=None, metadata=dc_config(field_name="target_resolution") ) @dataclass class ScreensharingSettingsRequest(DataClassJsonMixin): - access_request_enabled: Optional[bool] = dc_field( + access_request_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="access_request_enabled") ) - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - target_resolution: "Optional[TargetResolution]" = dc_field( + target_resolution: "TargetResolution | None" = dc_field( default=None, metadata=dc_config(field_name="target_resolution") ) @@ -25220,7 +25022,7 @@ class ScreensharingSettingsResponse(DataClassJsonMixin): metadata=dc_config(field_name="access_request_enabled") ) enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - target_resolution: "Optional[TargetResolution]" = dc_field( + target_resolution: "TargetResolution | None" = dc_field( default=None, metadata=dc_config(field_name="target_resolution") ) @@ -25228,38 +25030,32 @@ class ScreensharingSettingsResponse(DataClassJsonMixin): @dataclass class SearchPayload(DataClassJsonMixin): # Channel filter conditions - filter_conditions: Dict[str, object] = dc_field( + filter_conditions: dict[str, object] = dc_field( metadata=dc_config(field_name="filter_conditions") ) - force_default_search: Optional[bool] = dc_field( + force_default_search: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_default_search") ) - force_sql_v2_backend: Optional[bool] = dc_field( + force_sql_v2_backend: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_sql_v2_backend") ) # Number of messages to return - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) # Pagination parameter. Cannot be used with non-zero offset. - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Pagination offset. Cannot be used with sort or next. - offset: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="offset") - ) + offset: int | None = dc_field(default=None, metadata=dc_config(field_name="offset")) # Search phrase - query: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="query") - ) + query: str | None = dc_field(default=None, metadata=dc_config(field_name="query")) # Sort parameters. Cannot be used with non-zero offset - sort: "Optional[List[SortParamRequest]]" = dc_field( + sort: "list[SortParamRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) # Message filter conditions - message_filter_conditions: Optional[Dict[str, object]] = dc_field( + message_filter_conditions: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="message_filter_conditions") ) - message_options: "Optional[MessageOptions]" = dc_field( + message_options: "MessageOptions | None" = dc_field( default=None, metadata=dc_config(field_name="message_options") ) @@ -25269,21 +25065,21 @@ class SearchResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Search results - results: "List[SearchResult]" = dc_field(metadata=dc_config(field_name="results")) + results: "list[SearchResult]" = dc_field(metadata=dc_config(field_name="results")) # Value to pass to the next search query in order to paginate - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) # Value that points to the previous page. Pass as the next value in a search query to paginate backwards - previous: Optional[str] = dc_field( + previous: str | None = dc_field( default=None, metadata=dc_config(field_name="previous") ) - results_warning: "Optional[SearchWarning]" = dc_field( + results_warning: "SearchWarning | None" = dc_field( default=None, metadata=dc_config(field_name="results_warning") ) @dataclass class SearchResult(DataClassJsonMixin): - message: "Optional[SearchResultMessage]" = dc_field( + message: "SearchResultMessage | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @@ -25322,34 +25118,34 @@ class SearchResultMessage(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - attachments: "List[Attachment]" = dc_field( + attachments: "list[Attachment]" = dc_field( metadata=dc_config(field_name="attachments") ) - latest_reactions: "List[ReactionResponse]" = dc_field( + latest_reactions: "list[ReactionResponse]" = dc_field( metadata=dc_config(field_name="latest_reactions") ) - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) - own_reactions: "List[ReactionResponse]" = dc_field( + own_reactions: "list[ReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) - restricted_visibility: List[str] = dc_field( + restricted_visibility: list[str] = dc_field( metadata=dc_config(field_name="restricted_visibility") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - reaction_counts: "Dict[str, int]" = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction_counts: "dict[str, int]" = dc_field( metadata=dc_config(field_name="reaction_counts") ) - reaction_scores: "Dict[str, int]" = dc_field( + reaction_scores: "dict[str, int]" = dc_field( metadata=dc_config(field_name="reaction_scores") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - command: Optional[str] = dc_field( + command: str | None = dc_field( default=None, metadata=dc_config(field_name="command") ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -25358,10 +25154,10 @@ class SearchResultMessage(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_for_me: Optional[bool] = dc_field( + deleted_for_me: bool | None = dc_field( default=None, metadata=dc_config(field_name="deleted_for_me") ) - message_text_updated_at: Optional[datetime] = dc_field( + message_text_updated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="message_text_updated_at", @@ -25370,11 +25166,11 @@ class SearchResultMessage(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) - parent_id: Optional[str] = dc_field( + mml: str | None = dc_field(default=None, metadata=dc_config(field_name="mml")) + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - pin_expires: Optional[datetime] = dc_field( + pin_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pin_expires", @@ -25383,7 +25179,7 @@ class SearchResultMessage(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - pinned_at: Optional[datetime] = dc_field( + pinned_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="pinned_at", @@ -25392,64 +25188,64 @@ class SearchResultMessage(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) - quoted_message_id: Optional[str] = dc_field( + quoted_message_id: str | None = dc_field( default=None, metadata=dc_config(field_name="quoted_message_id") ) - show_in_channel: Optional[bool] = dc_field( + show_in_channel: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_in_channel") ) - mentioned_group_ids: Optional[List[str]] = dc_field( + mentioned_group_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_group_ids") ) - mentioned_groups: "Optional[List[UserGroupResponse]]" = dc_field( + mentioned_groups: "list[UserGroupResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="mentioned_groups") ) - mentioned_roles: Optional[List[str]] = dc_field( + mentioned_roles: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_roles") ) - thread_participants: "Optional[List[UserResponse]]" = dc_field( + thread_participants: "list[UserResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) - draft: "Optional[DraftResponse]" = dc_field( + draft: "DraftResponse | None" = dc_field( default=None, metadata=dc_config(field_name="draft") ) - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) - image_labels: "Optional[Dict[str, List[str]]]" = dc_field( + image_labels: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="image_labels") ) - member: "Optional[ChannelMemberPartialResponse]" = dc_field( + member: "ChannelMemberPartialResponse | None" = dc_field( default=None, metadata=dc_config(field_name="member") ) - moderation: "Optional[ModerationV2Response]" = dc_field( + moderation: "ModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) # User response object - pinned_by: "Optional[UserResponse]" = dc_field( + pinned_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="pinned_by") ) - poll: "Optional[PollResponseData]" = dc_field( + poll: "PollResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll") ) # Represents any chat message - quoted_message: "Optional[MessageResponse]" = dc_field( + quoted_message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="quoted_message") ) - reaction_groups: "Optional[Dict[str, Optional[ReactionGroupResponse]]]" = dc_field( + reaction_groups: "dict[str, ReactionGroupResponse | None] | None" = dc_field( default=None, metadata=dc_config(field_name="reaction_groups") ) - reminder: "Optional[ReminderResponseData]" = dc_field( + reminder: "ReminderResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="reminder") ) - shared_location: "Optional[SharedLocationResponseData]" = dc_field( + shared_location: "SharedLocationResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="shared_location") ) @@ -25458,14 +25254,14 @@ class SearchResultMessage(DataClassJsonMixin): class SearchRolesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Matching roles, sorted ascending by name - roles: "List[Role]" = dc_field(metadata=dc_config(field_name="roles")) + roles: "list[Role]" = dc_field(metadata=dc_config(field_name="roles")) @dataclass class SearchUserGroupsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of matching user groups - user_groups: "List[UserGroupResponse]" = dc_field( + user_groups: "list[UserGroupResponse]" = dc_field( metadata=dc_config(field_name="user_groups") ) @@ -25479,11 +25275,11 @@ class SearchWarning(DataClassJsonMixin): metadata=dc_config(field_name="warning_description") ) # Number of channels searched - channel_search_count: Optional[int] = dc_field( + channel_search_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_search_count") ) # Channel CIDs for the searched channels - channel_search_cids: Optional[List[str]] = dc_field( + channel_search_cids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="channel_search_cids") ) @@ -25514,7 +25310,7 @@ class Segment(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -25523,13 +25319,13 @@ class Segment(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - task_id: Optional[str] = dc_field( + task_id: str | None = dc_field( default=None, metadata=dc_config(field_name="task_id") ) - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -25569,7 +25365,7 @@ class SegmentResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - filter: Dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) @dataclass @@ -25592,29 +25388,29 @@ class Segments(DataClassJsonMixin): by_country_reason: str = dc_field( metadata=dc_config(field_name="by_country_reason") ) - by_browser: "List[BroadcastSegment]" = dc_field( + by_browser: "list[BroadcastSegment]" = dc_field( metadata=dc_config(field_name="by_browser") ) - by_country: "List[BroadcastSegment]" = dc_field( + by_country: "list[BroadcastSegment]" = dc_field( metadata=dc_config(field_name="by_country") ) - by_delivery_zone: "List[DeliveryZoneSegment]" = dc_field( + by_delivery_zone: "list[DeliveryZoneSegment]" = dc_field( metadata=dc_config(field_name="by_delivery_zone") ) - by_os: "List[BroadcastSegment]" = dc_field(metadata=dc_config(field_name="by_os")) - by_sdk: "List[BroadcastSegment]" = dc_field(metadata=dc_config(field_name="by_sdk")) + by_os: "list[BroadcastSegment]" = dc_field(metadata=dc_config(field_name="by_os")) + by_sdk: "list[BroadcastSegment]" = dc_field(metadata=dc_config(field_name="by_sdk")) @dataclass class SendCallEventRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -25629,7 +25425,7 @@ class SendCallEventResponse(DataClassJsonMixin): class SendClosedCaptionRequest(DataClassJsonMixin): speaker_id: str = dc_field(metadata=dc_config(field_name="speaker_id")) text: str = dc_field(metadata=dc_config(field_name="text")) - end_time: Optional[datetime] = dc_field( + end_time: datetime | None = dc_field( default=None, metadata=dc_config( field_name="end_time", @@ -25638,13 +25434,13 @@ class SendClosedCaptionRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - language: Optional[str] = dc_field( + language: str | None = dc_field( default=None, metadata=dc_config(field_name="language") ) - service: Optional[str] = dc_field( + service: str | None = dc_field( default=None, metadata=dc_config(field_name="service") ) - start_time: Optional[datetime] = dc_field( + start_time: datetime | None = dc_field( default=None, metadata=dc_config( field_name="start_time", @@ -25653,14 +25449,14 @@ class SendClosedCaptionRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - translated: Optional[bool] = dc_field( + translated: bool | None = dc_field( default=None, metadata=dc_config(field_name="translated") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -25679,30 +25475,30 @@ class SendEventRequest(DataClassJsonMixin): class SendMessageRequest(DataClassJsonMixin): # Message data for creating or updating a message message: "MessageRequest" = dc_field(metadata=dc_config(field_name="message")) - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) # When true, the response includes channel_context: a slim channel object with cid, type, id and created_by - include_channel_context: Optional[bool] = dc_field( + include_channel_context: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_channel_context") ) # When true, the response includes mentioned_members: for each mentioned user, whether that user is currently a channel member. Requires the ReadChannelMembers permission - include_mentioned_members: Optional[bool] = dc_field( + include_mentioned_members: bool | None = dc_field( default=None, metadata=dc_config(field_name="include_mentioned_members") ) - keep_channel_hidden: Optional[bool] = dc_field( + keep_channel_hidden: bool | None = dc_field( default=None, metadata=dc_config(field_name="keep_channel_hidden") ) - pending: Optional[bool] = dc_field( + pending: bool | None = dc_field( default=None, metadata=dc_config(field_name="pending") ) - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - pending_message_metadata: "Optional[Dict[str, str]]" = dc_field( + pending_message_metadata: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="pending_message_metadata") ) @@ -25714,15 +25510,15 @@ class SendMessageResponse(DataClassJsonMixin): # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) # Slim channel object: identity plus creator - channel_context: "Optional[ChannelContextResponse]" = dc_field( + channel_context: "ChannelContextResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel_context") ) # Map of mentioned user ID to whether that user is currently an active channel member. Only set when include_mentioned_members was requested; omitted when the message has no mentions or the membership lookup failed - mentioned_members: "Optional[Dict[str, bool]]" = dc_field( + mentioned_members: "dict[str, bool] | None" = dc_field( default=None, metadata=dc_config(field_name="mentioned_members") ) # Pending message metadata - pending_message_metadata: "Optional[Dict[str, str]]" = dc_field( + pending_message_metadata: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="pending_message_metadata") ) @@ -25732,11 +25528,11 @@ class SendReactionRequest(DataClassJsonMixin): # Represents user reaction to a message reaction: "ReactionRequest" = dc_field(metadata=dc_config(field_name="reaction")) # Whether to replace all existing user reactions - enforce_unique: Optional[bool] = dc_field( + enforce_unique: bool | None = dc_field( default=None, metadata=dc_config(field_name="enforce_unique") ) # Skips any mobile push notifications - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) @@ -25757,15 +25553,15 @@ class SendUserCustomEventRequest(DataClassJsonMixin): @dataclass class SessionClient(DataClassJsonMixin): - ip: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="ip")) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - network_type: Optional[str] = dc_field( + ip: str | None = dc_field(default=None, metadata=dc_config(field_name="ip")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + network_type: str | None = dc_field( default=None, metadata=dc_config(field_name="network_type") ) - version: Optional[str] = dc_field( + version: str | None = dc_field( default=None, metadata=dc_config(field_name="version") ) - location: "Optional[CallStatsLocation]" = dc_field( + location: "CallStatsLocation | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @@ -25795,7 +25591,7 @@ class SessionSettingsResponse(DataClassJsonMixin): class SessionWarningResponse(DataClassJsonMixin): code: str = dc_field(metadata=dc_config(field_name="code")) warning: str = dc_field(metadata=dc_config(field_name="warning")) - time: Optional[datetime] = dc_field( + time: datetime | None = dc_field( default=None, metadata=dc_config( field_name="time", @@ -25839,10 +25635,10 @@ class SetupSession(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - setup_data: Dict[str, object] = dc_field( + setup_data: dict[str, object] = dc_field( metadata=dc_config(field_name="setup_data") ) - completed_at: Optional[datetime] = dc_field( + completed_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="completed_at", @@ -25856,9 +25652,7 @@ class SetupSession(DataClassJsonMixin): @dataclass class ShadowBlockActionRequestPayload(DataClassJsonMixin): # Reason for shadow blocking - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) @dataclass @@ -25882,10 +25676,10 @@ class ShareResponse(DataClassJsonMixin): class SharedLocation(DataClassJsonMixin): latitude: float = dc_field(metadata=dc_config(field_name="latitude")) longitude: float = dc_field(metadata=dc_config(field_name="longitude")) - created_by_device_id: Optional[str] = dc_field( + created_by_device_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_device_id") ) - end_at: Optional[datetime] = dc_field( + end_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="end_at", @@ -25932,7 +25726,7 @@ class SharedLocationResponse(DataClassJsonMixin): # User ID user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Time when the live location expires - end_at: Optional[datetime] = dc_field( + end_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="end_at", @@ -25942,11 +25736,11 @@ class SharedLocationResponse(DataClassJsonMixin): ), ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @@ -25977,7 +25771,7 @@ class SharedLocationResponseData(DataClassJsonMixin): ) ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - end_at: Optional[datetime] = dc_field( + end_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="end_at", @@ -25987,11 +25781,11 @@ class SharedLocationResponseData(DataClassJsonMixin): ), ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @@ -25999,18 +25793,18 @@ class SharedLocationResponseData(DataClassJsonMixin): @dataclass class SharedLocationsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - active_live_locations: "List[SharedLocationResponseData]" = dc_field( + active_live_locations: "list[SharedLocationResponseData]" = dc_field( metadata=dc_config(field_name="active_live_locations") ) @dataclass class ShowChannelRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -26026,7 +25820,7 @@ class SingleFollowResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) # Whether a notification activity was successfully created - notification_created: Optional[bool] = dc_field( + notification_created: bool | None = dc_field( default=None, metadata=dc_config(field_name="notification_created") ) @@ -26044,37 +25838,42 @@ class SipInboundCredentials(DataClassJsonMixin): # User ID for the call user_id: str = dc_field(metadata=dc_config(field_name="user_id")) # Custom data associated with the call - call_custom_data: Dict[str, object] = dc_field( + call_custom_data: dict[str, object] = dc_field( metadata=dc_config(field_name="call_custom_data") ) # Custom data associated with the user - user_custom_data: Dict[str, object] = dc_field( + user_custom_data: dict[str, object] = dc_field( metadata=dc_config(field_name="user_custom_data") ) +@dataclass +class SortParam(DataClassJsonMixin): + direction: int = dc_field(metadata=dc_config(field_name="direction")) + field: str = dc_field(metadata=dc_config(field_name="field")) + type: str = dc_field(metadata=dc_config(field_name="type")) + + @dataclass class SortParamRequest(DataClassJsonMixin): # Direction of sorting, 1 for Ascending, -1 for Descending, default is 1. One of: -1, 1 - direction: Optional[int] = dc_field( + direction: int | None = dc_field( default=None, metadata=dc_config(field_name="direction") ) # Name of field to sort by - field: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="field") - ) + field: str | None = dc_field(default=None, metadata=dc_config(field_name="field")) # Type of field to sort by. Empty string or omitted means string type (default). One of: number, boolean - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) @dataclass class SourceHealth(DataClassJsonMixin): co_host_peak: int = dc_field(metadata=dc_config(field_name="co_host_peak")) dead_air_s: int = dc_field(metadata=dc_config(field_name="dead_air_s")) - interruptions: "List[SourceInterruption]" = dc_field( + interruptions: "list[SourceInterruption]" = dc_field( metadata=dc_config(field_name="interruptions") ) - publisher_sessions: "List[PublisherSession]" = dc_field( + publisher_sessions: "list[PublisherSession]" = dc_field( metadata=dc_config(field_name="publisher_sessions") ) @@ -26084,24 +25883,24 @@ class SourceInterruption(DataClassJsonMixin): at_offset_min: float = dc_field(metadata=dc_config(field_name="at_offset_min")) dead_air_s: int = dc_field(metadata=dc_config(field_name="dead_air_s")) kind: str = dc_field(metadata=dc_config(field_name="kind")) - seamless: Optional[bool] = dc_field( + seamless: bool | None = dc_field( default=None, metadata=dc_config(field_name="seamless") ) @dataclass class SpeechSegmentConfig(DataClassJsonMixin): - max_speech_caption_ms: Optional[int] = dc_field( + max_speech_caption_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="max_speech_caption_ms") ) - silence_duration_ms: Optional[int] = dc_field( + silence_duration_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="silence_duration_ms") ) @dataclass class StartCampaignRequest(DataClassJsonMixin): - scheduled_for: Optional[datetime] = dc_field( + scheduled_for: datetime | None = dc_field( default=None, metadata=dc_config( field_name="scheduled_for", @@ -26110,7 +25909,7 @@ class StartCampaignRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - stop_at: Optional[datetime] = dc_field( + stop_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="stop_at", @@ -26125,10 +25924,10 @@ class StartCampaignRequest(DataClassJsonMixin): class StartCampaignResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - campaign: "Optional[CampaignResponse]" = dc_field( + campaign: "CampaignResponse | None" = dc_field( default=None, metadata=dc_config(field_name="campaign") ) - users: "Optional[PagerResponse]" = dc_field( + users: "PagerResponse | None" = dc_field( default=None, metadata=dc_config(field_name="users") ) @@ -26136,18 +25935,18 @@ class StartCampaignResponse(DataClassJsonMixin): @dataclass class StartClosedCaptionsRequest(DataClassJsonMixin): # Enable transcriptions along with closed captions - enable_transcription: Optional[bool] = dc_field( + enable_transcription: bool | None = dc_field( default=None, metadata=dc_config(field_name="enable_transcription") ) # Which external storage to use for transcriptions (only applicable if enable_transcription is true) - external_storage: Optional[str] = dc_field( + external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="external_storage") ) # The spoken language in the call, if not provided the language defined in the transcription settings will be used. One of: auto, ar, bg, ca, cs, da, de, el, en, es, et, fi, fr, he, hi, hr, hu, id, it, ja, ko, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, ta, th, tl, tr, uk, zh - language: Optional[str] = dc_field( + language: str | None = dc_field( default=None, metadata=dc_config(field_name="language") ) - speech_segment_config: "Optional[SpeechSegmentConfig]" = dc_field( + speech_segment_config: "SpeechSegmentConfig | None" = dc_field( default=None, metadata=dc_config(field_name="speech_segment_config") ) @@ -26159,7 +25958,7 @@ class StartClosedCaptionsResponse(DataClassJsonMixin): @dataclass class StartFrameRecordingRequest(DataClassJsonMixin): - recording_external_storage: Optional[str] = dc_field( + recording_external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="recording_external_storage") ) @@ -26190,7 +25989,7 @@ class StartPolicyTestRunRequest(DataClassJsonMixin): @dataclass class StartRTMPBroadcastsRequest(DataClassJsonMixin): # List of broadcasts to start - broadcasts: "List[RTMPBroadcastRequest]" = dc_field( + broadcasts: "list[RTMPBroadcastRequest]" = dc_field( metadata=dc_config(field_name="broadcasts") ) @@ -26203,7 +26002,7 @@ class StartRTMPBroadcastsResponse(DataClassJsonMixin): @dataclass class StartRecordingRequest(DataClassJsonMixin): - recording_external_storage: Optional[str] = dc_field( + recording_external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="recording_external_storage") ) @@ -26217,15 +26016,15 @@ class StartRecordingResponse(DataClassJsonMixin): @dataclass class StartTranscriptionRequest(DataClassJsonMixin): # Enable closed captions along with transcriptions - enable_closed_captions: Optional[bool] = dc_field( + enable_closed_captions: bool | None = dc_field( default=None, metadata=dc_config(field_name="enable_closed_captions") ) # The spoken language in the call, if not provided the language defined in the transcription settings will be used. One of: auto, ar, bg, ca, cs, da, de, el, en, es, et, fi, fr, he, hi, hr, hu, id, it, ja, ko, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, ta, th, tl, tr, uk, zh - language: Optional[str] = dc_field( + language: str | None = dc_field( default=None, metadata=dc_config(field_name="language") ) # Store transcriptions in this external storage - transcription_external_storage: Optional[str] = dc_field( + transcription_external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="transcription_external_storage") ) @@ -26254,7 +26053,7 @@ class StopCampaignRequest(DataClassJsonMixin): @dataclass class StopClosedCaptionsRequest(DataClassJsonMixin): - stop_transcription: Optional[bool] = dc_field( + stop_transcription: bool | None = dc_field( default=None, metadata=dc_config(field_name="stop_transcription") ) @@ -26289,28 +26088,28 @@ class StopHLSBroadcastingResponse(DataClassJsonMixin): @dataclass class StopLiveRequest(DataClassJsonMixin): - continue_closed_caption: Optional[bool] = dc_field( + continue_closed_caption: bool | None = dc_field( default=None, metadata=dc_config(field_name="continue_closed_caption") ) - continue_composite_recording: Optional[bool] = dc_field( + continue_composite_recording: bool | None = dc_field( default=None, metadata=dc_config(field_name="continue_composite_recording") ) - continue_hls: Optional[bool] = dc_field( + continue_hls: bool | None = dc_field( default=None, metadata=dc_config(field_name="continue_hls") ) - continue_individual_recording: Optional[bool] = dc_field( + continue_individual_recording: bool | None = dc_field( default=None, metadata=dc_config(field_name="continue_individual_recording") ) - continue_raw_recording: Optional[bool] = dc_field( + continue_raw_recording: bool | None = dc_field( default=None, metadata=dc_config(field_name="continue_raw_recording") ) - continue_recording: Optional[bool] = dc_field( + continue_recording: bool | None = dc_field( default=None, metadata=dc_config(field_name="continue_recording") ) - continue_rtmp_broadcasts: Optional[bool] = dc_field( + continue_rtmp_broadcasts: bool | None = dc_field( default=None, metadata=dc_config(field_name="continue_rtmp_broadcasts") ) - continue_transcription: Optional[bool] = dc_field( + continue_transcription: bool | None = dc_field( default=None, metadata=dc_config(field_name="continue_transcription") ) @@ -26346,7 +26145,7 @@ class StopRecordingResponse(DataClassJsonMixin): @dataclass class StopTranscriptionRequest(DataClassJsonMixin): - stop_closed_captions: Optional[bool] = dc_field( + stop_closed_captions: bool | None = dc_field( default=None, metadata=dc_config(field_name="stop_closed_captions") ) @@ -26360,11 +26159,11 @@ class StopTranscriptionResponse(DataClassJsonMixin): @dataclass class StoriesConfig(DataClassJsonMixin): # Whether to skip already watched stories - skip_watched: Optional[bool] = dc_field( + skip_watched: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_watched") ) # Whether to track watched status for stories - track_watched: Optional[bool] = dc_field( + track_watched: bool | None = dc_field( default=None, metadata=dc_config(field_name="track_watched") ) @@ -26382,15 +26181,15 @@ class StoriesFeedUpdatedEvent(DataClassJsonMixin): ) # The ID of the feed fid: str = dc_field(metadata=dc_config(field_name="fid")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "feeds.stories_feed.updated" in this case type: str = dc_field( default="feeds.stories_feed.updated", metadata=dc_config(field_name="type") ) - feed_visibility: Optional[str] = dc_field( + feed_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="feed_visibility") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -26400,14 +26199,14 @@ class StoriesFeedUpdatedEvent(DataClassJsonMixin): ), ) # Individual activities for stories feeds - activities: "Optional[List[ActivityResponse]]" = dc_field( + activities: "list[ActivityResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="activities") ) # Aggregated activities for stories feeds - aggregated_activities: "Optional[List[AggregatedActivityResponse]]" = dc_field( + aggregated_activities: "list[AggregatedActivityResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="aggregated_activities") ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -26417,88 +26216,88 @@ class SubmitActionRequest(DataClassJsonMixin): # Type of moderation action to perform. One of: mark_reviewed, delete_message, delete_activity, delete_comment, delete_reaction, ban, custom, unban, restore, delete_user, delete_user_messages, unblock, block, shadow_block, unmask, kick_user, end_call, escalate, de_escalate action_type: str = dc_field(metadata=dc_config(field_name="action_type")) # UUID of the appeal to act on (required for reject_appeal, optional for other actions) - appeal_id: Optional[str] = dc_field( + appeal_id: str | None = dc_field( default=None, metadata=dc_config(field_name="appeal_id") ) # UUID of the review queue item to act on - item_id: Optional[str] = dc_field( + item_id: str | None = dc_field( default=None, metadata=dc_config(field_name="item_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Configuration for ban moderation action - ban: "Optional[BanActionRequestPayload]" = dc_field( + ban: "BanActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="ban") ) # Configuration for block action - block: "Optional[BlockActionRequestPayload]" = dc_field( + block: "BlockActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="block") ) - bypass: "Optional[BypassActionRequest]" = dc_field( + bypass: "BypassActionRequest | None" = dc_field( default=None, metadata=dc_config(field_name="bypass") ) # Configuration for custom moderation action - custom: "Optional[CustomActionRequestPayload]" = dc_field( + custom: "CustomActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="custom") ) # Configuration for activity deletion action - delete_activity: "Optional[DeleteActivityRequestPayload]" = dc_field( + delete_activity: "DeleteActivityRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="delete_activity") ) # Configuration for comment deletion action - delete_comment: "Optional[DeleteCommentRequestPayload]" = dc_field( + delete_comment: "DeleteCommentRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="delete_comment") ) # Configuration for message deletion action - delete_message: "Optional[DeleteMessageRequestPayload]" = dc_field( + delete_message: "DeleteMessageRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="delete_message") ) # Configuration for reaction deletion action - delete_reaction: "Optional[DeleteReactionRequestPayload]" = dc_field( + delete_reaction: "DeleteReactionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="delete_reaction") ) # Configuration for user deletion action - delete_user: "Optional[DeleteUserRequestPayload]" = dc_field( + delete_user: "DeleteUserRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="delete_user") ) # Configuration for deleting all of a user's chat messages without banning them or deleting their account - delete_user_messages: "Optional[DeleteUserMessagesRequestPayload]" = dc_field( + delete_user_messages: "DeleteUserMessagesRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="delete_user_messages") ) # Configuration for escalation action - escalate: "Optional[EscalatePayload]" = dc_field( + escalate: "EscalatePayload | None" = dc_field( default=None, metadata=dc_config(field_name="escalate") ) - flag: "Optional[FlagRequest]" = dc_field( + flag: "FlagRequest | None" = dc_field( default=None, metadata=dc_config(field_name="flag") ) # Configuration for mark reviewed action - mark_reviewed: "Optional[MarkReviewedRequestPayload]" = dc_field( + mark_reviewed: "MarkReviewedRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="mark_reviewed") ) # Configuration for rejecting an appeal - reject_appeal: "Optional[RejectAppealRequestPayload]" = dc_field( + reject_appeal: "RejectAppealRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="reject_appeal") ) - # Configuration for restore action - restore: "Optional[RestoreActionRequestPayload]" = dc_field( + # Configuration for restore action. State-aware: reverses whichever of a delete, a block, or a shadow block currently applies to the content (including both a delete and a block/shadow block at once). + restore: "RestoreActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="restore") ) # Configuration for shadow block action - shadow_block: "Optional[ShadowBlockActionRequestPayload]" = dc_field( + shadow_block: "ShadowBlockActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="shadow_block") ) # Configuration for unban moderation action - unban: "Optional[UnbanActionRequestPayload]" = dc_field( + unban: "UnbanActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="unban") ) - # Configuration for unblock action - unblock: "Optional[UnblockActionRequestPayload]" = dc_field( + # Deprecated: use restore instead — it now also reverses a block or shadow block. Configuration for unblock action. + unblock: "UnblockActionRequestPayload | None" = dc_field( default=None, metadata=dc_config(field_name="unblock") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -26507,13 +26306,13 @@ class SubmitActionRequest(DataClassJsonMixin): class SubmitActionResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Present when the appeal was accepted but the entity could not be restored automatically. The moderator should restore it manually. - auto_restore_warning: Optional[str] = dc_field( + auto_restore_warning: str | None = dc_field( default=None, metadata=dc_config(field_name="auto_restore_warning") ) - appeal_item: "Optional[AppealItemResponse]" = dc_field( + appeal_item: "AppealItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="appeal_item") ) - item: "Optional[ReviewQueueItemResponse]" = dc_field( + item: "ReviewQueueItemResponse | None" = dc_field( default=None, metadata=dc_config(field_name="item") ) @@ -26527,27 +26326,27 @@ class SubmitModerationFeedbackRequest(DataClassJsonMixin): # Provider-side reference identifying the moderated content reference: str = dc_field(metadata=dc_config(field_name="reference")) # Optional moderation channel UUID for context - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) # Action originally produced by the moderation system - current_recommended_action: Optional[str] = dc_field( + current_recommended_action: str | None = dc_field( default=None, metadata=dc_config(field_name="current_recommended_action") ) # Optional free-form note explaining why the classification was wrong - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Optional moderator-supplied action - expected_recommended_action: Optional[str] = dc_field( + expected_recommended_action: str | None = dc_field( default=None, metadata=dc_config(field_name="expected_recommended_action") ) # Classifications originally produced by the moderation system - current_labels: Optional[List[str]] = dc_field( + current_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="current_labels") ) # Optional moderator-supplied classifications (up to 16 entries) - expected_labels: Optional[List[str]] = dc_field( + expected_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="expected_labels") ) @@ -26559,26 +26358,26 @@ class SubmitModerationFeedbackResponse(DataClassJsonMixin): @dataclass class SubscriberAllMetrics(DataClassJsonMixin): - audio: "Optional[SubscriberAudioMetrics]" = dc_field( + audio: "SubscriberAudioMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="audio") ) - rtt_ms: "Optional[ActiveCallsLatencyStats]" = dc_field( + rtt_ms: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="rtt_ms") ) - video: "Optional[SubscriberVideoMetrics]" = dc_field( + video: "SubscriberVideoMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="video") ) @dataclass class SubscriberAudioMetrics(DataClassJsonMixin): - concealment_pct: "Optional[ActiveCallsLatencyStats]" = dc_field( + concealment_pct: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="concealment_pct") ) - jitter_ms: "Optional[ActiveCallsLatencyStats]" = dc_field( + jitter_ms: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="jitter_ms") ) - packets_lost_pct: "Optional[ActiveCallsLatencyStats]" = dc_field( + packets_lost_pct: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="packets_lost_pct") ) @@ -26594,33 +26393,33 @@ class SubscriberStatsResponse(DataClassJsonMixin): @dataclass class SubscriberVideoMetrics(DataClassJsonMixin): - fps_30: "Optional[ActiveCallsFPSStats]" = dc_field( + fps_30: "ActiveCallsFPSStats | None" = dc_field( default=None, metadata=dc_config(field_name="fps_30") ) - jitter_ms: "Optional[ActiveCallsLatencyStats]" = dc_field( + jitter_ms: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="jitter_ms") ) - packets_lost_pct: "Optional[ActiveCallsLatencyStats]" = dc_field( + packets_lost_pct: "ActiveCallsLatencyStats | None" = dc_field( default=None, metadata=dc_config(field_name="packets_lost_pct") ) @dataclass class SubscribersMetrics(DataClassJsonMixin): - all: "Optional[SubscriberAllMetrics]" = dc_field( + all: "SubscriberAllMetrics | None" = dc_field( default=None, metadata=dc_config(field_name="all") ) @dataclass class Supporting(DataClassJsonMixin): - delivery_incident_windows: "List[Incident]" = dc_field( + delivery_incident_windows: "list[Incident]" = dc_field( metadata=dc_config(field_name="delivery_incident_windows") ) - edge_outlier_zones: List[str] = dc_field( + edge_outlier_zones: list[str] = dc_field( metadata=dc_config(field_name="edge_outlier_zones") ) - source_drop_windows: "List[TimeWindow]" = dc_field( + source_drop_windows: "list[TimeWindow]" = dc_field( metadata=dc_config(field_name="source_drop_windows") ) @@ -26629,7 +26428,7 @@ class Supporting(DataClassJsonMixin): class TargetResolution(DataClassJsonMixin): height: int = dc_field(metadata=dc_config(field_name="height")) width: int = dc_field(metadata=dc_config(field_name="width")) - bitrate: Optional[int] = dc_field( + bitrate: int | None = dc_field( default=None, metadata=dc_config(field_name="bitrate") ) @@ -26702,59 +26501,59 @@ class TeamUsageStats(DataClassJsonMixin): @dataclass class TextContentParameters(DataClassJsonMixin): - contains_url: Optional[bool] = dc_field( + contains_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="contains_url") ) - label_operator: Optional[str] = dc_field( + label_operator: str | None = dc_field( default=None, metadata=dc_config(field_name="label_operator") ) - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - text_length: Optional[int] = dc_field( + text_length: int | None = dc_field( default=None, metadata=dc_config(field_name="text_length") ) - text_length_operator: Optional[str] = dc_field( + text_length_operator: str | None = dc_field( default=None, metadata=dc_config(field_name="text_length_operator") ) - blocklist_match: Optional[List[str]] = dc_field( + blocklist_match: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_match") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) - llm_harm_labels: "Optional[Dict[str, str]]" = dc_field( + llm_harm_labels: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="llm_harm_labels") ) @dataclass class TextRuleParameters(DataClassJsonMixin): - contains_url: Optional[bool] = dc_field( + contains_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="contains_url") ) - semantic_filter_min_threshold: Optional[float] = dc_field( + semantic_filter_min_threshold: float | None = dc_field( default=None, metadata=dc_config(field_name="semantic_filter_min_threshold") ) - severity: Optional[str] = dc_field( + severity: str | None = dc_field( default=None, metadata=dc_config(field_name="severity") ) - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - blocklist_match: Optional[List[str]] = dc_field( + blocklist_match: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_match") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) - semantic_filter_names: Optional[List[str]] = dc_field( + semantic_filter_names: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="semantic_filter_names") ) - llm_harm_labels: "Optional[Dict[str, str]]" = dc_field( + llm_harm_labels: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="llm_harm_labels") ) @@ -26779,8 +26578,8 @@ class ThreadParticipant(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - last_thread_message_at: Optional[datetime] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + last_thread_message_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_thread_message_at", @@ -26790,7 +26589,7 @@ class ThreadParticipant(DataClassJsonMixin): ), ) # Left Thread At is the time when the user left the thread - left_thread_at: Optional[datetime] = dc_field( + left_thread_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="left_thread_at", @@ -26800,15 +26599,15 @@ class ThreadParticipant(DataClassJsonMixin): ), ) # Thead ID is unique string identifier of the thread - thread_id: Optional[str] = dc_field( + thread_id: str | None = dc_field( default=None, metadata=dc_config(field_name="thread_id") ) # User ID is unique string identifier of the user - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -26856,9 +26655,9 @@ class ThreadResponse(DataClassJsonMixin): ) ) # Custom data for this object - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Deleted At - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -26868,7 +26667,7 @@ class ThreadResponse(DataClassJsonMixin): ), ) # Last Message At - last_message_at: Optional[datetime] = dc_field( + last_message_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_message_at", @@ -26878,19 +26677,19 @@ class ThreadResponse(DataClassJsonMixin): ), ) # Thread Participants - thread_participants: "Optional[List[ThreadParticipant]]" = dc_field( + thread_participants: "list[ThreadParticipant] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) # Represents any chat message - parent_message: "Optional[MessageResponse]" = dc_field( + parent_message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="parent_message") ) @@ -26937,13 +26736,13 @@ class ThreadStateResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - latest_replies: "List[MessageResponse]" = dc_field( + latest_replies: "list[MessageResponse]" = dc_field( metadata=dc_config(field_name="latest_replies") ) # Custom data for this object - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # Deleted At - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -26953,7 +26752,7 @@ class ThreadStateResponse(DataClassJsonMixin): ), ) # Last Message At - last_message_at: Optional[datetime] = dc_field( + last_message_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_message_at", @@ -26962,26 +26761,26 @@ class ThreadStateResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - read: "Optional[List[ReadStateResponse]]" = dc_field( + read: "list[ReadStateResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="read") ) # Thread Participants - thread_participants: "Optional[List[ThreadParticipant]]" = dc_field( + thread_participants: "list[ThreadParticipant] | None" = dc_field( default=None, metadata=dc_config(field_name="thread_participants") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) - draft: "Optional[DraftResponse]" = dc_field( + draft: "DraftResponse | None" = dc_field( default=None, metadata=dc_config(field_name="draft") ) # Represents any chat message - parent_message: "Optional[MessageResponse]" = dc_field( + parent_message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="parent_message") ) @@ -26996,18 +26795,18 @@ class ThreadUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( default="thread.updated", metadata=dc_config(field_name="type") ) - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -27016,7 +26815,7 @@ class ThreadUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - thread: "Optional[ThreadResponse]" = dc_field( + thread: "ThreadResponse | None" = dc_field( default=None, metadata=dc_config(field_name="thread") ) @@ -27053,18 +26852,18 @@ class ThreadedCommentResponse(DataClassJsonMixin): ) ) upvote_count: int = dc_field(metadata=dc_config(field_name="upvote_count")) - mentioned_users: "List[UserResponse]" = dc_field( + mentioned_users: "list[UserResponse]" = dc_field( metadata=dc_config(field_name="mentioned_users") ) - own_reactions: "List[FeedsReactionResponse]" = dc_field( + own_reactions: "list[FeedsReactionResponse]" = dc_field( metadata=dc_config(field_name="own_reactions") ) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - controversy_score: Optional[float] = dc_field( + controversy_score: float | None = dc_field( default=None, metadata=dc_config(field_name="controversy_score") ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -27073,7 +26872,7 @@ class ThreadedCommentResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - edited_at: Optional[datetime] = dc_field( + edited_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="edited_at", @@ -27082,47 +26881,47 @@ class ThreadedCommentResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - attachments: "Optional[List[Attachment]]" = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) - latest_reactions: "Optional[List[FeedsReactionResponse]]" = dc_field( + latest_reactions: "list[FeedsReactionResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="latest_reactions") ) # Slice of nested comments (may be empty). - replies: "Optional[List[ThreadedCommentResponse]]" = dc_field( + replies: "list[ThreadedCommentResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="replies") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - i18n: "Optional[Dict[str, str]]" = dc_field( + i18n: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="i18n") ) # Cursor & depth information for a comment's direct replies. Mirrors Reddit's 'load more replies' semantics. - meta: "Optional[RepliesMeta]" = dc_field( + meta: "RepliesMeta | None" = dc_field( default=None, metadata=dc_config(field_name="meta") ) - moderation: "Optional[ModerationV2Response]" = dc_field( + moderation: "ModerationV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="moderation") ) - reaction_groups: "Optional[Dict[str, FeedsReactionGroupResponse]]" = dc_field( + reaction_groups: "dict[str, FeedsReactionGroupResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="reaction_groups") ) @dataclass class Thresholds(DataClassJsonMixin): - explicit: "Optional[LabelThresholds]" = dc_field( + explicit: "LabelThresholds | None" = dc_field( default=None, metadata=dc_config(field_name="explicit") ) - spam: "Optional[LabelThresholds]" = dc_field( + spam: "LabelThresholds | None" = dc_field( default=None, metadata=dc_config(field_name="spam") ) - toxic: "Optional[LabelThresholds]" = dc_field( + toxic: "LabelThresholds | None" = dc_field( default=None, metadata=dc_config(field_name="toxic") ) @@ -27139,7 +26938,7 @@ class ThumbnailsSettings(DataClassJsonMixin): @dataclass class ThumbnailsSettingsRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) @@ -27167,7 +26966,7 @@ class TopBroadcast(DataClassJsonMixin): peak_concurrent_viewers: int = dc_field( metadata=dc_config(field_name="peak_concurrent_viewers") ) - poor_pct: Optional[float] = dc_field( + poor_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="poor_pct") ) @@ -27179,9 +26978,7 @@ class TrackActivityMetricsEvent(DataClassJsonMixin): # The metric name (e.g. views, clicks, impressions). Alphanumeric and underscores only. metric: str = dc_field(metadata=dc_config(field_name="metric")) # The amount to increment (positive) or decrement (negative). Defaults to 1. The absolute value counts against rate limits. - delta: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="delta") - ) + delta: int | None = dc_field(default=None, metadata=dc_config(field_name="delta")) @dataclass @@ -27193,22 +26990,20 @@ class TrackActivityMetricsEventResult(DataClassJsonMixin): # The metric name from the request metric: str = dc_field(metadata=dc_config(field_name="metric")) # Error message if processing failed - error: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="error") - ) + error: str | None = dc_field(default=None, metadata=dc_config(field_name="error")) @dataclass class TrackActivityMetricsRequest(DataClassJsonMixin): # List of metric events to track (max 100 per request) - events: "List[TrackActivityMetricsEvent]" = dc_field( + events: "list[TrackActivityMetricsEvent]" = dc_field( metadata=dc_config(field_name="events") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -27217,7 +27012,7 @@ class TrackActivityMetricsRequest(DataClassJsonMixin): class TrackActivityMetricsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Results for each event in the request, in the same order - results: "List[TrackActivityMetricsEventResult]" = dc_field( + results: "list[TrackActivityMetricsEventResult]" = dc_field( metadata=dc_config(field_name="results") ) @@ -27237,27 +27032,27 @@ class TranscriptionSettings(DataClassJsonMixin): # The language used in this call as a two letter code language: str = dc_field(metadata=dc_config(field_name="language")) mode: str = dc_field(metadata=dc_config(field_name="mode")) - speech_segment_config: "Optional[SpeechSegmentConfig]" = dc_field( + speech_segment_config: "SpeechSegmentConfig | None" = dc_field( default=None, metadata=dc_config(field_name="speech_segment_config") ) - translation: "Optional[TranslationSettings]" = dc_field( + translation: "TranslationSettings | None" = dc_field( default=None, metadata=dc_config(field_name="translation") ) @dataclass class TranscriptionSettingsRequest(DataClassJsonMixin): - closed_caption_mode: Optional[str] = dc_field( + closed_caption_mode: str | None = dc_field( default=None, metadata=dc_config(field_name="closed_caption_mode") ) - language: Optional[str] = dc_field( + language: str | None = dc_field( default=None, metadata=dc_config(field_name="language") ) - mode: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mode")) - speech_segment_config: "Optional[SpeechSegmentConfig]" = dc_field( + mode: str | None = dc_field(default=None, metadata=dc_config(field_name="mode")) + speech_segment_config: "SpeechSegmentConfig | None" = dc_field( default=None, metadata=dc_config(field_name="speech_segment_config") ) - translation: "Optional[TranslationSettings]" = dc_field( + translation: "TranslationSettings | None" = dc_field( default=None, metadata=dc_config(field_name="translation") ) @@ -27269,10 +27064,10 @@ class TranscriptionSettingsResponse(DataClassJsonMixin): ) language: str = dc_field(metadata=dc_config(field_name="language")) mode: str = dc_field(metadata=dc_config(field_name="mode")) - speech_segment_config: "Optional[SpeechSegmentConfig]" = dc_field( + speech_segment_config: "SpeechSegmentConfig | None" = dc_field( default=None, metadata=dc_config(field_name="speech_segment_config") ) - translation: "Optional[TranslationSettings]" = dc_field( + translation: "TranslationSettings | None" = dc_field( default=None, metadata=dc_config(field_name="translation") ) @@ -27311,10 +27106,10 @@ class TranslateMessageRequest(DataClassJsonMixin): @dataclass class TranslationSettings(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - languages: Optional[List[str]] = dc_field( + languages: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="languages") ) @@ -27324,18 +27119,18 @@ class TriggeredRuleResponse(DataClassJsonMixin): # ID of the moderation rule that triggered rule_id: str = dc_field(metadata=dc_config(field_name="rule_id")) # Action types resolved from the rule's action sequence - actions: List[str] = dc_field(metadata=dc_config(field_name="actions")) + actions: list[str] = dc_field(metadata=dc_config(field_name="actions")) # Name of the moderation rule that triggered - rule_name: Optional[str] = dc_field( + rule_name: str | None = dc_field( default=None, metadata=dc_config(field_name="rule_name") ) # Type of the moderation rule that triggered (content, user, or call) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) # Violation count for action sequence rules (1-based) - violation_number: Optional[int] = dc_field( + violation_number: int | None = dc_field( default=None, metadata=dc_config(field_name="violation_number") ) - call_options: "Optional[CallActionOptions]" = dc_field( + call_options: "CallActionOptions | None" = dc_field( default=None, metadata=dc_config(field_name="call_options") ) @@ -27343,15 +27138,15 @@ class TriggeredRuleResponse(DataClassJsonMixin): @dataclass class TruncateChannelRequest(DataClassJsonMixin): # Permanently delete channel data (messages, reactions, etc.) - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) # When `message` is set disables all push notifications for it - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) # Truncate channel data up to `truncated_at`. The system message (if provided) creation time is always greater than `truncated_at` - truncated_at: Optional[datetime] = dc_field( + truncated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="truncated_at", @@ -27360,19 +27155,19 @@ class TruncateChannelRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # List of member IDs to hide message history for. If empty, truncates the channel for all members - member_ids: Optional[List[str]] = dc_field( + member_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="member_ids") ) # Message data for creating or updating a message - message: "Optional[MessageRequest]" = dc_field( + message: "MessageRequest | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -27382,11 +27177,11 @@ class TruncateChannelResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @@ -27399,19 +27194,19 @@ class TypingIndicatorsResponse(DataClassJsonMixin): @dataclass class UnbanActionRequestPayload(DataClassJsonMixin): # Channel CID for channel-specific unban - channel_cid: Optional[str] = dc_field( + channel_cid: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) # Reason for the appeal decision - decision_reason: Optional[str] = dc_field( + decision_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="decision_reason") ) # Also remove the future channels ban for this user - remove_future_channels_ban: Optional[bool] = dc_field( + remove_future_channels_ban: bool | None = dc_field( default=None, metadata=dc_config(field_name="remove_future_channels_ban") ) # Optional: unban user directly without review item - target_user_id: Optional[str] = dc_field( + target_user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="target_user_id") ) @@ -27419,11 +27214,11 @@ class UnbanActionRequestPayload(DataClassJsonMixin): @dataclass class UnbanRequest(DataClassJsonMixin): # ID of the user performing the unban - unbanned_by_id: Optional[str] = dc_field( + unbanned_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="unbanned_by_id") ) # User request object - unbanned_by: "Optional[UserRequest]" = dc_field( + unbanned_by: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="unbanned_by") ) @@ -27436,7 +27231,7 @@ class UnbanResponse(DataClassJsonMixin): @dataclass class UnblockActionRequestPayload(DataClassJsonMixin): # Reason for the appeal decision - decision_reason: Optional[str] = dc_field( + decision_reason: str | None = dc_field( default=None, metadata=dc_config(field_name="decision_reason") ) @@ -27456,11 +27251,11 @@ class UnblockUserResponse(DataClassJsonMixin): @dataclass class UnblockUsersRequest(DataClassJsonMixin): blocked_user_id: str = dc_field(metadata=dc_config(field_name="blocked_user_id")) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -27507,13 +27302,13 @@ class UndeleteMessageResponse(DataClassJsonMixin): @dataclass class UnfollowBatchRequest(DataClassJsonMixin): # List of follow relationships to remove, each with optional keep_history - follows: "List[UnfollowPair]" = dc_field(metadata=dc_config(field_name="follows")) + follows: "list[UnfollowPair]" = dc_field(metadata=dc_config(field_name="follows")) # Whether to delete the corresponding notification activity (default: false) - delete_notification_activity: Optional[bool] = dc_field( + delete_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="delete_notification_activity") ) # If true, enriches the follow's source_feed and target_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) @@ -27522,7 +27317,7 @@ class UnfollowBatchRequest(DataClassJsonMixin): class UnfollowBatchResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of follow relationships that were removed - follows: "List[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) + follows: "list[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) @dataclass @@ -27532,7 +27327,7 @@ class UnfollowPair(DataClassJsonMixin): # Fully qualified ID of the target feed target: str = dc_field(metadata=dc_config(field_name="target")) # When true, activities from the unfollowed feed will remain in the source feed's timeline (default: false) - keep_history: Optional[bool] = dc_field( + keep_history: bool | None = dc_field( default=None, metadata=dc_config(field_name="keep_history") ) @@ -27546,18 +27341,18 @@ class UnfollowResponse(DataClassJsonMixin): @dataclass class UnmuteChannelRequest(DataClassJsonMixin): # Duration of mute in milliseconds - expiration: Optional[int] = dc_field( + expiration: int | None = dc_field( default=None, metadata=dc_config(field_name="expiration") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Channel CIDs to mute (if multiple channels) - channel_cids: Optional[List[str]] = dc_field( + channel_cids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="channel_cids") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -27565,12 +27360,12 @@ class UnmuteChannelRequest(DataClassJsonMixin): @dataclass class UnmuteRequest(DataClassJsonMixin): # User IDs to unmute - target_ids: List[str] = dc_field(metadata=dc_config(field_name="target_ids")) - user_id: Optional[str] = dc_field( + target_ids: list[str] = dc_field(metadata=dc_config(field_name="target_ids")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -27579,7 +27374,7 @@ class UnmuteRequest(DataClassJsonMixin): class UnmuteResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # A list of users that can't be found. Common cause for this is deleted users - non_existing_users: Optional[List[str]] = dc_field( + non_existing_users: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="non_existing_users") ) @@ -27610,14 +27405,14 @@ class UnpinResponse(DataClassJsonMixin): @dataclass class UnreadCountsBatchRequest(DataClassJsonMixin): - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + user_ids: list[str] = dc_field(metadata=dc_config(field_name="user_ids")) @dataclass class UnreadCountsBatchResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - counts_by_user: "Dict[str, Optional[UnreadCountsResponse]]" = dc_field( + counts_by_user: "dict[str, UnreadCountsResponse | None]" = dc_field( metadata=dc_config(field_name="counts_by_user") ) @@ -27651,16 +27446,16 @@ class UnreadCountsResponse(DataClassJsonMixin): total_unread_threads_count: int = dc_field( metadata=dc_config(field_name="total_unread_threads_count") ) - channel_type: "List[UnreadCountsChannelType]" = dc_field( + channel_type: "list[UnreadCountsChannelType]" = dc_field( metadata=dc_config(field_name="channel_type") ) - channels: "List[UnreadCountsChannel]" = dc_field( + channels: "list[UnreadCountsChannel]" = dc_field( metadata=dc_config(field_name="channels") ) - threads: "List[UnreadCountsThread]" = dc_field( + threads: "list[UnreadCountsThread]" = dc_field( metadata=dc_config(field_name="threads") ) - total_unread_count_by_team: "Optional[Dict[str, int]]" = dc_field( + total_unread_count_by_team: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="total_unread_count_by_team") ) @@ -27687,11 +27482,11 @@ class UnreadCountsThread(DataClassJsonMixin): @dataclass class UpdateActivitiesPartialBatchRequest(DataClassJsonMixin): # List of activity changes to apply. Each change specifies an activity ID and the fields to set/unset - changes: "List[UpdateActivityPartialChangeRequest]" = dc_field( + changes: "list[UpdateActivityPartialChangeRequest]" = dc_field( metadata=dc_config(field_name="changes") ) # If true, forces moderation to run for server-side requests. By default, server-side requests skip moderation. Client-side requests always run moderation regardless of this field. - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) @@ -27700,7 +27495,7 @@ class UpdateActivitiesPartialBatchRequest(DataClassJsonMixin): class UpdateActivitiesPartialBatchResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of successfully updated activities - activities: "List[ActivityResponse]" = dc_field( + activities: "list[ActivityResponse]" = dc_field( metadata=dc_config(field_name="activities") ) @@ -27711,19 +27506,19 @@ class UpdateActivityPartialChangeRequest(DataClassJsonMixin): activity_id: str = dc_field(metadata=dc_config(field_name="activity_id")) # Whether to copy custom data to the notification activity (only applies when handle_mention_notifications creates notifications) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # When true and 'mentioned_user_ids' is updated, automatically creates or deletes mention notifications for added/removed users. Only applicable for client-side requests (ignored for server-side requests) - handle_mention_notifications: Optional[bool] = dc_field( + handle_mention_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="handle_mention_notifications") ) # List of field names to remove. Supported fields: 'custom', 'location', 'expires_at', 'filter_tags', 'interest_tags', 'attachments', 'poll_id', 'mentioned_user_ids'. Use dot-notation for nested custom fields (e.g., 'custom.field_name') - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) # Map of field names to new values. Supported fields: 'text', 'attachments', 'custom', 'visibility', 'visibility_tag', 'restrict_replies' (values: 'everyone', 'people_i_follow', 'nobody'), 'location', 'expires_at', 'filter_tags', 'interest_tags', 'poll_id', 'feeds', 'mentioned_user_ids'. For custom fields, use dot-notation (e.g., 'custom.field_name') - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) @@ -27732,38 +27527,38 @@ class UpdateActivityPartialChangeRequest(DataClassJsonMixin): class UpdateActivityPartialRequest(DataClassJsonMixin): # Whether to copy custom data to the notification activity (only applies when handle_mention_notifications creates notifications) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # If true, enriches the activity's current_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) # If true, forces moderation to run for server-side requests. By default, server-side requests skip moderation. Client-side requests always run moderation regardless of this field. - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) # If true, creates notification activities for newly mentioned users and deletes notifications for users no longer mentioned - handle_mention_notifications: Optional[bool] = dc_field( + handle_mention_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="handle_mention_notifications") ) # If true, runs activity processors on the updated activity. Processors will only run if the activity text and/or attachments are changed. Defaults to false. - run_activity_processors: Optional[bool] = dc_field( + run_activity_processors: bool | None = dc_field( default=None, metadata=dc_config(field_name="run_activity_processors") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # List of field names to remove. Supported fields: 'custom', 'visibility_tag', 'location', 'expires_at', 'filter_tags', 'interest_tags', 'attachments', 'poll_id', 'mentioned_user_ids', 'search_data'. Use dot-notation for nested custom fields (e.g., 'custom.field_name') - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) # Map of field names to new values. Supported fields: 'text', 'attachments', 'custom', 'visibility', 'visibility_tag', 'restrict_replies' (values: 'everyone', 'people_i_follow', 'nobody'), 'location', 'expires_at', 'filter_tags', 'interest_tags', 'poll_id', 'feeds', 'mentioned_user_ids', 'search_data'. For custom fields, use dot-notation (e.g., 'custom.field_name') - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -27778,15 +27573,15 @@ class UpdateActivityPartialResponse(DataClassJsonMixin): class UpdateActivityRequest(DataClassJsonMixin): # Whether to copy custom data to the notification activity (only applies when handle_mention_notifications creates notifications) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # If true, enriches the activity's current_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) # Time when the activity will expire - expires_at: Optional[datetime] = dc_field( + expires_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expires_at", @@ -27796,79 +27591,79 @@ class UpdateActivityRequest(DataClassJsonMixin): ), ) # If true, forces moderation to run for server-side requests. By default, server-side requests skip moderation. Client-side requests always run moderation regardless of this field. - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) # If true, creates notification activities for newly mentioned users and deletes notifications for users no longer mentioned - handle_mention_notifications: Optional[bool] = dc_field( + handle_mention_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="handle_mention_notifications") ) # Poll ID - poll_id: Optional[str] = dc_field( + poll_id: str | None = dc_field( default=None, metadata=dc_config(field_name="poll_id") ) # Controls who can add comments/replies to this activity. One of: everyone, people_i_follow, nobody - restrict_replies: Optional[str] = dc_field( + restrict_replies: str | None = dc_field( default=None, metadata=dc_config(field_name="restrict_replies") ) # If true, runs activity processors on the updated activity. Processors will only run if the activity text and/or attachments are changed. Defaults to false. - run_activity_processors: Optional[bool] = dc_field( + run_activity_processors: bool | None = dc_field( default=None, metadata=dc_config(field_name="run_activity_processors") ) # Whether to skip URL enrichment for the activity - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) # The text content of the activity - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - user_id: Optional[str] = dc_field( + text: str | None = dc_field(default=None, metadata=dc_config(field_name="text")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Visibility setting for the activity - visibility: Optional[str] = dc_field( + visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility") ) # If visibility is 'tag', this is the tag name and is required - visibility_tag: Optional[str] = dc_field( + visibility_tag: str | None = dc_field( default=None, metadata=dc_config(field_name="visibility_tag") ) # List of attachments for the activity - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # Collections that this activity references - collection_refs: Optional[List[str]] = dc_field( + collection_refs: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="collection_refs") ) # List of feeds the activity is present in - feeds: Optional[List[str]] = dc_field( + feeds: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="feeds") ) # Tags used for filtering the activity - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) # Tags indicating interest categories - interest_tags: Optional[List[str]] = dc_field( + interest_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="interest_tags") ) # List of user IDs mentioned in the activity - mentioned_user_ids: Optional[List[str]] = dc_field( + mentioned_user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_user_ids") ) # Custom data for the activity - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) # Additional data for search indexing - search_data: Optional[Dict[str, object]] = dc_field( + search_data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="search_data") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -27881,99 +27676,99 @@ class UpdateActivityResponse(DataClassJsonMixin): @dataclass class UpdateAppRequest(DataClassJsonMixin): - async_url_enrich_enabled: Optional[bool] = dc_field( + async_url_enrich_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="async_url_enrich_enabled") ) - auto_translation_enabled: Optional[bool] = dc_field( + auto_translation_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="auto_translation_enabled") ) - before_message_send_hook_attempt_timeout_ms: Optional[int] = dc_field( + before_message_send_hook_attempt_timeout_ms: int | None = dc_field( default=None, metadata=dc_config(field_name="before_message_send_hook_attempt_timeout_ms"), ) - before_message_send_hook_url: Optional[str] = dc_field( + before_message_send_hook_url: str | None = dc_field( default=None, metadata=dc_config(field_name="before_message_send_hook_url") ) - cdn_expiration_seconds: Optional[int] = dc_field( + cdn_expiration_seconds: int | None = dc_field( default=None, metadata=dc_config(field_name="cdn_expiration_seconds") ) - channel_hide_members_only: Optional[bool] = dc_field( + channel_hide_members_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="channel_hide_members_only") ) - chat_primary_use_case: Optional[str] = dc_field( + chat_primary_use_case: str | None = dc_field( default=None, metadata=dc_config(field_name="chat_primary_use_case") ) - custom_action_handler_url: Optional[str] = dc_field( + custom_action_handler_url: str | None = dc_field( default=None, metadata=dc_config(field_name="custom_action_handler_url") ) - disable_auth_checks: Optional[bool] = dc_field( + disable_auth_checks: bool | None = dc_field( default=None, metadata=dc_config(field_name="disable_auth_checks") ) - disable_permissions_checks: Optional[bool] = dc_field( + disable_permissions_checks: bool | None = dc_field( default=None, metadata=dc_config(field_name="disable_permissions_checks") ) - enable_hook_payload_compression: Optional[bool] = dc_field( + enable_hook_payload_compression: bool | None = dc_field( default=None, metadata=dc_config(field_name="enable_hook_payload_compression") ) - enforce_unique_usernames: Optional[str] = dc_field( + enforce_unique_usernames: str | None = dc_field( default=None, metadata=dc_config(field_name="enforce_unique_usernames") ) - feed_audit_logs_enabled: Optional[bool] = dc_field( + feed_audit_logs_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="feed_audit_logs_enabled") ) - feeds_moderation_enabled: Optional[bool] = dc_field( + feeds_moderation_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="feeds_moderation_enabled") ) - feeds_v2_region: Optional[str] = dc_field( + feeds_v2_region: str | None = dc_field( default=None, metadata=dc_config(field_name="feeds_v2_region") ) - guest_user_creation_disabled: Optional[bool] = dc_field( + guest_user_creation_disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="guest_user_creation_disabled") ) - image_moderation_enabled: Optional[bool] = dc_field( + image_moderation_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="image_moderation_enabled") ) - max_aggregated_activities_length: Optional[int] = dc_field( + max_aggregated_activities_length: int | None = dc_field( default=None, metadata=dc_config(field_name="max_aggregated_activities_length") ) - member_custom_on_messages_enabled: Optional[bool] = dc_field( + member_custom_on_messages_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="member_custom_on_messages_enabled") ) - migrate_permissions_to_v2: Optional[bool] = dc_field( + migrate_permissions_to_v2: bool | None = dc_field( default=None, metadata=dc_config(field_name="migrate_permissions_to_v2") ) - moderation_analytics_enabled: Optional[bool] = dc_field( + moderation_analytics_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="moderation_analytics_enabled") ) - moderation_enabled: Optional[bool] = dc_field( + moderation_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="moderation_enabled") ) - moderation_onboarding_complete: Optional[bool] = dc_field( + moderation_onboarding_complete: bool | None = dc_field( default=None, metadata=dc_config(field_name="moderation_onboarding_complete") ) - moderation_s3_image_access_role_arn: Optional[str] = dc_field( + moderation_s3_image_access_role_arn: str | None = dc_field( default=None, metadata=dc_config(field_name="moderation_s3_image_access_role_arn"), ) - moderation_webhook_url: Optional[str] = dc_field( + moderation_webhook_url: str | None = dc_field( default=None, metadata=dc_config(field_name="moderation_webhook_url") ) - multi_tenant_enabled: Optional[bool] = dc_field( + multi_tenant_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="multi_tenant_enabled") ) - permission_version: Optional[str] = dc_field( + permission_version: str | None = dc_field( default=None, metadata=dc_config(field_name="permission_version") ) - reminders_interval: Optional[int] = dc_field( + reminders_interval: int | None = dc_field( default=None, metadata=dc_config(field_name="reminders_interval") ) - reminders_max_members: Optional[int] = dc_field( + reminders_max_members: int | None = dc_field( default=None, metadata=dc_config(field_name="reminders_max_members") ) - reminders_max_per_user: Optional[int] = dc_field( + reminders_max_per_user: int | None = dc_field( default=None, metadata=dc_config(field_name="reminders_max_per_user") ) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + revoke_tokens_issued_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="revoke_tokens_issued_before", @@ -27982,116 +27777,116 @@ class UpdateAppRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - sns_key: Optional[str] = dc_field( + sns_key: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_key") ) - sns_secret: Optional[str] = dc_field( + sns_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_secret") ) - sns_topic_arn: Optional[str] = dc_field( + sns_topic_arn: str | None = dc_field( default=None, metadata=dc_config(field_name="sns_topic_arn") ) - sqs_key: Optional[str] = dc_field( + sqs_key: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_key") ) - sqs_secret: Optional[str] = dc_field( + sqs_secret: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_secret") ) - sqs_url: Optional[str] = dc_field( + sqs_url: str | None = dc_field( default=None, metadata=dc_config(field_name="sqs_url") ) - user_response_time_enabled: Optional[bool] = dc_field( + user_response_time_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="user_response_time_enabled") ) - video_primary_use_case: Optional[str] = dc_field( + video_primary_use_case: str | None = dc_field( default=None, metadata=dc_config(field_name="video_primary_use_case") ) - webhook_url: Optional[str] = dc_field( + webhook_url: str | None = dc_field( default=None, metadata=dc_config(field_name="webhook_url") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - event_hooks: "Optional[List[EventHook]]" = dc_field( + event_hooks: "list[EventHook] | None" = dc_field( default=None, metadata=dc_config(field_name="event_hooks") ) - image_moderation_block_labels: Optional[List[str]] = dc_field( + image_moderation_block_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="image_moderation_block_labels") ) - image_moderation_labels: Optional[List[str]] = dc_field( + image_moderation_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="image_moderation_labels") ) - user_search_disallowed_roles: Optional[List[str]] = dc_field( + user_search_disallowed_roles: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="user_search_disallowed_roles") ) - webhook_events: Optional[List[str]] = dc_field( + webhook_events: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="webhook_events") ) - activity_metrics_config: "Optional[Dict[str, int]]" = dc_field( + activity_metrics_config: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_metrics_config") ) - apn_config: "Optional[APNConfig]" = dc_field( + apn_config: "APNConfig | None" = dc_field( default=None, metadata=dc_config(field_name="apn_config") ) - async_moderation_config: "Optional[AsyncModerationConfiguration]" = dc_field( + async_moderation_config: "AsyncModerationConfiguration | None" = dc_field( default=None, metadata=dc_config(field_name="async_moderation_config") ) - datadog_info: "Optional[DataDogInfo]" = dc_field( + datadog_info: "DataDogInfo | None" = dc_field( default=None, metadata=dc_config(field_name="datadog_info") ) - file_upload_config: "Optional[FileUploadConfig]" = dc_field( + file_upload_config: "FileUploadConfig | None" = dc_field( default=None, metadata=dc_config(field_name="file_upload_config") ) - firebase_config: "Optional[FirebaseConfig]" = dc_field( + firebase_config: "FirebaseConfig | None" = dc_field( default=None, metadata=dc_config(field_name="firebase_config") ) - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) - huawei_config: "Optional[HuaweiConfig]" = dc_field( + huawei_config: "HuaweiConfig | None" = dc_field( default=None, metadata=dc_config(field_name="huawei_config") ) - image_upload_config: "Optional[FileUploadConfig]" = dc_field( + image_upload_config: "FileUploadConfig | None" = dc_field( default=None, metadata=dc_config(field_name="image_upload_config") ) - moderation_dashboard_preferences: "Optional[ModerationDashboardPreferences]" = ( + moderation_dashboard_preferences: "ModerationDashboardPreferences | None" = ( dc_field( default=None, metadata=dc_config(field_name="moderation_dashboard_preferences"), ) ) - push_config: "Optional[PushConfig]" = dc_field( + push_config: "PushConfig | None" = dc_field( default=None, metadata=dc_config(field_name="push_config") ) - xiaomi_config: "Optional[XiaomiConfig]" = dc_field( + xiaomi_config: "XiaomiConfig | None" = dc_field( default=None, metadata=dc_config(field_name="xiaomi_config") ) @dataclass class UpdateBlockListRequest(DataClassJsonMixin): - is_confusable_folding_enabled: Optional[bool] = dc_field( + is_confusable_folding_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_confusable_folding_enabled") ) - is_leet_check_enabled: Optional[bool] = dc_field( + is_leet_check_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_leet_check_enabled") ) - is_plural_check_enabled: Optional[bool] = dc_field( + is_plural_check_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_plural_check_enabled") ) - is_substring_matching_enabled: Optional[bool] = dc_field( + is_substring_matching_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_substring_matching_enabled") ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - user_id: Optional[str] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # List of words to block - words: Optional[List[str]] = dc_field( + words: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="words") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28101,7 +27896,7 @@ class UpdateBlockListResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Block list contains restricted words - blocklist: "Optional[BlockListResponse]" = dc_field( + blocklist: "BlockListResponse | None" = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) @@ -28109,16 +27904,16 @@ class UpdateBlockListResponse(DataClassJsonMixin): @dataclass class UpdateBookmarkFolderRequest(DataClassJsonMixin): # Name of the folder - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - user_id: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for the folder - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28134,25 +27929,25 @@ class UpdateBookmarkFolderResponse(DataClassJsonMixin): @dataclass class UpdateBookmarkRequest(DataClassJsonMixin): # ID of the folder containing the bookmark - folder_id: Optional[str] = dc_field( + folder_id: str | None = dc_field( default=None, metadata=dc_config(field_name="folder_id") ) # Move the bookmark to this folder (empty string removes the folder) - new_folder_id: Optional[str] = dc_field( + new_folder_id: str | None = dc_field( default=None, metadata=dc_config(field_name="new_folder_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for the bookmark - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - new_folder: "Optional[AddFolderRequest]" = dc_field( + new_folder: "AddFolderRequest | None" = dc_field( default=None, metadata=dc_config(field_name="new_folder") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28166,11 +27961,11 @@ class UpdateBookmarkResponse(DataClassJsonMixin): @dataclass class UpdateCallMembersRequest(DataClassJsonMixin): # List of userID to remove - remove_members: Optional[List[str]] = dc_field( + remove_members: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="remove_members") ) # List of members to update or insert - update_members: "Optional[List[MemberRequest]]" = dc_field( + update_members: "list[MemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="update_members") ) @@ -28179,13 +27974,13 @@ class UpdateCallMembersRequest(DataClassJsonMixin): class UpdateCallMembersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) @dataclass class UpdateCallRequest(DataClassJsonMixin): # the time the call is scheduled to start - starts_at: Optional[datetime] = dc_field( + starts_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="starts_at", @@ -28195,10 +27990,10 @@ class UpdateCallRequest(DataClassJsonMixin): ), ) # Custom data for this object - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - settings_override: "Optional[CallSettingsRequest]" = dc_field( + settings_override: "CallSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="settings_override") ) @@ -28206,8 +28001,8 @@ class UpdateCallRequest(DataClassJsonMixin): @dataclass class UpdateCallResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) - own_capabilities: "List[OwnCapability]" = dc_field( + members: "list[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + own_capabilities: "list[OwnCapability]" = dc_field( metadata=dc_config(field_name="own_capabilities") ) # Represents a call @@ -28216,16 +28011,16 @@ class UpdateCallResponse(DataClassJsonMixin): @dataclass class UpdateCallTypeRequest(DataClassJsonMixin): - external_storage: Optional[str] = dc_field( + external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="external_storage") ) - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) - notification_settings: "Optional[NotificationSettingsRequest]" = dc_field( + notification_settings: "NotificationSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="notification_settings") ) - settings: "Optional[CallSettingsRequest]" = dc_field( + settings: "CallSettingsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="settings") ) @@ -28254,7 +28049,7 @@ class UpdateCallTypeResponse(DataClassJsonMixin): ) ) # the permissions granted to each role - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) notification_settings: "NotificationSettingsResponse" = dc_field( metadata=dc_config(field_name="notification_settings") ) @@ -28262,7 +28057,7 @@ class UpdateCallTypeResponse(DataClassJsonMixin): metadata=dc_config(field_name="settings") ) # the external storage for the call type - external_storage: Optional[str] = dc_field( + external_storage: str | None = dc_field( default=None, metadata=dc_config(field_name="external_storage") ) @@ -28273,53 +28068,53 @@ class UpdateCampaignRequest(DataClassJsonMixin): message_template: "CampaignMessageTemplate" = dc_field( metadata=dc_config(field_name="message_template") ) - create_channels: Optional[bool] = dc_field( + create_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_channels") ) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - sender_mode: Optional[str] = dc_field( + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + sender_mode: str | None = dc_field( default=None, metadata=dc_config(field_name="sender_mode") ) - sender_visibility: Optional[str] = dc_field( + sender_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="sender_visibility") ) - show_channels: Optional[bool] = dc_field( + show_channels: bool | None = dc_field( default=None, metadata=dc_config(field_name="show_channels") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - skip_webhook: Optional[bool] = dc_field( + skip_webhook: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_webhook") ) - segment_ids: Optional[List[str]] = dc_field( + segment_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="segment_ids") ) - user_ids: Optional[List[str]] = dc_field( + user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="user_ids") ) - channel_template: "Optional[CampaignChannelTemplate]" = dc_field( + channel_template: "CampaignChannelTemplate | None" = dc_field( default=None, metadata=dc_config(field_name="channel_template") ) @dataclass class UpdateChannelPartialRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28329,11 +28124,11 @@ class UpdateChannelPartialResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of updated members - members: "List[ChannelMemberResponse]" = dc_field( + members: "list[ChannelMemberResponse]" = dc_field( metadata=dc_config(field_name="members") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) @@ -28341,19 +28136,19 @@ class UpdateChannelPartialResponse(DataClassJsonMixin): @dataclass class UpdateChannelRequest(DataClassJsonMixin): # Set to `true` to accept the invite - accept_invite: Optional[bool] = dc_field( + accept_invite: bool | None = dc_field( default=None, metadata=dc_config(field_name="accept_invite") ) # Sets cool down period for the channel in seconds - cooldown: Optional[int] = dc_field( + cooldown: int | None = dc_field( default=None, metadata=dc_config(field_name="cooldown") ) # Set to `true` to hide channel's history when adding new members - hide_history: Optional[bool] = dc_field( + hide_history: bool | None = dc_field( default=None, metadata=dc_config(field_name="hide_history") ) # If set, hides channel's history before this time when adding new members. Takes precedence over `hide_history` when both are provided. Must be in RFC3339 format (e.g., "2024-01-01T10:00:00Z") and in the past. - hide_history_before: Optional[datetime] = dc_field( + hide_history_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="hide_history_before", @@ -28363,57 +28158,57 @@ class UpdateChannelRequest(DataClassJsonMixin): ), ) # Set to `true` to reject the invite - reject_invite: Optional[bool] = dc_field( + reject_invite: bool | None = dc_field( default=None, metadata=dc_config(field_name="reject_invite") ) # When `message` is set disables all push notifications for it - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # List of filter tags to add to the channel - add_filter_tags: Optional[List[str]] = dc_field( + add_filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="add_filter_tags") ) # List of user IDs to add to the channel - add_members: "Optional[List[ChannelMemberRequest]]" = dc_field( + add_members: "list[ChannelMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="add_members") ) # List of user IDs to make channel moderators - add_moderators: Optional[List[str]] = dc_field( + add_moderators: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="add_moderators") ) # List of channel member role assignments. If any specified user is not part of the channel, the request will fail - assign_roles: "Optional[List[ChannelMemberRequest]]" = dc_field( + assign_roles: "list[ChannelMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="assign_roles") ) # List of user IDs to take away moderators status from - demote_moderators: Optional[List[str]] = dc_field( + demote_moderators: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="demote_moderators") ) # List of user IDs to invite to the channel - invites: "Optional[List[ChannelMemberRequest]]" = dc_field( + invites: "list[ChannelMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="invites") ) # List of filter tags to remove from the channel - remove_filter_tags: Optional[List[str]] = dc_field( + remove_filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="remove_filter_tags") ) # List of user IDs to remove from the channel - remove_members: Optional[List[str]] = dc_field( + remove_members: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="remove_members") ) - data: "Optional[ChannelInputRequest]" = dc_field( + data: "ChannelInputRequest | None" = dc_field( default=None, metadata=dc_config(field_name="data") ) # Message data for creating or updating a message - message: "Optional[MessageRequest]" = dc_field( + message: "MessageRequest | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28423,15 +28218,15 @@ class UpdateChannelResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of channel members - members: "List[ChannelMemberResponse]" = dc_field( + members: "list[ChannelMemberResponse]" = dc_field( metadata=dc_config(field_name="members") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) @@ -28443,103 +28238,102 @@ class UpdateChannelTypeRequest(DataClassJsonMixin): max_message_length: int = dc_field( metadata=dc_config(field_name="max_message_length") ) - blocklist: Optional[str] = dc_field( + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) - connect_events: Optional[bool] = dc_field( + connect_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="connect_events") ) - count_messages: Optional[bool] = dc_field( + count_messages: bool | None = dc_field( default=None, metadata=dc_config(field_name="count_messages") ) - custom_events: Optional[bool] = dc_field( + custom_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="custom_events") ) - delivery_events: Optional[bool] = dc_field( + delivery_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="delivery_events") ) - mark_messages_pending: Optional[bool] = dc_field( + mark_messages_pending: bool | None = dc_field( default=None, metadata=dc_config(field_name="mark_messages_pending") ) - mutes: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="mutes") + message_retention: str | None = dc_field( + default=None, metadata=dc_config(field_name="message_retention") ) - partition_size: Optional[int] = dc_field( + mutes: bool | None = dc_field(default=None, metadata=dc_config(field_name="mutes")) + partition_size: int | None = dc_field( default=None, metadata=dc_config(field_name="partition_size") ) - partition_ttl: Optional[str] = dc_field( + partition_ttl: str | None = dc_field( default=None, metadata=dc_config(field_name="partition_ttl") ) - polls: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="polls") - ) - push_level: Optional[str] = dc_field( + polls: bool | None = dc_field(default=None, metadata=dc_config(field_name="polls")) + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) - push_notifications: Optional[bool] = dc_field( + push_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="push_notifications") ) - quotes: Optional[bool] = dc_field( + quotes: bool | None = dc_field( default=None, metadata=dc_config(field_name="quotes") ) - reactions: Optional[bool] = dc_field( + reactions: bool | None = dc_field( default=None, metadata=dc_config(field_name="reactions") ) - read_events: Optional[bool] = dc_field( + read_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="read_events") ) - reminders: Optional[bool] = dc_field( + reminders: bool | None = dc_field( default=None, metadata=dc_config(field_name="reminders") ) - replies: Optional[bool] = dc_field( + replies: bool | None = dc_field( default=None, metadata=dc_config(field_name="replies") ) - search: Optional[bool] = dc_field( + search: bool | None = dc_field( default=None, metadata=dc_config(field_name="search") ) - shared_locations: Optional[bool] = dc_field( + shared_locations: bool | None = dc_field( default=None, metadata=dc_config(field_name="shared_locations") ) - skip_last_msg_update_for_system_msgs: Optional[bool] = dc_field( + skip_last_msg_update_for_system_msgs: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_last_msg_update_for_system_msgs"), ) - typing_events: Optional[bool] = dc_field( + typing_events: bool | None = dc_field( default=None, metadata=dc_config(field_name="typing_events") ) - uploads: Optional[bool] = dc_field( + uploads: bool | None = dc_field( default=None, metadata=dc_config(field_name="uploads") ) - url_enrichment: Optional[bool] = dc_field( + url_enrichment: bool | None = dc_field( default=None, metadata=dc_config(field_name="url_enrichment") ) - user_message_reminders: Optional[bool] = dc_field( + user_message_reminders: bool | None = dc_field( default=None, metadata=dc_config(field_name="user_message_reminders") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - blocklists: "Optional[List[BlockListOptions]]" = dc_field( + blocklists: "list[BlockListOptions] | None" = dc_field( default=None, metadata=dc_config(field_name="blocklists") ) # List of commands that channel supports - commands: Optional[List[str]] = dc_field( + commands: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="commands") ) - permissions: "Optional[List[PolicyRequest]]" = dc_field( + permissions: "list[PolicyRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="permissions") ) # Sets thresholds for AI moderation - automod_thresholds: "Optional[Thresholds]" = dc_field( + automod_thresholds: "Thresholds | None" = dc_field( default=None, metadata=dc_config(field_name="automod_thresholds") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) @@ -28567,6 +28361,9 @@ class UpdateChannelTypeResponse(DataClassJsonMixin): max_message_length: int = dc_field( metadata=dc_config(field_name="max_message_length") ) + message_retention: str = dc_field( + metadata=dc_config(field_name="message_retention") + ) mutes: bool = dc_field(metadata=dc_config(field_name="mutes")) name: str = dc_field(metadata=dc_config(field_name="name")) polls: bool = dc_field(metadata=dc_config(field_name="polls")) @@ -28597,37 +28394,37 @@ class UpdateChannelTypeResponse(DataClassJsonMixin): user_message_reminders: bool = dc_field( metadata=dc_config(field_name="user_message_reminders") ) - commands: List[str] = dc_field(metadata=dc_config(field_name="commands")) - permissions: "List[PolicyRequest]" = dc_field( + commands: list[str] = dc_field(metadata=dc_config(field_name="commands")) + permissions: "list[PolicyRequest]" = dc_field( metadata=dc_config(field_name="permissions") ) - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) - blocklist: Optional[str] = dc_field( + grants: "dict[str, list[str]]" = dc_field(metadata=dc_config(field_name="grants")) + blocklist: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist") ) - blocklist_behavior: Optional[str] = dc_field( + blocklist_behavior: str | None = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) - partition_size: Optional[int] = dc_field( + partition_size: int | None = dc_field( default=None, metadata=dc_config(field_name="partition_size") ) - partition_ttl: Optional[str] = dc_field( + partition_ttl: str | None = dc_field( default=None, metadata=dc_config(field_name="partition_ttl") ) - push_level: Optional[str] = dc_field( + push_level: str | None = dc_field( default=None, metadata=dc_config(field_name="push_level") ) - allowed_flag_reasons: Optional[List[str]] = dc_field( + allowed_flag_reasons: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - blocklists: "Optional[List[BlockListOptions]]" = dc_field( + blocklists: "list[BlockListOptions] | None" = dc_field( default=None, metadata=dc_config(field_name="blocklists") ) # Sets thresholds for AI moderation - automod_thresholds: "Optional[Thresholds]" = dc_field( + automod_thresholds: "Thresholds | None" = dc_field( default=None, metadata=dc_config(field_name="automod_thresholds") ) - chat_preferences: "Optional[ChatPreferences]" = dc_field( + chat_preferences: "ChatPreferences | None" = dc_field( default=None, metadata=dc_config(field_name="chat_preferences") ) @@ -28639,20 +28436,20 @@ class UpdateCollectionRequest(DataClassJsonMixin): # Name/type of the collection name: str = dc_field(metadata=dc_config(field_name="name")) # Custom data for the collection (required, must contain at least one key) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) @dataclass class UpdateCollectionsRequest(DataClassJsonMixin): # List of collections to update (only custom data is updatable) - collections: "List[UpdateCollectionRequest]" = dc_field( + collections: "list[UpdateCollectionRequest]" = dc_field( metadata=dc_config(field_name="collections") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28661,7 +28458,7 @@ class UpdateCollectionsRequest(DataClassJsonMixin): class UpdateCollectionsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of updated collections - collections: "List[CollectionResponse]" = dc_field( + collections: "list[CollectionResponse]" = dc_field( metadata=dc_config(field_name="collections") ) @@ -28671,16 +28468,16 @@ class UpdateCommandRequest(DataClassJsonMixin): # Description, shown in commands auto-completion description: str = dc_field(metadata=dc_config(field_name="description")) # Arguments help text, shown in commands auto-completion - args: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="args")) + args: str | None = dc_field(default=None, metadata=dc_config(field_name="args")) # Set name used for grouping commands - set: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="set")) + set: str | None = dc_field(default=None, metadata=dc_config(field_name="set")) @dataclass class UpdateCommandResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Represents custom chat command - command: "Optional[Command]" = dc_field( + command: "Command | None" = dc_field( default=None, metadata=dc_config(field_name="command") ) @@ -28688,25 +28485,25 @@ class UpdateCommandResponse(DataClassJsonMixin): @dataclass class UpdateCommentBookmarkRequest(DataClassJsonMixin): # ID of the folder containing the bookmark - folder_id: Optional[str] = dc_field( + folder_id: str | None = dc_field( default=None, metadata=dc_config(field_name="folder_id") ) # Move the bookmark to this folder (empty string removes the folder) - new_folder_id: Optional[str] = dc_field( + new_folder_id: str | None = dc_field( default=None, metadata=dc_config(field_name="new_folder_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for the bookmark - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - new_folder: "Optional[AddFolderRequest]" = dc_field( + new_folder: "AddFolderRequest | None" = dc_field( default=None, metadata=dc_config(field_name="new_folder") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28721,38 +28518,38 @@ class UpdateCommentBookmarkResponse(DataClassJsonMixin): class UpdateCommentPartialRequest(DataClassJsonMixin): # Whether to copy custom data to notification activities Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # If true, forces moderation to run for server-side requests. By default, server-side requests skip moderation. Client-side requests always run moderation regardless of this field. - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) # Whether to handle mention notification changes - handle_mention_notifications: Optional[bool] = dc_field( + handle_mention_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="handle_mention_notifications") ) # Whether to skip URL enrichment - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) # Whether to skip push notifications - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # List of field names to remove. Supported fields: 'custom', 'attachments', 'mentioned_user_ids', 'status'. Use dot-notation for nested custom fields (e.g., 'custom.field_name') - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) # Map of field names to new values. Supported fields: 'text', 'attachments', 'custom', 'mentioned_user_ids', 'status'. Use dot-notation for nested custom fields (e.g., 'custom.field_name') - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28766,46 +28563,46 @@ class UpdateCommentPartialResponse(DataClassJsonMixin): @dataclass class UpdateCommentRequest(DataClassJsonMixin): # Updated text content of the comment - comment: Optional[str] = dc_field( + comment: str | None = dc_field( default=None, metadata=dc_config(field_name="comment") ) # Whether to copy custom data to the notification activity (only applies when handle_mention_notifications creates notifications) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # If true, forces moderation to run for server-side requests. By default, server-side requests skip moderation. Client-side requests always run moderation regardless of this field. - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) # If true, creates notification activities for newly mentioned users and deletes notifications for users no longer mentioned - handle_mention_notifications: Optional[bool] = dc_field( + handle_mention_notifications: bool | None = dc_field( default=None, metadata=dc_config(field_name="handle_mention_notifications") ) # Whether to skip URL enrichment for this comment - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Updated media attachments for the comment. Providing this field will replace all existing attachments. - attachments: "Optional[List[Attachment]]" = dc_field( + attachments: "list[Attachment] | None" = dc_field( default=None, metadata=dc_config(field_name="attachments") ) # List of user IDs mentioned in the comment - mentioned_user_ids: Optional[List[str]] = dc_field( + mentioned_user_ids: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="mentioned_user_ids") ) # Updated custom data for the comment - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -28822,17 +28619,17 @@ class UpdateExternalStorageRequest(DataClassJsonMixin): bucket: str = dc_field(metadata=dc_config(field_name="bucket")) # The type of storage to use storage_type: str = dc_field(metadata=dc_config(field_name="storage_type")) - gcs_credentials: Optional[str] = dc_field( + gcs_credentials: str | None = dc_field( default=None, metadata=dc_config(field_name="gcs_credentials") ) # The path prefix to use for storing files - path: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="path")) + path: str | None = dc_field(default=None, metadata=dc_config(field_name="path")) # Config for creating Amazon S3 storage. - aws_s3: "Optional[S3Request]" = dc_field( + aws_s3: "S3Request | None" = dc_field( default=None, metadata=dc_config(field_name="aws_s3") ) # Config for creating Azure Blob Storage storage - azure_blob: "Optional[AzureRequest]" = dc_field( + azure_blob: "AzureRequest | None" = dc_field( default=None, metadata=dc_config(field_name="azure_blob") ) @@ -28849,37 +28646,37 @@ class UpdateExternalStorageResponse(DataClassJsonMixin): @dataclass class UpdateFeedGroupRequest(DataClassJsonMixin): - default_visibility: Optional[str] = dc_field( + default_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="default_visibility") ) # Configuration for activity processors - activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + activity_processors: "list[ActivityProcessorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_processors") ) # Configuration for activity selectors - activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + activity_selectors: "list[ActivitySelectorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_selectors") ) - activity_filter: "Optional[ActivityFilterConfig]" = dc_field( + activity_filter: "ActivityFilterConfig | None" = dc_field( default=None, metadata=dc_config(field_name="activity_filter") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) # Custom data for the feed group - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - notification: "Optional[NotificationConfig]" = dc_field( + notification: "NotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="notification") ) - push_notification: "Optional[PushNotificationConfig]" = dc_field( + push_notification: "PushNotificationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="push_notification") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) - stories: "Optional[StoriesConfig]" = dc_field( + stories: "StoriesConfig | None" = dc_field( default=None, metadata=dc_config(field_name="stories") ) @@ -28896,13 +28693,11 @@ class UpdateFeedGroupResponse(DataClassJsonMixin): class UpdateFeedMembersRequest(DataClassJsonMixin): # Type of update operation to perform. One of: upsert, remove, set operation: str = dc_field(metadata=dc_config(field_name="operation")) - limit: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="limit") - ) - next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) - prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + limit: int | None = dc_field(default=None, metadata=dc_config(field_name="limit")) + next: str | None = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: str | None = dc_field(default=None, metadata=dc_config(field_name="prev")) # List of members to upsert, remove, or set - members: "Optional[List[FeedMemberRequest]]" = dc_field( + members: "list[FeedMemberRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) @@ -28911,9 +28706,9 @@ class UpdateFeedMembersRequest(DataClassJsonMixin): class UpdateFeedMembersResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - added: "List[FeedMemberResponse]" = dc_field(metadata=dc_config(field_name="added")) - removed_ids: List[str] = dc_field(metadata=dc_config(field_name="removed_ids")) - updated: "List[FeedMemberResponse]" = dc_field( + added: "list[FeedMemberResponse]" = dc_field(metadata=dc_config(field_name="added")) + removed_ids: list[str] = dc_field(metadata=dc_config(field_name="removed_ids")) + updated: "list[FeedMemberResponse]" = dc_field( metadata=dc_config(field_name="updated") ) @@ -28921,32 +28716,32 @@ class UpdateFeedMembersResponse(DataClassJsonMixin): @dataclass class UpdateFeedRequest(DataClassJsonMixin): # If true, removes the geographic location from the feed - clear_location: Optional[bool] = dc_field( + clear_location: bool | None = dc_field( default=None, metadata=dc_config(field_name="clear_location") ) # ID of the new feed creator (owner) - created_by_id: Optional[str] = dc_field( + created_by_id: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by_id") ) # Description of the feed - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # If true, enriches the feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) # Name of the feed - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # Tags used for filtering feeds - filter_tags: Optional[List[str]] = dc_field( + filter_tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="filter_tags") ) # Custom data for the feed - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - location: "Optional[Location]" = dc_field( + location: "Location | None" = dc_field( default=None, metadata=dc_config(field_name="location") ) @@ -28960,13 +28755,13 @@ class UpdateFeedResponse(DataClassJsonMixin): @dataclass class UpdateFeedViewRequest(DataClassJsonMixin): # Updated configuration for selecting activities - activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + activity_selectors: "list[ActivitySelectorConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="activity_selectors") ) - aggregation: "Optional[AggregationConfig]" = dc_field( + aggregation: "AggregationConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aggregation") ) - ranking: "Optional[RankingConfig]" = dc_field( + ranking: "RankingConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) @@ -28980,7 +28775,7 @@ class UpdateFeedViewResponse(DataClassJsonMixin): @dataclass class UpdateFeedVisibilityRequest(DataClassJsonMixin): # Updated permission grants for each role - grants: "Optional[Dict[str, List[str]]]" = dc_field( + grants: "dict[str, list[str]] | None" = dc_field( default=None, metadata=dc_config(field_name="grants") ) @@ -29000,43 +28795,41 @@ class UpdateFollowRequest(DataClassJsonMixin): # Fully qualified ID of the target feed target: str = dc_field(metadata=dc_config(field_name="target")) # Maximum number of historical activities to copy from the target feed when the follow is first materialized. Not set = unlimited (default). 0 = copy nothing. Range: 0-1000. - activity_copy_limit: Optional[int] = dc_field( + activity_copy_limit: int | None = dc_field( default=None, metadata=dc_config(field_name="activity_copy_limit") ) # Whether to copy custom data to the notification activity (only applies when create_notification_activity is true) Deprecated: use notification_context.trigger.custom and notification_context.target.custom instead # Deprecated - copy_custom_to_notification: Optional[bool] = dc_field( + copy_custom_to_notification: bool | None = dc_field( default=None, metadata=dc_config(field_name="copy_custom_to_notification") ) # Whether to create a notification activity for this follow - create_notification_activity: Optional[bool] = dc_field( + create_notification_activity: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_notification_activity") ) # If true, auto-creates users referenced by the source and target FIDs when they don't already exist. Server-side only. Defaults to false. Use directly on single follow endpoints (Follow, GetOrCreateFollow). On batch endpoints (FollowBatch, GetOrCreateFollows), use the top-level create_users field; per-item follows[i].create_users is rejected. - create_users: Optional[bool] = dc_field( + create_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_users") ) # If true, enriches the follow's source_feed and target_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) - follower_role: Optional[str] = dc_field( + follower_role: str | None = dc_field( default=None, metadata=dc_config(field_name="follower_role") ) # Push preference for the follow relationship - push_preference: Optional[str] = dc_field( + push_preference: str | None = dc_field( default=None, metadata=dc_config(field_name="push_preference") ) # Whether to skip push for this follow - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) # Status of the follow relationship. One of: accepted, pending, rejected - status: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="status") - ) + status: str | None = dc_field(default=None, metadata=dc_config(field_name="status")) # Custom data for the follow relationship - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -29052,7 +28845,7 @@ class UpdateLiveLocationRequest(DataClassJsonMixin): # Live location ID message_id: str = dc_field(metadata=dc_config(field_name="message_id")) # Time when the live location expires - end_at: Optional[datetime] = dc_field( + end_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="end_at", @@ -29062,21 +28855,21 @@ class UpdateLiveLocationRequest(DataClassJsonMixin): ), ) # Latitude coordinate - latitude: Optional[float] = dc_field( + latitude: float | None = dc_field( default=None, metadata=dc_config(field_name="latitude") ) # Longitude coordinate - longitude: Optional[float] = dc_field( + longitude: float | None = dc_field( default=None, metadata=dc_config(field_name="longitude") ) @dataclass class UpdateMemberPartialRequest(DataClassJsonMixin): - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) @@ -29085,7 +28878,7 @@ class UpdateMemberPartialRequest(DataClassJsonMixin): class UpdateMemberPartialResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - channel_member: "Optional[ChannelMemberResponse]" = dc_field( + channel_member: "ChannelMemberResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel_member") ) @@ -29093,21 +28886,21 @@ class UpdateMemberPartialResponse(DataClassJsonMixin): @dataclass class UpdateMembershipLevelRequest(DataClassJsonMixin): # Optional description of the membership level - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Display name for the membership level - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # Priority level (higher numbers = higher priority) - priority: Optional[int] = dc_field( + priority: int | None = dc_field( default=None, metadata=dc_config(field_name="priority") ) # Activity tags this membership level gives access to - tags: Optional[List[str]] = dc_field( + tags: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="tags") ) # Custom data for the membership level - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -29123,25 +28916,25 @@ class UpdateMembershipLevelResponse(DataClassJsonMixin): @dataclass class UpdateMessagePartialRequest(DataClassJsonMixin): # Skip enriching the URL in the message - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of field names to unset - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) # Sets new field values - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -29151,11 +28944,11 @@ class UpdateMessagePartialResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) # Pending message metadata - pending_message_metadata: "Optional[Dict[str, str]]" = dc_field( + pending_message_metadata: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="pending_message_metadata") ) @@ -29165,10 +28958,10 @@ class UpdateMessageRequest(DataClassJsonMixin): # Message data for creating or updating a message message: "MessageRequest" = dc_field(metadata=dc_config(field_name="message")) # Skip enrich URL - skip_enrich_url: Optional[bool] = dc_field( + skip_enrich_url: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_enrich_url") ) - skip_push: Optional[bool] = dc_field( + skip_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="skip_push") ) @@ -29179,7 +28972,7 @@ class UpdateMessageResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Represents any chat message message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) - pending_message_metadata: "Optional[Dict[str, str]]" = dc_field( + pending_message_metadata: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="pending_message_metadata") ) @@ -29190,34 +28983,34 @@ class UpdatePollOptionRequest(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) # Option text text: str = dc_field(metadata=dc_config(field_name="text")) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Custom data for this object - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class UpdatePollPartialRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of field names to unset - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) # Sets new field values - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -29229,74 +29022,98 @@ class UpdatePollRequest(DataClassJsonMixin): # Poll name name: str = dc_field(metadata=dc_config(field_name="name")) # Allow answers - allow_answers: Optional[bool] = dc_field( + allow_answers: bool | None = dc_field( default=None, metadata=dc_config(field_name="allow_answers") ) # Allow user suggested options - allow_user_suggested_options: Optional[bool] = dc_field( + allow_user_suggested_options: bool | None = dc_field( default=None, metadata=dc_config(field_name="allow_user_suggested_options") ) # Poll description - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Enforce unique vote - enforce_unique_vote: Optional[bool] = dc_field( + enforce_unique_vote: bool | None = dc_field( default=None, metadata=dc_config(field_name="enforce_unique_vote") ) # Is closed - is_closed: Optional[bool] = dc_field( + is_closed: bool | None = dc_field( default=None, metadata=dc_config(field_name="is_closed") ) # Max votes allowed - max_votes_allowed: Optional[int] = dc_field( + max_votes_allowed: int | None = dc_field( default=None, metadata=dc_config(field_name="max_votes_allowed") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Voting visibility - voting_visibility: Optional[str] = dc_field( + voting_visibility: str | None = dc_field( default=None, metadata=dc_config(field_name="voting_visibility") ) # Poll options - options: "Optional[List[PollOptionRequest]]" = dc_field( + options: "list[PollOptionRequest] | None" = dc_field( default=None, metadata=dc_config(field_name="options") ) # Custom data for this object - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) +@dataclass +class UpdatePredefinedFilterRequest(DataClassJsonMixin): + # The operation this filter is for (e.g., QueryChannels) + operation: str = dc_field(metadata=dc_config(field_name="operation")) + # Filter to apply to the query + filter: dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + # The description of the predefined filter + description: str | None = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + sort: "list[dict[str, object]] | None" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + + +@dataclass +class UpdatePredefinedFilterResponse(DataClassJsonMixin): + # Duration of the request in milliseconds + duration: str = dc_field(metadata=dc_config(field_name="duration")) + predefined_filter: "PredefinedFilterResponse | None" = dc_field( + default=None, metadata=dc_config(field_name="predefined_filter") + ) + + @dataclass class UpdateQueueRequest(DataClassJsonMixin): - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - user_id: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - sort: "Optional[List[Dict[str, object]]]" = dc_field( + sort: "list[dict[str, object]] | None" = dc_field( default=None, metadata=dc_config(field_name="sort") ) - filters: Optional[Dict[str, object]] = dc_field( + filters: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filters") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class UpdateReminderRequest(DataClassJsonMixin): - remind_at: Optional[datetime] = dc_field( + remind_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="remind_at", @@ -29305,11 +29122,11 @@ class UpdateReminderRequest(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -29328,33 +29145,33 @@ class UpdateSIPInboundRoutingRuleRequest(DataClassJsonMixin): # Name of the SIP Inbound Routing Rule name: str = dc_field(metadata=dc_config(field_name="name")) # List of SIP trunk IDs - trunk_ids: List[str] = dc_field(metadata=dc_config(field_name="trunk_ids")) + trunk_ids: list[str] = dc_field(metadata=dc_config(field_name="trunk_ids")) # Configuration for SIP caller settings caller_configs: "SIPCallerConfigsRequest" = dc_field( metadata=dc_config(field_name="caller_configs") ) # List of called numbers - called_numbers: Optional[List[str]] = dc_field( + called_numbers: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="called_numbers") ) # List of caller numbers (optional) - caller_numbers: Optional[List[str]] = dc_field( + caller_numbers: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="caller_numbers") ) # Configuration for SIP call settings - call_configs: "Optional[SIPCallConfigsRequest]" = dc_field( + call_configs: "SIPCallConfigsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="call_configs") ) # Configuration for direct routing rule calls - direct_routing_configs: "Optional[SIPDirectRoutingRuleCallConfigsRequest]" = ( - dc_field(default=None, metadata=dc_config(field_name="direct_routing_configs")) + direct_routing_configs: "SIPDirectRoutingRuleCallConfigsRequest | None" = dc_field( + default=None, metadata=dc_config(field_name="direct_routing_configs") ) # Configuration for PIN protection settings - pin_protection_configs: "Optional[SIPPinProtectionConfigsRequest]" = dc_field( + pin_protection_configs: "SIPPinProtectionConfigsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="pin_protection_configs") ) # Configuration for PIN routing rule calls - pin_routing_configs: "Optional[SIPInboundRoutingRulePinConfigsRequest]" = dc_field( + pin_routing_configs: "SIPInboundRoutingRulePinConfigsRequest | None" = dc_field( default=None, metadata=dc_config(field_name="pin_routing_configs") ) @@ -29363,7 +29180,7 @@ class UpdateSIPInboundRoutingRuleRequest(DataClassJsonMixin): class UpdateSIPInboundRoutingRuleResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # SIP Inbound Routing Rule response - sip_inbound_routing_rule: "Optional[SIPInboundRoutingRuleResponse]" = dc_field( + sip_inbound_routing_rule: "SIPInboundRoutingRuleResponse | None" = dc_field( default=None, metadata=dc_config(field_name="sip_inbound_routing_rule") ) @@ -29373,13 +29190,13 @@ class UpdateSIPTrunkRequest(DataClassJsonMixin): # Name of the SIP trunk name: str = dc_field(metadata=dc_config(field_name="name")) # Phone numbers associated with this SIP trunk - numbers: List[str] = dc_field(metadata=dc_config(field_name="numbers")) + numbers: list[str] = dc_field(metadata=dc_config(field_name="numbers")) # Optional password for SIP trunk authentication - password: Optional[str] = dc_field( + password: str | None = dc_field( default=None, metadata=dc_config(field_name="password") ) # Optional list of allowed IPv4/IPv6 addresses or CIDR blocks - allowed_ips: Optional[List[str]] = dc_field( + allowed_ips: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="allowed_ips") ) @@ -29388,7 +29205,7 @@ class UpdateSIPTrunkRequest(DataClassJsonMixin): class UpdateSIPTrunkResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # SIP trunk information - sip_trunk: "Optional[SIPTrunkResponse]" = dc_field( + sip_trunk: "SIPTrunkResponse | None" = dc_field( default=None, metadata=dc_config(field_name="sip_trunk") ) @@ -29396,13 +29213,13 @@ class UpdateSIPTrunkResponse(DataClassJsonMixin): @dataclass class UpdateSegmentRequest(DataClassJsonMixin): # The description of the segment (max 256 characters) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # The name of the segment (max 128 characters) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # Filter to apply to the query - filter: Optional[Dict[str, object]] = dc_field( + filter: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="filter") ) @@ -29416,19 +29233,19 @@ class UpdateSegmentResponse(DataClassJsonMixin): @dataclass class UpdateThreadPartialRequest(DataClassJsonMixin): - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Array of field names to unset - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) # Sets new field values - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -29443,12 +29260,12 @@ class UpdateThreadPartialResponse(DataClassJsonMixin): @dataclass class UpdateUserGroupRequest(DataClassJsonMixin): # The new description for the group - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # The new name of the user group - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - team_id: Optional[str] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="team_id") ) @@ -29456,7 +29273,7 @@ class UpdateUserGroupRequest(DataClassJsonMixin): @dataclass class UpdateUserGroupResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - user_group: "Optional[UserGroupResponse]" = dc_field( + user_group: "UserGroupResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -29465,10 +29282,10 @@ class UpdateUserGroupResponse(DataClassJsonMixin): class UpdateUserPartialRequest(DataClassJsonMixin): # User ID to update id: str = dc_field(metadata=dc_config(field_name="id")) - unset: Optional[List[str]] = dc_field( + unset: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="unset") ) - set: Optional[Dict[str, object]] = dc_field( + set: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="set") ) @@ -29476,10 +29293,10 @@ class UpdateUserPartialRequest(DataClassJsonMixin): @dataclass class UpdateUserPermissionsRequest(DataClassJsonMixin): user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - grant_permissions: Optional[List[str]] = dc_field( + grant_permissions: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="grant_permissions") ) - revoke_permissions: Optional[List[str]] = dc_field( + revoke_permissions: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="revoke_permissions") ) @@ -29492,7 +29309,7 @@ class UpdateUserPermissionsResponse(DataClassJsonMixin): @dataclass class UpdateUsersPartialRequest(DataClassJsonMixin): - users: "List[UpdateUserPartialRequest]" = dc_field( + users: "list[UpdateUserPartialRequest]" = dc_field( metadata=dc_config(field_name="users") ) @@ -29500,7 +29317,7 @@ class UpdateUsersPartialRequest(DataClassJsonMixin): @dataclass class UpdateUsersRequest(DataClassJsonMixin): # Object containing users - users: "Dict[str, UserRequest]" = dc_field(metadata=dc_config(field_name="users")) + users: "dict[str, UserRequest]" = dc_field(metadata=dc_config(field_name="users")) @dataclass @@ -29511,7 +29328,7 @@ class UpdateUsersResponse(DataClassJsonMixin): metadata=dc_config(field_name="membership_deletion_task_id") ) # Object containing users - users: "Dict[str, FullUserResponse]" = dc_field( + users: "dict[str, FullUserResponse]" = dc_field( metadata=dc_config(field_name="users") ) @@ -29528,7 +29345,7 @@ class UpdatedCallPermissionsEvent(DataClassJsonMixin): ) ) # The capabilities of the current user - own_capabilities: "List[OwnCapability]" = dc_field( + own_capabilities: "list[OwnCapability]" = dc_field( metadata=dc_config(field_name="own_capabilities") ) # User response object @@ -29542,8 +29359,8 @@ class UpdatedCallPermissionsEvent(DataClassJsonMixin): @dataclass class UploadChannelFileRequest(DataClassJsonMixin): # file field - file: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="file")) - user: "Optional[OnlyUserID]" = dc_field( + file: str | None = dc_field(default=None, metadata=dc_config(field_name="file")) + user: "OnlyUserID | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -29553,24 +29370,24 @@ class UploadChannelFileResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # URL to the uploaded asset. Should be used to put to `asset_url` attachment field - file: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="file")) - moderation_action: Optional[str] = dc_field( + file: str | None = dc_field(default=None, metadata=dc_config(field_name="file")) + moderation_action: str | None = dc_field( default=None, metadata=dc_config(field_name="moderation_action") ) # URL of the file thumbnail for supported file formats. Should be put to `thumb_url` attachment field - thumb_url: Optional[str] = dc_field( + thumb_url: str | None = dc_field( default=None, metadata=dc_config(field_name="thumb_url") ) @dataclass class UploadChannelRequest(DataClassJsonMixin): - file: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="file")) + file: str | None = dc_field(default=None, metadata=dc_config(field_name="file")) # field with JSON-encoded array of image size configurations - upload_sizes: "Optional[List[ImageSize]]" = dc_field( + upload_sizes: "list[ImageSize] | None" = dc_field( default=None, metadata=dc_config(field_name="upload_sizes") ) - user: "Optional[OnlyUserID]" = dc_field( + user: "OnlyUserID | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -29579,15 +29396,15 @@ class UploadChannelRequest(DataClassJsonMixin): class UploadChannelResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - file: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="file")) - moderation_action: Optional[str] = dc_field( + file: str | None = dc_field(default=None, metadata=dc_config(field_name="file")) + moderation_action: str | None = dc_field( default=None, metadata=dc_config(field_name="moderation_action") ) - thumb_url: Optional[str] = dc_field( + thumb_url: str | None = dc_field( default=None, metadata=dc_config(field_name="thumb_url") ) # Array of image size configurations - upload_sizes: "Optional[List[ImageSize]]" = dc_field( + upload_sizes: "list[ImageSize] | None" = dc_field( default=None, metadata=dc_config(field_name="upload_sizes") ) @@ -29597,15 +29414,15 @@ class UpsertActionConfigItem(DataClassJsonMixin): action: str = dc_field(metadata=dc_config(field_name="action")) entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) order: int = dc_field(metadata=dc_config(field_name="order")) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - icon: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="icon")) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - queue_type: Optional[str] = dc_field( + icon: str | None = dc_field(default=None, metadata=dc_config(field_name="icon")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) + queue_type: str | None = dc_field( default=None, metadata=dc_config(field_name="queue_type") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -29619,27 +29436,27 @@ class UpsertActionConfigRequest(DataClassJsonMixin): # Display order in the dashboard (0–100, lower numbers shown first) order: int = dc_field(metadata=dc_config(field_name="order")) # Human-readable label for the dashboard button - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Icon identifier for the dashboard button - icon: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="icon")) + icon: str | None = dc_field(default=None, metadata=dc_config(field_name="icon")) # UUID of an existing action config to update; omit to create a new record - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + id: str | None = dc_field(default=None, metadata=dc_config(field_name="id")) # Queue this config belongs to; null means the default queue - queue_type: Optional[str] = dc_field( + queue_type: str | None = dc_field( default=None, metadata=dc_config(field_name="queue_type") ) # Optional user ID to associate with the audit log entry - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Action-specific parameters passed to the action handler - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -29648,7 +29465,7 @@ class UpsertActionConfigRequest(DataClassJsonMixin): class UpsertActionConfigResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # Configuration for a moderation action - action_config: "Optional[ModerationActionConfigResponse]" = dc_field( + action_config: "ModerationActionConfigResponse | None" = dc_field( default=None, metadata=dc_config(field_name="action_config") ) @@ -29656,19 +29473,19 @@ class UpsertActionConfigResponse(DataClassJsonMixin): @dataclass class UpsertActivitiesRequest(DataClassJsonMixin): # List of activities to create or update - activities: "List[ActivityRequest]" = dc_field( + activities: "list[ActivityRequest]" = dc_field( metadata=dc_config(field_name="activities") ) # Server-side only. If true, auto-creates users referenced by activity user_id values that don't already exist. Default: false. - create_users: Optional[bool] = dc_field( + create_users: bool | None = dc_field( default=None, metadata=dc_config(field_name="create_users") ) # If true, enriches the activities' current_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. - enrich_own_fields: Optional[bool] = dc_field( + enrich_own_fields: bool | None = dc_field( default=None, metadata=dc_config(field_name="enrich_own_fields") ) # If true, forces moderation to run for server-side requests. By default, server-side requests skip moderation. Client-side requests always run moderation regardless of this field. - force_moderation: Optional[bool] = dc_field( + force_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="force_moderation") ) @@ -29677,11 +29494,11 @@ class UpsertActivitiesRequest(DataClassJsonMixin): class UpsertActivitiesResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of created or updated activities - activities: "List[ActivityResponse]" = dc_field( + activities: "list[ActivityResponse]" = dc_field( metadata=dc_config(field_name="activities") ) # Total number of mention notification activities created for mentioned users across all activities - mention_notifications_created: Optional[int] = dc_field( + mention_notifications_created: int | None = dc_field( default=None, metadata=dc_config(field_name="mention_notifications_created") ) @@ -29689,7 +29506,7 @@ class UpsertActivitiesResponse(DataClassJsonMixin): @dataclass class UpsertCollectionsRequest(DataClassJsonMixin): # List of collections to upsert (insert if new, update if existing) - collections: "List[CollectionRequest]" = dc_field( + collections: "list[CollectionRequest]" = dc_field( metadata=dc_config(field_name="collections") ) @@ -29698,7 +29515,7 @@ class UpsertCollectionsRequest(DataClassJsonMixin): class UpsertCollectionsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) # List of upserted collections - collections: "List[CollectionResponse]" = dc_field( + collections: "list[CollectionResponse]" = dc_field( metadata=dc_config(field_name="collections") ) @@ -29708,69 +29525,64 @@ class UpsertConfigRequest(DataClassJsonMixin): # Unique identifier for the moderation configuration key: str = dc_field(metadata=dc_config(field_name="key")) # Whether moderation should be performed asynchronously - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) # Team associated with the configuration - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Optional user ID to associate with the audit log entry - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - ai_audio_config: "Optional[AIAudioConfigRequest]" = dc_field( + ai_audio_config: "AIAudioConfigRequest | None" = dc_field( default=None, metadata=dc_config(field_name="ai_audio_config") ) - ai_image_config: "Optional[AIImageConfig]" = dc_field( + ai_image_config: "AIImageConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_image_config") ) - ai_text_config: "Optional[AITextConfig]" = dc_field( + ai_text_config: "AITextConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_text_config") ) - ai_video_config: "Optional[AIVideoConfig]" = dc_field( + ai_video_config: "AIVideoConfig | None" = dc_field( default=None, metadata=dc_config(field_name="ai_video_config") ) - automod_platform_circumvention_config: "Optional[AutomodPlatformCircumventionConfig]" = dc_field( + automod_platform_circumvention_config: "AutomodPlatformCircumventionConfig | None" = dc_field( default=None, metadata=dc_config(field_name="automod_platform_circumvention_config"), ) - automod_semantic_filters_config: "Optional[AutomodSemanticFiltersConfig]" = ( - dc_field( - default=None, - metadata=dc_config(field_name="automod_semantic_filters_config"), - ) + automod_semantic_filters_config: "AutomodSemanticFiltersConfig | None" = dc_field( + default=None, metadata=dc_config(field_name="automod_semantic_filters_config") ) - automod_toxicity_config: "Optional[AutomodToxicityConfig]" = dc_field( + automod_toxicity_config: "AutomodToxicityConfig | None" = dc_field( default=None, metadata=dc_config(field_name="automod_toxicity_config") ) - aws_rekognition_config: "Optional[AIImageConfig]" = dc_field( + aws_rekognition_config: "AIImageConfig | None" = dc_field( default=None, metadata=dc_config(field_name="aws_rekognition_config") ) - block_list_config: "Optional[BlockListConfig]" = dc_field( + block_list_config: "BlockListConfig | None" = dc_field( default=None, metadata=dc_config(field_name="block_list_config") ) - bodyguard_config: "Optional[AITextConfig]" = dc_field( + bodyguard_config: "AITextConfig | None" = dc_field( default=None, metadata=dc_config(field_name="bodyguard_config") ) - flood_config: "Optional[FloodConfig]" = dc_field( + flood_config: "FloodConfig | None" = dc_field( default=None, metadata=dc_config(field_name="flood_config") ) - google_vision_config: "Optional[GoogleVisionConfig]" = dc_field( + google_vision_config: "GoogleVisionConfig | None" = dc_field( default=None, metadata=dc_config(field_name="google_vision_config") ) - llm_config: "Optional[LLMConfig]" = dc_field( + llm_config: "LLMConfig | None" = dc_field( default=None, metadata=dc_config(field_name="llm_config") ) - rule_builder_config: "Optional[RuleBuilderConfig]" = dc_field( + rule_builder_config: "RuleBuilderConfig | None" = dc_field( default=None, metadata=dc_config(field_name="rule_builder_config") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) - velocity_filter_config: "Optional[VelocityFilterConfig]" = dc_field( + velocity_filter_config: "VelocityFilterConfig | None" = dc_field( default=None, metadata=dc_config(field_name="velocity_filter_config") ) - video_call_rule_config: "Optional[VideoCallRuleConfig]" = dc_field( + video_call_rule_config: "VideoCallRuleConfig | None" = dc_field( default=None, metadata=dc_config(field_name="video_call_rule_config") ) @@ -29778,7 +29590,7 @@ class UpsertConfigRequest(DataClassJsonMixin): @dataclass class UpsertConfigResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - config: "Optional[ConfigResponse]" = dc_field( + config: "ConfigResponse | None" = dc_field( default=None, metadata=dc_config(field_name="config") ) @@ -29788,7 +29600,7 @@ class UpsertExternalStorageAWSS3Request(DataClassJsonMixin): bucket: str = dc_field(metadata=dc_config(field_name="bucket")) region: str = dc_field(metadata=dc_config(field_name="region")) role_arn: str = dc_field(metadata=dc_config(field_name="role_arn")) - path_prefix: Optional[str] = dc_field( + path_prefix: str | None = dc_field( default=None, metadata=dc_config(field_name="path_prefix") ) @@ -29797,7 +29609,7 @@ class UpsertExternalStorageAWSS3Request(DataClassJsonMixin): class UpsertExternalStorageGCSRequest(DataClassJsonMixin): bucket: str = dc_field(metadata=dc_config(field_name="bucket")) credentials: str = dc_field(metadata=dc_config(field_name="credentials")) - path_prefix: Optional[str] = dc_field( + path_prefix: str | None = dc_field( default=None, metadata=dc_config(field_name="path_prefix") ) @@ -29805,10 +29617,10 @@ class UpsertExternalStorageGCSRequest(DataClassJsonMixin): @dataclass class UpsertExternalStorageRequest(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) - aws_s3: "Optional[UpsertExternalStorageAWSS3Request]" = dc_field( + aws_s3: "UpsertExternalStorageAWSS3Request | None" = dc_field( default=None, metadata=dc_config(field_name="aws_s3") ) - gcs: "Optional[UpsertExternalStorageGCSRequest]" = dc_field( + gcs: "UpsertExternalStorageGCSRequest | None" = dc_field( default=None, metadata=dc_config(field_name="gcs") ) @@ -29826,48 +29638,46 @@ class UpsertModerationRuleRequest(DataClassJsonMixin): # Type of rule: user, content, call, or flood rule_type: str = dc_field(metadata=dc_config(field_name="rule_type")) # Duration before rule can trigger again (e.g. 24h, 7d) - cooldown_period: Optional[str] = dc_field( + cooldown_period: str | None = dc_field( default=None, metadata=dc_config(field_name="cooldown_period") ) # Optional description of the rule - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) # Whether the rule is active - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) # Logical operator between conditions/groups: AND or OR - logic: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="logic") - ) + logic: str | None = dc_field(default=None, metadata=dc_config(field_name="logic")) # Team scope for the rule - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) # Optional user ID to associate with the audit log entry - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) # Escalation sequences for call rules - action_sequences: "Optional[List[CallRuleActionSequence]]" = dc_field( + action_sequences: "list[CallRuleActionSequence] | None" = dc_field( default=None, metadata=dc_config(field_name="action_sequences") ) # Flat list of conditions (legacy) - conditions: "Optional[List[RuleBuilderCondition]]" = dc_field( + conditions: "list[RuleBuilderCondition] | None" = dc_field( default=None, metadata=dc_config(field_name="conditions") ) # List of config keys this rule applies to - config_keys: Optional[List[str]] = dc_field( + config_keys: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="config_keys") ) # Nested condition groups - groups: "Optional[List[RuleBuilderConditionGroup]]" = dc_field( + groups: "list[RuleBuilderConditionGroup] | None" = dc_field( default=None, metadata=dc_config(field_name="groups") ) - action: "Optional[RuleBuilderAction]" = dc_field( + action: "RuleBuilderAction | None" = dc_field( default=None, metadata=dc_config(field_name="action") ) # User request object - user: "Optional[UserRequest]" = dc_field( + user: "UserRequest | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -29876,7 +29686,7 @@ class UpsertModerationRuleRequest(DataClassJsonMixin): class UpsertModerationRuleResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - rule: "Optional[ModerationRuleV2Response]" = dc_field( + rule: "ModerationRuleV2Response | None" = dc_field( default=None, metadata=dc_config(field_name="rule") ) @@ -29915,7 +29725,7 @@ class UpsertModerationTemplateResponse(DataClassJsonMixin): ) ) # Configuration for a feeds moderation template - config: "Optional[FeedsModerationTemplateConfigPayload]" = dc_field( + config: "FeedsModerationTemplateConfigPayload | None" = dc_field( default=None, metadata=dc_config(field_name="config") ) @@ -29923,7 +29733,7 @@ class UpsertModerationTemplateResponse(DataClassJsonMixin): @dataclass class UpsertPushPreferencesRequest(DataClassJsonMixin): # A list of push preferences for channels, calls, or the user. - preferences: "List[PushPreferenceInput]" = dc_field( + preferences: "list[PushPreferenceInput]" = dc_field( metadata=dc_config(field_name="preferences") ) @@ -29933,18 +29743,18 @@ class UpsertPushPreferencesResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) # The channel specific push notification preferences, only returned for channels you've edited. - user_channel_preferences: "Dict[str, Dict[str, ChannelPushPreferencesResponse]]" = ( + user_channel_preferences: "dict[str, dict[str, ChannelPushPreferencesResponse]]" = ( dc_field(metadata=dc_config(field_name="user_channel_preferences")) ) # The user preferences, always returned regardless if you edited it - user_preferences: "Dict[str, PushPreferencesResponse]" = dc_field( + user_preferences: "dict[str, PushPreferencesResponse]" = dc_field( metadata=dc_config(field_name="user_preferences") ) @dataclass class UpsertPushProviderRequest(DataClassJsonMixin): - push_provider: "Optional[PushProviderRequest]" = dc_field( + push_provider: "PushProviderRequest | None" = dc_field( default=None, metadata=dc_config(field_name="push_provider") ) @@ -29967,15 +29777,15 @@ class UpsertPushTemplateRequest(DataClassJsonMixin): metadata=dc_config(field_name="push_provider_type") ) # Whether to send push notification for this event - enable_push: Optional[bool] = dc_field( + enable_push: bool | None = dc_field( default=None, metadata=dc_config(field_name="enable_push") ) # Push provider name - push_provider_name: Optional[str] = dc_field( + push_provider_name: str | None = dc_field( default=None, metadata=dc_config(field_name="push_provider_name") ) # Push template - template: Optional[str] = dc_field( + template: str | None = dc_field( default=None, metadata=dc_config(field_name="template") ) @@ -29984,7 +29794,7 @@ class UpsertPushTemplateRequest(DataClassJsonMixin): class UpsertPushTemplateResponse(DataClassJsonMixin): # Duration of the request in milliseconds duration: str = dc_field(metadata=dc_config(field_name="duration")) - template: "Optional[PushTemplateResponse]" = dc_field( + template: "PushTemplateResponse | None" = dc_field( default=None, metadata=dc_config(field_name="template") ) @@ -29996,7 +29806,7 @@ class UpsertSetupSessionRequest(DataClassJsonMixin): # The status of the setup session. One of: in_progress, completed status: str = dc_field(metadata=dc_config(field_name="status")) # Per-step data keyed by step name (welcome, input, configure, live) - setup_data: Optional[Dict[str, object]] = dc_field( + setup_data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="setup_data") ) @@ -30004,7 +29814,7 @@ class UpsertSetupSessionRequest(DataClassJsonMixin): @dataclass class UpsertSetupSessionResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - setup_session: "Optional[SetupSession]" = dc_field( + setup_session: "SetupSession | None" = dc_field( default=None, metadata=dc_config(field_name="setup_session") ) @@ -30012,7 +29822,7 @@ class UpsertSetupSessionResponse(DataClassJsonMixin): @dataclass class User(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) - data: Optional[Dict[str, object]] = dc_field( + data: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="data") ) @@ -30028,28 +29838,28 @@ class UserBannedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.banned" in this case type: str = dc_field(default="user.banned", metadata=dc_config(field_name="type")) # The ID of the channel where the target user was banned - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the target user was banned - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the target user was banned - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) # The expiration date of the ban - expiration: Optional[datetime] = dc_field( + expiration: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expiration", @@ -30059,10 +29869,8 @@ class UserBannedEvent(DataClassJsonMixin): ), ) # The reason for the ban - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - received_at: Optional[datetime] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30072,29 +29880,29 @@ class UserBannedEvent(DataClassJsonMixin): ), ) # ID of the review queue item (flagged message) that triggered the ban, if the ban was applied from the moderation review queue - review_queue_item_id: Optional[str] = dc_field( + review_queue_item_id: str | None = dc_field( default=None, metadata=dc_config(field_name="review_queue_item_id") ) # Whether the user was shadow banned - shadow: Optional[bool] = dc_field( + shadow: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow") ) # The team of the channel where the target user was banned - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - total_bans: Optional[int] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + total_bans: int | None = dc_field( default=None, metadata=dc_config(field_name="total_bans") ) - channel_custom: Optional[Dict[str, object]] = dc_field( + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - created_by: "Optional[UserResponseCommonFields]" = dc_field( + created_by: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) @dataclass class UserCreatedWithinParameters(DataClassJsonMixin): - max_age: Optional[str] = dc_field( + max_age: str | None = dc_field( default=None, metadata=dc_config(field_name="max_age") ) @@ -30102,17 +29910,17 @@ class UserCreatedWithinParameters(DataClassJsonMixin): @dataclass class UserCustomEventRequest(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @dataclass class UserCustomPropertyParameters(DataClassJsonMixin): - operator: Optional[str] = dc_field( + operator: str | None = dc_field( default=None, metadata=dc_config(field_name="operator") ) - property_key: Optional[str] = dc_field( + property_key: str | None = dc_field( default=None, metadata=dc_config(field_name="property_key") ) @@ -30128,13 +29936,13 @@ class UserDeactivatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.deactivated" in this case type: str = dc_field( default="user.deactivated", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30143,7 +29951,7 @@ class UserDeactivatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - created_by: "Optional[UserResponseCommonFields]" = dc_field( + created_by: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) @@ -30177,11 +29985,11 @@ class UserDeletedEvent(DataClassJsonMixin): mark_messages_deleted: bool = dc_field( metadata=dc_config(field_name="mark_messages_deleted") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.deleted" in this case type: str = dc_field(default="user.deleted", metadata=dc_config(field_name="type")) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30195,14 +30003,14 @@ class UserDeletedEvent(DataClassJsonMixin): @dataclass class UserFeedbackReport(DataClassJsonMixin): unreported_count: int = dc_field(metadata=dc_config(field_name="unreported_count")) - count_by_rating: "Dict[str, int]" = dc_field( + count_by_rating: "dict[str, int]" = dc_field( metadata=dc_config(field_name="count_by_rating") ) @dataclass class UserFeedbackReportResponse(DataClassJsonMixin): - daily: "List[DailyAggregateUserFeedbackReportResponse]" = dc_field( + daily: "list[DailyAggregateUserFeedbackReportResponse]" = dc_field( metadata=dc_config(field_name="daily") ) @@ -30219,7 +30027,7 @@ class UserFeedbackResponse(DataClassJsonMixin): platform: "PlatformDataResponse" = dc_field( metadata=dc_config(field_name="platform") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -30242,7 +30050,7 @@ class UserFlaggedEvent(DataClassJsonMixin): user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.flagged" in this case type: str = dc_field(default="user.flagged", metadata=dc_config(field_name="type")) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30252,10 +30060,10 @@ class UserFlaggedEvent(DataClassJsonMixin): ), ) # Custom data - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - target_user: "Optional[UserResponseCommonFields]" = dc_field( + target_user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="target_user") ) @@ -30281,16 +30089,16 @@ class UserGroup(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - created_by: Optional[str] = dc_field( + created_by: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by") ) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - team_id: Optional[str] = dc_field( + team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="team_id") ) - members: "Optional[List[UserGroupMember]]" = dc_field( + members: "list[UserGroupMember] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) @@ -30306,12 +30114,12 @@ class UserGroupCreatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "user_group.created" in this case type: str = dc_field( default="user_group.created", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30320,10 +30128,10 @@ class UserGroupCreatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) - user_group: "Optional[UserGroup]" = dc_field( + user_group: "UserGroup | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -30339,12 +30147,12 @@ class UserGroupDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "user_group.deleted" in this case type: str = dc_field( default="user_group.deleted", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30353,10 +30161,10 @@ class UserGroupDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) - user_group: "Optional[UserGroup]" = dc_field( + user_group: "UserGroup | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -30389,13 +30197,13 @@ class UserGroupMemberAddedEvent(DataClassJsonMixin): ) ) # The user IDs that were added - members: List[str] = dc_field(metadata=dc_config(field_name="members")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + members: list[str] = dc_field(metadata=dc_config(field_name="members")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "user_group.member_added" in this case type: str = dc_field( default="user_group.member_added", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30404,10 +30212,10 @@ class UserGroupMemberAddedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) - user_group: "Optional[UserGroup]" = dc_field( + user_group: "UserGroup | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -30424,13 +30232,13 @@ class UserGroupMemberRemovedEvent(DataClassJsonMixin): ) ) # The user IDs that were removed - members: List[str] = dc_field(metadata=dc_config(field_name="members")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + members: list[str] = dc_field(metadata=dc_config(field_name="members")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "user_group.member_removed" in this case type: str = dc_field( default="user_group.member_removed", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30439,10 +30247,10 @@ class UserGroupMemberRemovedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) - user_group: "Optional[UserGroup]" = dc_field( + user_group: "UserGroup | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @@ -30467,16 +30275,16 @@ class UserGroupResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - created_by: Optional[str] = dc_field( + created_by: str | None = dc_field( default=None, metadata=dc_config(field_name="created_by") ) - description: Optional[str] = dc_field( + description: str | None = dc_field( default=None, metadata=dc_config(field_name="description") ) - team_id: Optional[str] = dc_field( + team_id: str | None = dc_field( default=None, metadata=dc_config(field_name="team_id") ) - members: "Optional[List[UserGroupMember]]" = dc_field( + members: "list[UserGroupMember] | None" = dc_field( default=None, metadata=dc_config(field_name="members") ) @@ -30492,12 +30300,12 @@ class UserGroupUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) # The type of event: "user_group.updated" in this case type: str = dc_field( default="user_group.updated", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30506,20 +30314,20 @@ class UserGroupUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - user: "Optional[UserResponseCommonFields]" = dc_field( + user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) - user_group: "Optional[UserGroup]" = dc_field( + user_group: "UserGroup | None" = dc_field( default=None, metadata=dc_config(field_name="user_group") ) @dataclass class UserIdenticalContentCountParameters(DataClassJsonMixin): - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) @@ -30535,33 +30343,33 @@ class UserMessagesDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.messages.deleted" in this case type: str = dc_field( default="user.messages.deleted", metadata=dc_config(field_name="type") ) # The ID of the channel where the target user's messages were deleted - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the target user's messages were deleted - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the target user's messages were deleted - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) # Whether Messages were hard deleted - hard_delete: Optional[bool] = dc_field( + hard_delete: bool | None = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30571,8 +30379,8 @@ class UserMessagesDeletedEvent(DataClassJsonMixin): ), ) # The team of the channel where the target user's messages were deleted - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) @@ -30595,7 +30403,7 @@ class UserMuteResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - expires: Optional[datetime] = dc_field( + expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="expires", @@ -30605,11 +30413,11 @@ class UserMuteResponse(DataClassJsonMixin): ), ) # User response object - target: "Optional[UserResponse]" = dc_field( + target: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="target") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -30625,11 +30433,11 @@ class UserMutedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.muted" in this case type: str = dc_field(default="user.muted", metadata=dc_config(field_name="type")) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30639,10 +30447,10 @@ class UserMutedEvent(DataClassJsonMixin): ), ) # The target users that were muted - target_users: "Optional[List[UserResponseCommonFields]]" = dc_field( + target_users: "list[UserResponseCommonFields] | None" = dc_field( default=None, metadata=dc_config(field_name="target_users") ) - target_user: "Optional[UserResponseCommonFields]" = dc_field( + target_user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="target_user") ) @@ -30664,13 +30472,13 @@ class UserReactivatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.reactivated" in this case type: str = dc_field( default="user.reactivated", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -30679,7 +30487,7 @@ class UserReactivatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - created_by: "Optional[UserResponseCommonFields]" = dc_field( + created_by: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) @@ -30689,32 +30497,30 @@ class UserRequest(DataClassJsonMixin): # User ID id: str = dc_field(metadata=dc_config(field_name="id")) # User's profile image URL - image: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image") - ) - invisible: Optional[bool] = dc_field( + image: str | None = dc_field(default=None, metadata=dc_config(field_name="image")) + invisible: bool | None = dc_field( default=None, metadata=dc_config(field_name="invisible") ) - language: Optional[str] = dc_field( + language: str | None = dc_field( default=None, metadata=dc_config(field_name="language") ) # Optional name of user - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # User's global role - role: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="role")) + role: str | None = dc_field(default=None, metadata=dc_config(field_name="role")) # List of teams the user belongs to - teams: Optional[List[str]] = dc_field( + teams: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="teams") ) # Custom user data - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) - privacy_settings: "Optional[PrivacySettingsResponse]" = dc_field( + privacy_settings: "PrivacySettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="privacy_settings") ) # Map of team-specific roles for the user - teams_role: "Optional[Dict[str, str]]" = dc_field( + teams_role: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="teams_role") ) @@ -30752,18 +30558,18 @@ class UserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_ids: List[str] = dc_field( + blocked_user_ids: list[str] = dc_field( metadata=dc_config(field_name="blocked_user_ids") ) # List of teams user is a part of - teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) + teams: list[str] = dc_field(metadata=dc_config(field_name="teams")) # Custom data for this object - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - avg_response_time: Optional[int] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: int | None = dc_field( default=None, metadata=dc_config(field_name="avg_response_time") ) # Date when ban expires - ban_expires: Optional[datetime] = dc_field( + ban_expires: datetime | None = dc_field( default=None, metadata=dc_config( field_name="ban_expires", @@ -30772,11 +30578,11 @@ class UserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - bypass_moderation: Optional[bool] = dc_field( + bypass_moderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="bypass_moderation") ) # Date of deactivation - deactivated_at: Optional[datetime] = dc_field( + deactivated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deactivated_at", @@ -30786,7 +30592,7 @@ class UserResponse(DataClassJsonMixin): ), ) # Date/time of deletion - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -30795,11 +30601,9 @@ class UserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - image: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image") - ) + image: str | None = dc_field(default=None, metadata=dc_config(field_name="image")) # Date of last activity - last_active: Optional[datetime] = dc_field( + last_active: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_active", @@ -30809,9 +30613,9 @@ class UserResponse(DataClassJsonMixin): ), ) # Optional name of user - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) # Revocation date for tokens - revoke_tokens_issued_before: Optional[datetime] = dc_field( + revoke_tokens_issued_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="revoke_tokens_issued_before", @@ -30821,16 +30625,16 @@ class UserResponse(DataClassJsonMixin): ), ) # List of devices user is using - devices: "Optional[List[DeviceResponse]]" = dc_field( + devices: "list[DeviceResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="devices") ) - privacy_settings: "Optional[PrivacySettingsResponse]" = dc_field( + privacy_settings: "PrivacySettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="privacy_settings") ) - push_notifications: "Optional[PushNotificationSettingsResponse]" = dc_field( + push_notifications: "PushNotificationSettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="push_notifications") ) - teams_role: "Optional[Dict[str, str]]" = dc_field( + teams_role: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="teams_role") ) @@ -30858,15 +30662,15 @@ class UserResponseCommonFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_ids: List[str] = dc_field( + blocked_user_ids: list[str] = dc_field( metadata=dc_config(field_name="blocked_user_ids") ) - teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - avg_response_time: Optional[int] = dc_field( + teams: list[str] = dc_field(metadata=dc_config(field_name="teams")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: int | None = dc_field( default=None, metadata=dc_config(field_name="avg_response_time") ) - deactivated_at: Optional[datetime] = dc_field( + deactivated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deactivated_at", @@ -30875,7 +30679,7 @@ class UserResponseCommonFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -30884,10 +30688,8 @@ class UserResponseCommonFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - image: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image") - ) - last_active: Optional[datetime] = dc_field( + image: str | None = dc_field(default=None, metadata=dc_config(field_name="image")) + last_active: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_active", @@ -30896,8 +30698,8 @@ class UserResponseCommonFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + revoke_tokens_issued_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="revoke_tokens_issued_before", @@ -30906,7 +30708,7 @@ class UserResponseCommonFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - teams_role: "Optional[Dict[str, str]]" = dc_field( + teams_role: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="teams_role") ) @@ -30934,15 +30736,15 @@ class UserResponsePrivacyFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_ids: List[str] = dc_field( + blocked_user_ids: list[str] = dc_field( metadata=dc_config(field_name="blocked_user_ids") ) - teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - avg_response_time: Optional[int] = dc_field( + teams: list[str] = dc_field(metadata=dc_config(field_name="teams")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: int | None = dc_field( default=None, metadata=dc_config(field_name="avg_response_time") ) - deactivated_at: Optional[datetime] = dc_field( + deactivated_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deactivated_at", @@ -30951,7 +30753,7 @@ class UserResponsePrivacyFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - deleted_at: Optional[datetime] = dc_field( + deleted_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="deleted_at", @@ -30960,13 +30762,11 @@ class UserResponsePrivacyFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - image: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image") - ) - invisible: Optional[bool] = dc_field( + image: str | None = dc_field(default=None, metadata=dc_config(field_name="image")) + invisible: bool | None = dc_field( default=None, metadata=dc_config(field_name="invisible") ) - last_active: Optional[datetime] = dc_field( + last_active: datetime | None = dc_field( default=None, metadata=dc_config( field_name="last_active", @@ -30975,8 +30775,8 @@ class UserResponsePrivacyFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + name: str | None = dc_field(default=None, metadata=dc_config(field_name="name")) + revoke_tokens_issued_before: datetime | None = dc_field( default=None, metadata=dc_config( field_name="revoke_tokens_issued_before", @@ -30985,25 +30785,25 @@ class UserResponsePrivacyFields(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - privacy_settings: "Optional[PrivacySettingsResponse]" = dc_field( + privacy_settings: "PrivacySettingsResponse | None" = dc_field( default=None, metadata=dc_config(field_name="privacy_settings") ) - teams_role: "Optional[Dict[str, str]]" = dc_field( + teams_role: "dict[str, str] | None" = dc_field( default=None, metadata=dc_config(field_name="teams_role") ) @dataclass class UserRoleParameters(DataClassJsonMixin): - operator: Optional[str] = dc_field( + operator: str | None = dc_field( default=None, metadata=dc_config(field_name="operator") ) - role: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="role")) + role: str | None = dc_field(default=None, metadata=dc_config(field_name="role")) @dataclass class UserRuleParameters(DataClassJsonMixin): - max_age: Optional[str] = dc_field( + max_age: str | None = dc_field( default=None, metadata=dc_config(field_name="max_age") ) @@ -31019,27 +30819,27 @@ class UserUnbannedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.unbanned" in this case type: str = dc_field(default="user.unbanned", metadata=dc_config(field_name="type")) # The ID of the channel where the target user was unbanned - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) - channel_member_count: Optional[int] = dc_field( + channel_member_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_member_count") ) - channel_message_count: Optional[int] = dc_field( + channel_message_count: int | None = dc_field( default=None, metadata=dc_config(field_name="channel_message_count") ) # The type of the channel where the target user was unbanned - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) # The CID of the channel where the target user was unbanned - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - received_at: Optional[datetime] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -31049,15 +30849,15 @@ class UserUnbannedEvent(DataClassJsonMixin): ), ) # Whether the target user was shadow unbanned - shadow: Optional[bool] = dc_field( + shadow: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow") ) # The team of the channel where the target user was unbanned - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - channel_custom: Optional[Dict[str, object]] = dc_field( + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="channel_custom") ) - created_by: "Optional[UserResponseCommonFields]" = dc_field( + created_by: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) @@ -31073,11 +30873,11 @@ class UserUnmutedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.unmuted" in this case type: str = dc_field(default="user.unmuted", metadata=dc_config(field_name="type")) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -31087,10 +30887,10 @@ class UserUnmutedEvent(DataClassJsonMixin): ), ) # The target users that were unmuted - target_users: "Optional[List[UserResponseCommonFields]]" = dc_field( + target_users: "list[UserResponseCommonFields] | None" = dc_field( default=None, metadata=dc_config(field_name="target_users") ) - target_user: "Optional[UserResponseCommonFields]" = dc_field( + target_user: "UserResponseCommonFields | None" = dc_field( default=None, metadata=dc_config(field_name="target_user") ) @@ -31107,16 +30907,16 @@ class UserUnreadReminderEvent(DataClassJsonMixin): ) ) # The channels with unread messages - channels: "Dict[str, Optional[ChannelMessagesResponse]]" = dc_field( + channels: "dict[str, ChannelMessagesResponse | None]" = dc_field( metadata=dc_config(field_name="channels") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.unread_message_reminder" in this case type: str = dc_field( default="user.unread_message_reminder", metadata=dc_config(field_name="type") ) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -31138,11 +30938,11 @@ class UserUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) user: "UserResponsePrivacyFields" = dc_field(metadata=dc_config(field_name="user")) # The type of event: "user.updated" in this case type: str = dc_field(default="user.updated", metadata=dc_config(field_name="type")) - received_at: Optional[datetime] = dc_field( + received_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="received_at", @@ -31161,25 +30961,23 @@ class ValidateExternalStorageResponse(DataClassJsonMixin): @dataclass class VelocityFilterConfig(DataClassJsonMixin): - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") - ) - advanced_filters: Optional[bool] = dc_field( + _async: bool | None = dc_field(default=None, metadata=dc_config(field_name="async")) + advanced_filters: bool | None = dc_field( default=None, metadata=dc_config(field_name="advanced_filters") ) - cascading_actions: Optional[bool] = dc_field( + cascading_actions: bool | None = dc_field( default=None, metadata=dc_config(field_name="cascading_actions") ) - cids_per_user: Optional[int] = dc_field( + cids_per_user: int | None = dc_field( default=None, metadata=dc_config(field_name="cids_per_user") ) - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - first_message_only: Optional[bool] = dc_field( + first_message_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="first_message_only") ) - rules: "Optional[List[VelocityFilterConfigRule]]" = dc_field( + rules: "list[VelocityFilterConfigRule] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @@ -31187,66 +30985,66 @@ class VelocityFilterConfig(DataClassJsonMixin): @dataclass class VelocityFilterConfigRule(DataClassJsonMixin): action: str = dc_field(metadata=dc_config(field_name="action")) - ban_duration: Optional[int] = dc_field( + ban_duration: int | None = dc_field( default=None, metadata=dc_config(field_name="ban_duration") ) - cascading_action: Optional[str] = dc_field( + cascading_action: str | None = dc_field( default=None, metadata=dc_config(field_name="cascading_action") ) - cascading_threshold: Optional[int] = dc_field( + cascading_threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="cascading_threshold") ) - check_message_context: Optional[bool] = dc_field( + check_message_context: bool | None = dc_field( default=None, metadata=dc_config(field_name="check_message_context") ) - fast_spam_threshold: Optional[int] = dc_field( + fast_spam_threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="fast_spam_threshold") ) - fast_spam_ttl: Optional[int] = dc_field( + fast_spam_ttl: int | None = dc_field( default=None, metadata=dc_config(field_name="fast_spam_ttl") ) - ip_ban: Optional[bool] = dc_field( + ip_ban: bool | None = dc_field( default=None, metadata=dc_config(field_name="ip_ban") ) - probation_period: Optional[int] = dc_field( + probation_period: int | None = dc_field( default=None, metadata=dc_config(field_name="probation_period") ) - shadow_ban: Optional[bool] = dc_field( + shadow_ban: bool | None = dc_field( default=None, metadata=dc_config(field_name="shadow_ban") ) - slow_spam_ban_duration: Optional[int] = dc_field( + slow_spam_ban_duration: int | None = dc_field( default=None, metadata=dc_config(field_name="slow_spam_ban_duration") ) - slow_spam_threshold: Optional[int] = dc_field( + slow_spam_threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="slow_spam_threshold") ) - slow_spam_ttl: Optional[int] = dc_field( + slow_spam_ttl: int | None = dc_field( default=None, metadata=dc_config(field_name="slow_spam_ttl") ) - url_only: Optional[bool] = dc_field( + url_only: bool | None = dc_field( default=None, metadata=dc_config(field_name="url_only") ) @dataclass class VideoCallRuleConfig(DataClassJsonMixin): - flag_all_labels: Optional[bool] = dc_field( + flag_all_labels: bool | None = dc_field( default=None, metadata=dc_config(field_name="flag_all_labels") ) - flagged_labels: Optional[List[str]] = dc_field( + flagged_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="flagged_labels") ) - rules: "Optional[List[HarmConfig]]" = dc_field( + rules: "list[HarmConfig] | None" = dc_field( default=None, metadata=dc_config(field_name="rules") ) @dataclass class VideoContentParameters(DataClassJsonMixin): - label_operator: Optional[str] = dc_field( + label_operator: str | None = dc_field( default=None, metadata=dc_config(field_name="label_operator") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) @@ -31263,7 +31061,7 @@ class VideoKickUserRequestPayload(DataClassJsonMixin): @dataclass class VideoReactionOverTimeResponse(DataClassJsonMixin): - by_minute: "Optional[List[CountByMinuteResponse]]" = dc_field( + by_minute: "list[CountByMinuteResponse] | None" = dc_field( default=None, metadata=dc_config(field_name="by_minute") ) @@ -31273,10 +31071,10 @@ class VideoReactionResponse(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) # User response object user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - emoji_code: Optional[str] = dc_field( + emoji_code: str | None = dc_field( default=None, metadata=dc_config(field_name="emoji_code") ) - custom: Optional[Dict[str, object]] = dc_field( + custom: dict[str, object] | None = dc_field( default=None, metadata=dc_config(field_name="custom") ) @@ -31284,20 +31082,20 @@ class VideoReactionResponse(DataClassJsonMixin): @dataclass class VideoReactionsResponse(DataClassJsonMixin): reaction: str = dc_field(metadata=dc_config(field_name="reaction")) - count_over_time: "Optional[VideoReactionOverTimeResponse]" = dc_field( + count_over_time: "VideoReactionOverTimeResponse | None" = dc_field( default=None, metadata=dc_config(field_name="count_over_time") ) @dataclass class VideoRuleParameters(DataClassJsonMixin): - threshold: Optional[int] = dc_field( + threshold: int | None = dc_field( default=None, metadata=dc_config(field_name="threshold") ) - time_window: Optional[str] = dc_field( + time_window: str | None = dc_field( default=None, metadata=dc_config(field_name="time_window") ) - harm_labels: Optional[List[str]] = dc_field( + harm_labels: list[str] | None = dc_field( default=None, metadata=dc_config(field_name="harm_labels") ) @@ -31319,19 +31117,19 @@ class VideoSettings(DataClassJsonMixin): @dataclass class VideoSettingsRequest(DataClassJsonMixin): - access_request_enabled: Optional[bool] = dc_field( + access_request_enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="access_request_enabled") ) - camera_default_on: Optional[bool] = dc_field( + camera_default_on: bool | None = dc_field( default=None, metadata=dc_config(field_name="camera_default_on") ) - camera_facing: Optional[str] = dc_field( + camera_facing: str | None = dc_field( default=None, metadata=dc_config(field_name="camera_facing") ) - enabled: Optional[bool] = dc_field( + enabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="enabled") ) - target_resolution: "Optional[TargetResolution]" = dc_field( + target_resolution: "TargetResolution | None" = dc_field( default=None, metadata=dc_config(field_name="target_resolution") ) @@ -31364,23 +31162,23 @@ class ViewerBehavior(DataClassJsonMixin): ) note: str = dc_field(metadata=dc_config(field_name="note")) p90_watch_min: float = dc_field(metadata=dc_config(field_name="p90_watch_min")) - bounce_rate_pct: Optional[float] = dc_field( + bounce_rate_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="bounce_rate_pct") ) - connections_under_30s_pct: Optional[float] = dc_field( + connections_under_30s_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="connections_under_30s_pct") ) - return_visit_rate_pct: Optional[float] = dc_field( + return_visit_rate_pct: float | None = dc_field( default=None, metadata=dc_config(field_name="return_visit_rate_pct") ) @dataclass class VoteData(DataClassJsonMixin): - answer_text: Optional[str] = dc_field( + answer_text: str | None = dc_field( default=None, metadata=dc_config(field_name="answer_text") ) - option_id: Optional[str] = dc_field( + option_id: str | None = dc_field( default=None, metadata=dc_config(field_name="option_id") ) @@ -31407,14 +31205,14 @@ class WSEvent(DataClassJsonMixin): ) ) type: str = dc_field(metadata=dc_config(field_name="type")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - automoderation: Optional[bool] = dc_field( + custom: dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + automoderation: bool | None = dc_field( default=None, metadata=dc_config(field_name="automoderation") ) - channel_id: Optional[str] = dc_field( + channel_id: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_id") ) - channel_last_message_at: Optional[datetime] = dc_field( + channel_last_message_at: datetime | None = dc_field( default=None, metadata=dc_config( field_name="channel_last_message_at", @@ -31423,83 +31221,81 @@ class WSEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - channel_type: Optional[str] = dc_field( + channel_type: str | None = dc_field( default=None, metadata=dc_config(field_name="channel_type") ) - cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) - connection_id: Optional[str] = dc_field( + cid: str | None = dc_field(default=None, metadata=dc_config(field_name="cid")) + connection_id: str | None = dc_field( default=None, metadata=dc_config(field_name="connection_id") ) - parent_id: Optional[str] = dc_field( + parent_id: str | None = dc_field( default=None, metadata=dc_config(field_name="parent_id") ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - thread_id: Optional[str] = dc_field( + reason: str | None = dc_field(default=None, metadata=dc_config(field_name="reason")) + team: str | None = dc_field(default=None, metadata=dc_config(field_name="team")) + thread_id: str | None = dc_field( default=None, metadata=dc_config(field_name="thread_id") ) - user_id: Optional[str] = dc_field( + user_id: str | None = dc_field( default=None, metadata=dc_config(field_name="user_id") ) - watcher_count: Optional[int] = dc_field( + watcher_count: int | None = dc_field( default=None, metadata=dc_config(field_name="watcher_count") ) - automoderation_scores: "Optional[ModerationResponse]" = dc_field( + automoderation_scores: "ModerationResponse | None" = dc_field( default=None, metadata=dc_config(field_name="automoderation_scores") ) # Represents channel in chat - channel: "Optional[ChannelResponse]" = dc_field( + channel: "ChannelResponse | None" = dc_field( default=None, metadata=dc_config(field_name="channel") ) # User response object - created_by: "Optional[UserResponse]" = dc_field( + created_by: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="created_by") ) - me: "Optional[OwnUserResponse]" = dc_field( + me: "OwnUserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="me") ) - member: "Optional[ChannelMemberResponse]" = dc_field( + member: "ChannelMemberResponse | None" = dc_field( default=None, metadata=dc_config(field_name="member") ) # Represents any chat message - message: "Optional[MessageResponse]" = dc_field( + message: "MessageResponse | None" = dc_field( default=None, metadata=dc_config(field_name="message") ) - message_update: "Optional[MessageUpdate]" = dc_field( + message_update: "MessageUpdate | None" = dc_field( default=None, metadata=dc_config(field_name="message_update") ) - poll: "Optional[PollResponseData]" = dc_field( + poll: "PollResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll") ) - poll_vote: "Optional[PollVoteResponseData]" = dc_field( + poll_vote: "PollVoteResponseData | None" = dc_field( default=None, metadata=dc_config(field_name="poll_vote") ) - reaction: "Optional[ReactionResponse]" = dc_field( + reaction: "ReactionResponse | None" = dc_field( default=None, metadata=dc_config(field_name="reaction") ) - thread: "Optional[ThreadResponse]" = dc_field( + thread: "ThreadResponse | None" = dc_field( default=None, metadata=dc_config(field_name="thread") ) # User response object - user: "Optional[UserResponse]" = dc_field( + user: "UserResponse | None" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass class WebhookFailoverConfig(DataClassJsonMixin): - gcs_bucket: Optional[str] = dc_field( + gcs_bucket: str | None = dc_field( default=None, metadata=dc_config(field_name="gcs_bucket") ) - gcs_credentials: Optional[str] = dc_field( + gcs_credentials: str | None = dc_field( default=None, metadata=dc_config(field_name="gcs_credentials") ) - gcs_path: Optional[str] = dc_field( + gcs_path: str | None = dc_field( default=None, metadata=dc_config(field_name="gcs_path") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + type: str | None = dc_field(default=None, metadata=dc_config(field_name="type")) @dataclass @@ -31512,39 +31308,35 @@ class WrappedUnreadCountsResponse(DataClassJsonMixin): total_unread_threads_count: int = dc_field( metadata=dc_config(field_name="total_unread_threads_count") ) - channel_type: "List[UnreadCountsChannelType]" = dc_field( + channel_type: "list[UnreadCountsChannelType]" = dc_field( metadata=dc_config(field_name="channel_type") ) - channels: "List[UnreadCountsChannel]" = dc_field( + channels: "list[UnreadCountsChannel]" = dc_field( metadata=dc_config(field_name="channels") ) - threads: "List[UnreadCountsThread]" = dc_field( + threads: "list[UnreadCountsThread]" = dc_field( metadata=dc_config(field_name="threads") ) - total_unread_count_by_team: "Optional[Dict[str, int]]" = dc_field( + total_unread_count_by_team: "dict[str, int] | None" = dc_field( default=None, metadata=dc_config(field_name="total_unread_count_by_team") ) @dataclass class XiaomiConfig(DataClassJsonMixin): - disabled: Optional[bool] = dc_field( + disabled: bool | None = dc_field( default=None, metadata=dc_config(field_name="Disabled") ) - package_name: Optional[str] = dc_field( + package_name: str | None = dc_field( default=None, metadata=dc_config(field_name="package_name") ) - secret: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="secret") - ) + secret: str | None = dc_field(default=None, metadata=dc_config(field_name="secret")) @dataclass class XiaomiConfigFields(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - package_name: Optional[str] = dc_field( + package_name: str | None = dc_field( default=None, metadata=dc_config(field_name="package_name") ) - secret: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="secret") - ) + secret: str | None = dc_field(default=None, metadata=dc_config(field_name="secret")) diff --git a/getstream/moderation/async_rest_client.py b/getstream/moderation/async_rest_client.py index 676e8df4..ff02ca1d 100644 --- a/getstream/moderation/async_rest_client.py +++ b/getstream/moderation/async_rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes ModerationClient with BaseClient instance @@ -41,13 +41,11 @@ async def get_action_config( user_id: Optional[str] = None, ) -> StreamResponse[GetActionConfigResponse]: query_params = build_query_param( - **{ - "queue_type": queue_type, - "entity_type": entity_type, - "exclude_defaults": exclude_defaults, - "only_defaults": only_defaults, - "user_id": user_id, - } + queue_type=queue_type, + entity_type=entity_type, + exclude_defaults=exclude_defaults, + only_defaults=only_defaults, + user_id=user_id, ) return await self.get( "/api/v2/moderation/action_config", @@ -121,7 +119,7 @@ async def bulk_delete_action_config( async def delete_action_config( self, id: str, user_id: Optional[str] = None ) -> StreamResponse[DeleteActionConfigResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "id": id, } @@ -418,7 +416,7 @@ async def upsert_config( async def delete_config( self, key: str, team: Optional[str] = None, user_id: Optional[str] = None ) -> StreamResponse[DeleteModerationConfigResponse]: - query_params = build_query_param(**{"team": team, "user_id": user_id}) + query_params = build_query_param(team=team, user_id=user_id) path_params = { "key": key, } @@ -433,7 +431,7 @@ async def delete_config( async def get_config( self, key: str, team: Optional[str] = None ) -> StreamResponse[GetConfigResponse]: - query_params = build_query_param(**{"team": team}) + query_params = build_query_param(team=team) path_params = { "key": key, } @@ -686,7 +684,7 @@ async def upsert_moderation_rule( async def delete_moderation_rule( self, id: str, user_id: Optional[str] = None ) -> StreamResponse[DeleteModerationRuleResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "id": id, } @@ -826,7 +824,7 @@ async def start_policy_test_run( async def list_queues( self, user_id: Optional[str] = None ) -> StreamResponse[ListQueuesResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return await self.get( "/api/v2/moderation/queues", ListQueuesResponse, query_params=query_params ) @@ -857,7 +855,7 @@ async def create_queue( async def get_queue( self, id: str, user_id: Optional[str] = None ) -> StreamResponse[QueueResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "id": id, } @@ -1073,11 +1071,9 @@ async def unban( unbanned_by: Optional[UserRequest] = None, ) -> StreamResponse[UnbanResponse]: query_params = build_query_param( - **{ - "target_user_id": target_user_id, - "channel_cid": channel_cid, - "created_by": created_by, - } + target_user_id=target_user_id, + channel_cid=channel_cid, + created_by=created_by, ) json = UnbanRequest( unbanned_by_id=unbanned_by_id, unbanned_by=unbanned_by diff --git a/getstream/moderation/rest_client.py b/getstream/moderation/rest_client.py index 43c73ca9..d9c08df2 100644 --- a/getstream/moderation/rest_client.py +++ b/getstream/moderation/rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes ModerationClient with BaseClient instance @@ -41,13 +41,11 @@ def get_action_config( user_id: Optional[str] = None, ) -> StreamResponse[GetActionConfigResponse]: query_params = build_query_param( - **{ - "queue_type": queue_type, - "entity_type": entity_type, - "exclude_defaults": exclude_defaults, - "only_defaults": only_defaults, - "user_id": user_id, - } + queue_type=queue_type, + entity_type=entity_type, + exclude_defaults=exclude_defaults, + only_defaults=only_defaults, + user_id=user_id, ) return self.get( "/api/v2/moderation/action_config", @@ -121,7 +119,7 @@ def bulk_delete_action_config( def delete_action_config( self, id: str, user_id: Optional[str] = None ) -> StreamResponse[DeleteActionConfigResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "id": id, } @@ -412,7 +410,7 @@ def upsert_config( def delete_config( self, key: str, team: Optional[str] = None, user_id: Optional[str] = None ) -> StreamResponse[DeleteModerationConfigResponse]: - query_params = build_query_param(**{"team": team, "user_id": user_id}) + query_params = build_query_param(team=team, user_id=user_id) path_params = { "key": key, } @@ -427,7 +425,7 @@ def delete_config( def get_config( self, key: str, team: Optional[str] = None ) -> StreamResponse[GetConfigResponse]: - query_params = build_query_param(**{"team": team}) + query_params = build_query_param(team=team) path_params = { "key": key, } @@ -678,7 +676,7 @@ def upsert_moderation_rule( def delete_moderation_rule( self, id: str, user_id: Optional[str] = None ) -> StreamResponse[DeleteModerationRuleResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "id": id, } @@ -810,7 +808,7 @@ def start_policy_test_run(self, id: str) -> StreamResponse[PolicyTestRunResponse def list_queues( self, user_id: Optional[str] = None ) -> StreamResponse[ListQueuesResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) return self.get( "/api/v2/moderation/queues", ListQueuesResponse, query_params=query_params ) @@ -841,7 +839,7 @@ def create_queue( def get_queue( self, id: str, user_id: Optional[str] = None ) -> StreamResponse[QueueResponse]: - query_params = build_query_param(**{"user_id": user_id}) + query_params = build_query_param(user_id=user_id) path_params = { "id": id, } @@ -1057,11 +1055,9 @@ def unban( unbanned_by: Optional[UserRequest] = None, ) -> StreamResponse[UnbanResponse]: query_params = build_query_param( - **{ - "target_user_id": target_user_id, - "channel_cid": channel_cid, - "created_by": created_by, - } + target_user_id=target_user_id, + channel_cid=channel_cid, + created_by=created_by, ) json = UnbanRequest( unbanned_by_id=unbanned_by_id, unbanned_by=unbanned_by diff --git a/getstream/tests/test_webhook.py b/getstream/tests/test_webhook.py index 0d0f4249..1f5c9f03 100644 --- a/getstream/tests/test_webhook.py +++ b/getstream/tests/test_webhook.py @@ -1,25 +1,23 @@ # Code generated by GetStream internal OpenAPI code generator. DO NOT EDIT. -import hmac import hashlib - +import hmac import warnings - from pathlib import Path import pytest from getstream.webhook import ( + InvalidWebhookError, + UnknownEvent, get_event_type, - parse_webhook_event, - verify_webhook_signature, - verify_signature, parse_event, - verify_and_parse_webhook, - parse_sqs, parse_sns, - UnknownEvent, - InvalidWebhookError, + parse_sqs, + parse_webhook_event, + verify_and_parse_webhook, + verify_signature, + verify_webhook_signature, ) diff --git a/getstream/video/async_rest_client.py b/getstream/video/async_rest_client.py index 1d16e291..1af0b573 100644 --- a/getstream/video/async_rest_client.py +++ b/getstream/video/async_rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes VideoClient with BaseClient instance @@ -49,7 +49,7 @@ async def query_user_feedback( sort: Optional[List[SortParamRequest]] = None, filter_conditions: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryUserFeedbackResponse]: - query_params = build_query_param(**{"full": full}) + query_params = build_query_param(full=full) json = QueryUserFeedbackRequest( limit=limit, next=next, @@ -119,12 +119,7 @@ async def get_call( video: Optional[bool] = None, ) -> StreamResponse[GetCallResponse]: query_params = build_query_param( - **{ - "members_limit": members_limit, - "ring": ring, - "notify": notify, - "video": video, - } + members_limit=members_limit, ring=ring, notify=notify, video=video ) path_params = { "type": type, @@ -448,7 +443,7 @@ async def query_call_participants( limit: Optional[int] = None, filter_conditions: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryCallParticipantsResponse]: - query_params = build_query_param(**{"limit": limit}) + query_params = build_query_param(limit=limit) path_params = { "id": id, "type": type, @@ -541,7 +536,7 @@ async def stop_recording( async def get_call_report( self, type: str, id: str, session_id: Optional[str] = None ) -> StreamResponse[GetCallReportResponse]: - query_params = build_query_param(**{"session_id": session_id}) + query_params = build_query_param(session_id=session_id) path_params = { "type": type, "id": id, @@ -636,7 +631,7 @@ async def get_call_participant_session_metrics( since: Optional[datetime] = None, until: Optional[datetime] = None, ) -> StreamResponse[GetCallParticipantSessionMetricsResponse]: - query_params = build_query_param(**{"since": since, "until": until}) + query_params = build_query_param(since=since, until=until) path_params = { "type": type, "id": id, @@ -663,12 +658,7 @@ async def query_call_participant_sessions( filter_conditions: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryCallParticipantSessionsResponse]: query_params = build_query_param( - **{ - "limit": limit, - "prev": prev, - "next": next, - "filter_conditions": filter_conditions, - } + limit=limit, prev=prev, next=next, filter_conditions=filter_conditions ) path_params = { "type": type, @@ -1010,13 +1000,11 @@ async def get_call_stats_map( exclude_sfus: Optional[bool] = None, ) -> StreamResponse[QueryCallStatsMapResponse]: query_params = build_query_param( - **{ - "start_time": start_time, - "end_time": end_time, - "exclude_publishers": exclude_publishers, - "exclude_subscribers": exclude_subscribers, - "exclude_sfus": exclude_sfus, - } + start_time=start_time, + end_time=end_time, + exclude_publishers=exclude_publishers, + exclude_subscribers=exclude_subscribers, + exclude_sfus=exclude_sfus, ) path_params = { "call_type": call_type, @@ -1045,7 +1033,7 @@ async def get_call_session_participant_stats_details( max_points: Optional[int] = None, ) -> StreamResponse[GetCallSessionParticipantStatsDetailsResponse]: query_params = build_query_param( - **{"since": since, "until": until, "max_points": max_points} + since=since, until=until, max_points=max_points ) path_params = { "call_type": call_type, @@ -1076,13 +1064,11 @@ async def query_call_session_participant_stats( filter_conditions: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryCallSessionParticipantStatsResponse]: query_params = build_query_param( - **{ - "limit": limit, - "prev": prev, - "next": next, - "sort": sort, - "filter_conditions": filter_conditions, - } + limit=limit, + prev=prev, + next=next, + sort=sort, + filter_conditions=filter_conditions, ) path_params = { "call_type": call_type, @@ -1111,7 +1097,7 @@ async def get_call_session_participant_stats_timeline( severity: Optional[List[str]] = None, ) -> StreamResponse[QueryCallSessionParticipantStatsTimelineResponse]: query_params = build_query_param( - **{"start_time": start_time, "end_time": end_time, "severity": severity} + start_time=start_time, end_time=end_time, severity=severity ) path_params = { "call_type": call_type, @@ -1414,7 +1400,7 @@ async def query_aggregate_call_stats( async def get_daily_digest( self, date: Optional[str] = None, app_id: Optional[str] = None ) -> StreamResponse[GetDailyDigestResponse]: - query_params = build_query_param(**{"date": date, "app_id": app_id}) + query_params = build_query_param(date=date, app_id=app_id) return await self.get( "/api/v2/video/stats/daily_digest", GetDailyDigestResponse, diff --git a/getstream/video/rest_client.py b/getstream/video/rest_client.py index 04bc677c..51a6322e 100644 --- a/getstream/video/rest_client.py +++ b/getstream/video/rest_client.py @@ -13,7 +13,7 @@ def __init__( base_url: str, timeout: float, token: str, - user_agent: str = None, + user_agent: str | None = None, ): """ Initializes VideoClient with BaseClient instance @@ -47,7 +47,7 @@ def query_user_feedback( sort: Optional[List[SortParamRequest]] = None, filter_conditions: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryUserFeedbackResponse]: - query_params = build_query_param(**{"full": full}) + query_params = build_query_param(full=full) json = QueryUserFeedbackRequest( limit=limit, next=next, @@ -115,12 +115,7 @@ def get_call( video: Optional[bool] = None, ) -> StreamResponse[GetCallResponse]: query_params = build_query_param( - **{ - "members_limit": members_limit, - "ring": ring, - "notify": notify, - "video": video, - } + members_limit=members_limit, ring=ring, notify=notify, video=video ) path_params = { "type": type, @@ -444,7 +439,7 @@ def query_call_participants( limit: Optional[int] = None, filter_conditions: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryCallParticipantsResponse]: - query_params = build_query_param(**{"limit": limit}) + query_params = build_query_param(limit=limit) path_params = { "id": id, "type": type, @@ -537,7 +532,7 @@ def stop_recording( def get_call_report( self, type: str, id: str, session_id: Optional[str] = None ) -> StreamResponse[GetCallReportResponse]: - query_params = build_query_param(**{"session_id": session_id}) + query_params = build_query_param(session_id=session_id) path_params = { "type": type, "id": id, @@ -632,7 +627,7 @@ def get_call_participant_session_metrics( since: Optional[datetime] = None, until: Optional[datetime] = None, ) -> StreamResponse[GetCallParticipantSessionMetricsResponse]: - query_params = build_query_param(**{"since": since, "until": until}) + query_params = build_query_param(since=since, until=until) path_params = { "type": type, "id": id, @@ -659,12 +654,7 @@ def query_call_participant_sessions( filter_conditions: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryCallParticipantSessionsResponse]: query_params = build_query_param( - **{ - "limit": limit, - "prev": prev, - "next": next, - "filter_conditions": filter_conditions, - } + limit=limit, prev=prev, next=next, filter_conditions=filter_conditions ) path_params = { "type": type, @@ -1006,13 +996,11 @@ def get_call_stats_map( exclude_sfus: Optional[bool] = None, ) -> StreamResponse[QueryCallStatsMapResponse]: query_params = build_query_param( - **{ - "start_time": start_time, - "end_time": end_time, - "exclude_publishers": exclude_publishers, - "exclude_subscribers": exclude_subscribers, - "exclude_sfus": exclude_sfus, - } + start_time=start_time, + end_time=end_time, + exclude_publishers=exclude_publishers, + exclude_subscribers=exclude_subscribers, + exclude_sfus=exclude_sfus, ) path_params = { "call_type": call_type, @@ -1041,7 +1029,7 @@ def get_call_session_participant_stats_details( max_points: Optional[int] = None, ) -> StreamResponse[GetCallSessionParticipantStatsDetailsResponse]: query_params = build_query_param( - **{"since": since, "until": until, "max_points": max_points} + since=since, until=until, max_points=max_points ) path_params = { "call_type": call_type, @@ -1072,13 +1060,11 @@ def query_call_session_participant_stats( filter_conditions: Optional[Dict[str, object]] = None, ) -> StreamResponse[QueryCallSessionParticipantStatsResponse]: query_params = build_query_param( - **{ - "limit": limit, - "prev": prev, - "next": next, - "sort": sort, - "filter_conditions": filter_conditions, - } + limit=limit, + prev=prev, + next=next, + sort=sort, + filter_conditions=filter_conditions, ) path_params = { "call_type": call_type, @@ -1107,7 +1093,7 @@ def get_call_session_participant_stats_timeline( severity: Optional[List[str]] = None, ) -> StreamResponse[QueryCallSessionParticipantStatsTimelineResponse]: query_params = build_query_param( - **{"start_time": start_time, "end_time": end_time, "severity": severity} + start_time=start_time, end_time=end_time, severity=severity ) path_params = { "call_type": call_type, @@ -1406,7 +1392,7 @@ def query_aggregate_call_stats( def get_daily_digest( self, date: Optional[str] = None, app_id: Optional[str] = None ) -> StreamResponse[GetDailyDigestResponse]: - query_params = build_query_param(**{"date": date, "app_id": app_id}) + query_params = build_query_param(date=date, app_id=app_id) return self.get( "/api/v2/video/stats/daily_digest", GetDailyDigestResponse, diff --git a/getstream/webhook.py b/getstream/webhook.py index 81521a36..b8c39083 100644 --- a/getstream/webhook.py +++ b/getstream/webhook.py @@ -2,21 +2,43 @@ import base64 import gzip -import hmac import hashlib +import hmac import json import zlib from dataclasses import dataclass, field from datetime import datetime -from typing import Any, Dict, Optional, Union +from typing import Any + from .models import ( - CustomEvent, + ActivityAddedEvent, + ActivityDeletedEvent, + ActivityFeedbackEvent, + ActivityMarkEvent, + ActivityPinnedEvent, + ActivityReactionAddedEvent, + ActivityReactionDeletedEvent, + ActivityReactionUpdatedEvent, + ActivityRemovedFromFeedEvent, + ActivityRestoredEvent, + ActivityUnpinnedEvent, + ActivityUpdatedEvent, AppealAcceptedEvent, AppealCreatedEvent, AppealRejectedEvent, - CallAcceptedEvent, + AsyncBulkImageModerationEvent, + AsyncExportChannelsEvent, + AsyncExportErrorEvent, + AsyncExportModerationLogsEvent, + AsyncExportReviewQueueEvent, + AsyncExportUsersEvent, BlockedUserEvent, - ClosedCaptionEvent, + BookmarkAddedEvent, + BookmarkDeletedEvent, + BookmarkFolderDeletedEvent, + BookmarkFolderUpdatedEvent, + BookmarkUpdatedEvent, + CallAcceptedEvent, CallClosedCaptionsFailedEvent, CallClosedCaptionsStartedEvent, CallClosedCaptionsStoppedEvent, @@ -31,7 +53,6 @@ CallHLSBroadcastingFailedEvent, CallHLSBroadcastingStartedEvent, CallHLSBroadcastingStoppedEvent, - KickedUserEvent, CallLiveStartedEvent, CallMemberAddedEvent, CallMemberRemovedEvent, @@ -41,8 +62,6 @@ CallModerationBlurEvent, CallModerationWarningEvent, CallNotificationEvent, - PermissionRequestEvent, - UpdatedCallPermissionsEvent, CallReactionEvent, CallRecordingFailedEvent, CallRecordingReadyEvent, @@ -63,49 +82,24 @@ CallTranscriptionReadyEvent, CallTranscriptionStartedEvent, CallTranscriptionStoppedEvent, - UnblockedUserEvent, CallUpdatedEvent, CallUserFeedbackSubmittedEvent, CallUserMutedEvent, CampaignCompletedEvent, CampaignStartedEvent, + ChannelBatchCompletedEvent, + ChannelBatchStartedEvent, ChannelCreatedEvent, ChannelDeletedEvent, ChannelFrozenEvent, ChannelHiddenEvent, - MaxStreakChangedEvent, ChannelMutedEvent, ChannelTruncatedEvent, ChannelUnFrozenEvent, ChannelUnmutedEvent, ChannelUpdatedEvent, ChannelVisibleEvent, - ChannelBatchCompletedEvent, - ChannelBatchStartedEvent, - CustomVideoEvent, - AsyncBulkImageModerationEvent, - AsyncExportChannelsEvent, - AsyncExportModerationLogsEvent, - AsyncExportReviewQueueEvent, - AsyncExportErrorEvent, - AsyncExportUsersEvent, - ActivityAddedEvent, - ActivityDeletedEvent, - ActivityFeedbackEvent, - ActivityMarkEvent, - ActivityPinnedEvent, - ActivityReactionAddedEvent, - ActivityReactionDeletedEvent, - ActivityReactionUpdatedEvent, - ActivityRemovedFromFeedEvent, - ActivityRestoredEvent, - ActivityUnpinnedEvent, - ActivityUpdatedEvent, - BookmarkAddedEvent, - BookmarkDeletedEvent, - BookmarkUpdatedEvent, - BookmarkFolderDeletedEvent, - BookmarkFolderUpdatedEvent, + ClosedCaptionEvent, CommentAddedEvent, CommentDeletedEvent, CommentReactionAddedEvent, @@ -113,59 +107,71 @@ CommentReactionUpdatedEvent, CommentRestoredEvent, CommentUpdatedEvent, + CustomEvent, + CustomVideoEvent, FeedCreatedEvent, FeedDeletedEvent, - FeedUpdatedEvent, FeedGroupChangedEvent, FeedGroupDeletedEvent, FeedGroupRestoredEvent, FeedMemberAddedEvent, FeedMemberRemovedEvent, FeedMemberUpdatedEvent, + FeedUpdatedEvent, + FlagUpdatedEvent, FollowCreatedEvent, FollowDeletedEvent, FollowUpdatedEvent, - NotificationFeedUpdatedEvent, - StoriesFeedUpdatedEvent, - FlagUpdatedEvent, IngressErrorEvent, IngressStartedEvent, IngressStoppedEvent, + KickedUserEvent, + MaxStreakChangedEvent, MemberAddedEvent, MemberRemovedEvent, MemberUpdatedEvent, MessageDeletedEvent, MessageFlaggedEvent, MessageNewEvent, - PendingMessageEvent, MessageReadEvent, MessageUnblockedEvent, MessageUndeletedEvent, MessageUpdatedEvent, ModerationAnalysisFailedEvent, + ModerationCheckCompletedEvent, ModerationCustomActionEvent, ModerationFlaggedEvent, ModerationImageAnalysisCompleteEvent, ModerationMarkReviewedEvent, - ModerationTextAnalysisCompleteEvent, - ModerationCheckCompletedEvent, ModerationRulesTriggeredEvent, + ModerationTextAnalysisCompleteEvent, + NotificationFeedUpdatedEvent, NotificationMarkUnreadEvent, - ReminderNotificationEvent, NotificationThreadMessageNewEvent, + PendingMessageEvent, + PermissionRequestEvent, ReactionDeletedEvent, ReactionNewEvent, ReactionUpdatedEvent, ReminderCreatedEvent, ReminderDeletedEvent, + ReminderNotificationEvent, ReminderUpdatedEvent, ReviewQueueItemNewEvent, ReviewQueueItemUpdatedEvent, + StoriesFeedUpdatedEvent, ThreadUpdatedEvent, + UnblockedUserEvent, + UpdatedCallPermissionsEvent, UserBannedEvent, UserDeactivatedEvent, UserDeletedEvent, UserFlaggedEvent, + UserGroupCreatedEvent, + UserGroupDeletedEvent, + UserGroupMemberAddedEvent, + UserGroupMemberRemovedEvent, + UserGroupUpdatedEvent, UserMessagesDeletedEvent, UserMutedEvent, UserReactivatedEvent, @@ -173,14 +179,8 @@ UserUnmutedEvent, UserUnreadReminderEvent, UserUpdatedEvent, - UserGroupCreatedEvent, - UserGroupDeletedEvent, - UserGroupMemberAddedEvent, - UserGroupMemberRemovedEvent, - UserGroupUpdatedEvent, ) - # Webhook event type constants EVENT_TYPE_WILDCARD = "*" EVENT_TYPE_APPEAL_ACCEPTED = "appeal.accepted" @@ -386,11 +386,11 @@ class UnknownEvent: """ type: str - created_at: Optional[datetime] = None - raw: Dict[str, Any] = field(default_factory=dict) + created_at: datetime | None = None + raw: dict[str, Any] = field(default_factory=dict) -def get_event_type(raw_event: Union[bytes, str, Dict[str, Any]]) -> str: +def get_event_type(raw_event: bytes | str | dict[str, Any]) -> str: """ Extract the event type from a raw webhook payload. @@ -412,7 +412,7 @@ def get_event_type(raw_event: Union[bytes, str, Dict[str, Any]]) -> str: return "" -def parse_webhook_event(raw_event: Union[bytes, str, Dict[str, Any]]) -> Any: +def parse_webhook_event(raw_event: bytes | str | dict[str, Any]) -> Any: """ Deserialize a raw webhook payload into a typed event object. @@ -628,9 +628,7 @@ def _get_event_class(event_type: str): return event_map.get(event_type) -def verify_webhook_signature( - body: Union[bytes, str], signature: str, secret: str -) -> bool: +def verify_webhook_signature(body: bytes | str, signature: str, secret: str) -> bool: """ Verify the HMAC-SHA256 signature of a webhook payload. @@ -795,9 +793,9 @@ def parse_event(payload: bytes) -> Any: ) from e -def _build_unknown_event(event_type: str, data: Dict[str, Any]) -> UnknownEvent: +def _build_unknown_event(event_type: str, data: dict[str, Any]) -> UnknownEvent: created_raw = data.get("created_at") - created: Optional[datetime] = None + created: datetime | None = None if isinstance(created_raw, str): try: # Accept "2026-05-08T00:00:00Z" and full ISO-8601 with offset.