diff --git a/getstream/chat/async_rest_client.py b/getstream/chat/async_rest_client.py index f126a322..39edeab2 100644 --- a/getstream/chat/async_rest_client.py +++ b/getstream/chat/async_rest_client.py @@ -645,6 +645,7 @@ async def create_channel_type( blocklist: Optional[str] = None, blocklist_behavior: Optional[str] = None, connect_events: Optional[bool] = None, + count_messages: Optional[bool] = None, custom_events: Optional[bool] = None, mark_messages_pending: Optional[bool] = None, message_retention: Optional[str] = None, @@ -676,6 +677,7 @@ async def create_channel_type( blocklist=blocklist, blocklist_behavior=blocklist_behavior, connect_events=connect_events, + count_messages=count_messages, custom_events=custom_events, mark_messages_pending=mark_messages_pending, message_retention=message_retention, @@ -1294,32 +1296,20 @@ async def get_replies( self, parent_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, - created_at_after_or_equal: Optional[datetime] = None, - created_at_after: Optional[datetime] = None, - created_at_before_or_equal: Optional[datetime] = None, - created_at_before: Optional[datetime] = None, id_around: Optional[str] = None, - created_at_around: Optional[datetime] = None, sort: Optional[List[SortParamRequest]] = None, ) -> StreamResponse[GetRepliesResponse]: 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, - created_at_after_or_equal=created_at_after_or_equal, - created_at_after=created_at_after, - created_at_before_or_equal=created_at_before_or_equal, - created_at_before=created_at_before, id_around=id_around, - created_at_around=created_at_around, sort=sort, ) path_params = { diff --git a/getstream/chat/rest_client.py b/getstream/chat/rest_client.py index a61d1e49..12caa6ea 100644 --- a/getstream/chat/rest_client.py +++ b/getstream/chat/rest_client.py @@ -641,6 +641,7 @@ def create_channel_type( blocklist: Optional[str] = None, blocklist_behavior: Optional[str] = None, connect_events: Optional[bool] = None, + count_messages: Optional[bool] = None, custom_events: Optional[bool] = None, mark_messages_pending: Optional[bool] = None, message_retention: Optional[str] = None, @@ -672,6 +673,7 @@ def create_channel_type( blocklist=blocklist, blocklist_behavior=blocklist_behavior, connect_events=connect_events, + count_messages=count_messages, custom_events=custom_events, mark_messages_pending=mark_messages_pending, message_retention=message_retention, @@ -1284,32 +1286,20 @@ def get_replies( self, parent_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, - created_at_after_or_equal: Optional[datetime] = None, - created_at_after: Optional[datetime] = None, - created_at_before_or_equal: Optional[datetime] = None, - created_at_before: Optional[datetime] = None, id_around: Optional[str] = None, - created_at_around: Optional[datetime] = None, sort: Optional[List[SortParamRequest]] = None, ) -> StreamResponse[GetRepliesResponse]: 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, - created_at_after_or_equal=created_at_after_or_equal, - created_at_after=created_at_after, - created_at_before_or_equal=created_at_before_or_equal, - created_at_before=created_at_before, id_around=id_around, - created_at_around=created_at_around, sort=sort, ) path_params = { diff --git a/getstream/common/async_rest_client.py b/getstream/common/async_rest_client.py index b22b6c9d..23530deb 100644 --- a/getstream/common/async_rest_client.py +++ b/getstream/common/async_rest_client.py @@ -153,10 +153,19 @@ async def create_block_list( self, name: str, words: List[str], + is_leet_check_enabled: Optional[bool] = None, + is_plural_check_enabled: Optional[bool] = None, team: Optional[str] = None, type: Optional[str] = None, ) -> StreamResponse[CreateBlockListResponse]: - json = build_body_dict(name=name, words=words, team=team, type=type) + json = build_body_dict( + name=name, + words=words, + is_leet_check_enabled=is_leet_check_enabled, + is_plural_check_enabled=is_plural_check_enabled, + team=team, + type=type, + ) return await self.post("/api/v2/blocklists", CreateBlockListResponse, json=json) @telemetry.operation_name("getstream.api.common.delete_block_list") @@ -191,12 +200,22 @@ async def get_block_list( @telemetry.operation_name("getstream.api.common.update_block_list") async def update_block_list( - self, name: str, team: Optional[str] = None, words: Optional[List[str]] = None + self, + name: str, + is_leet_check_enabled: Optional[bool] = None, + is_plural_check_enabled: Optional[bool] = None, + team: Optional[str] = None, + words: Optional[List[str]] = None, ) -> StreamResponse[UpdateBlockListResponse]: path_params = { "name": name, } - json = build_body_dict(team=team, words=words) + json = build_body_dict( + is_leet_check_enabled=is_leet_check_enabled, + is_plural_check_enabled=is_plural_check_enabled, + team=team, + words=words, + ) return await self.put( "/api/v2/blocklists/{name}", UpdateBlockListResponse, diff --git a/getstream/common/rest_client.py b/getstream/common/rest_client.py index b5f73acd..943d4f7f 100644 --- a/getstream/common/rest_client.py +++ b/getstream/common/rest_client.py @@ -153,10 +153,19 @@ def create_block_list( self, name: str, words: List[str], + is_leet_check_enabled: Optional[bool] = None, + is_plural_check_enabled: Optional[bool] = None, team: Optional[str] = None, type: Optional[str] = None, ) -> StreamResponse[CreateBlockListResponse]: - json = build_body_dict(name=name, words=words, team=team, type=type) + json = build_body_dict( + name=name, + words=words, + is_leet_check_enabled=is_leet_check_enabled, + is_plural_check_enabled=is_plural_check_enabled, + team=team, + type=type, + ) return self.post("/api/v2/blocklists", CreateBlockListResponse, json=json) @telemetry.operation_name("getstream.api.common.delete_block_list") @@ -191,12 +200,22 @@ def get_block_list( @telemetry.operation_name("getstream.api.common.update_block_list") def update_block_list( - self, name: str, team: Optional[str] = None, words: Optional[List[str]] = None + self, + name: str, + is_leet_check_enabled: Optional[bool] = None, + is_plural_check_enabled: Optional[bool] = None, + team: Optional[str] = None, + words: Optional[List[str]] = None, ) -> StreamResponse[UpdateBlockListResponse]: path_params = { "name": name, } - json = build_body_dict(team=team, words=words) + json = build_body_dict( + is_leet_check_enabled=is_leet_check_enabled, + is_plural_check_enabled=is_plural_check_enabled, + team=team, + words=words, + ) return self.put( "/api/v2/blocklists/{name}", UpdateBlockListResponse, diff --git a/getstream/models/__init__.py b/getstream/models/__init__.py index edb1a97a..0b912715 100644 --- a/getstream/models/__init__.py +++ b/getstream/models/__init__.py @@ -385,6 +385,9 @@ class ActivityFeedbackRequest(DataClassJsonMixin): show_less: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="show_less") ) + show_more: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="show_more") + ) user_id: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="user_id") ) @@ -815,6 +818,9 @@ class ActivityResponse(DataClassJsonMixin): hidden: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="hidden") ) + is_watched: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="is_watched") + ) text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) visibility_tag: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="visibility_tag") @@ -1188,6 +1194,9 @@ class AggregatedActivityResponse(DataClassJsonMixin): activities: "List[ActivityResponse]" = dc_field( metadata=dc_config(field_name="activities") ) + is_watched: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="is_watched") + ) @dataclass @@ -1212,6 +1221,9 @@ class AnyEvent(DataClassJsonMixin): @dataclass class AppResponseFields(DataClassJsonMixin): + allow_multi_user_devices: bool = dc_field( + metadata=dc_config(field_name="allow_multi_user_devices") + ) async_url_enrich_enabled: bool = dc_field( metadata=dc_config(field_name="async_url_enrich_enabled") ) @@ -1651,6 +1663,9 @@ class AudioSettings(DataClassJsonMixin): metadata=dc_config(field_name="access_request_enabled") ) default_device: str = dc_field(metadata=dc_config(field_name="default_device")) + hifi_audio_enabled: bool = dc_field( + metadata=dc_config(field_name="hifi_audio_enabled") + ) mic_default_on: bool = dc_field(metadata=dc_config(field_name="mic_default_on")) opus_dtx_enabled: bool = dc_field(metadata=dc_config(field_name="opus_dtx_enabled")) redundant_coding_enabled: bool = dc_field( @@ -1659,9 +1674,6 @@ class AudioSettings(DataClassJsonMixin): speaker_default_on: bool = dc_field( metadata=dc_config(field_name="speaker_default_on") ) - hifi_audio_enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="hifi_audio_enabled") - ) noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( default=None, metadata=dc_config(field_name="noise_cancellation") ) @@ -1699,6 +1711,9 @@ class AudioSettingsResponse(DataClassJsonMixin): metadata=dc_config(field_name="access_request_enabled") ) default_device: str = dc_field(metadata=dc_config(field_name="default_device")) + hifi_audio_enabled: bool = dc_field( + metadata=dc_config(field_name="hifi_audio_enabled") + ) mic_default_on: bool = dc_field(metadata=dc_config(field_name="mic_default_on")) opus_dtx_enabled: bool = dc_field(metadata=dc_config(field_name="opus_dtx_enabled")) redundant_coding_enabled: bool = dc_field( @@ -1707,9 +1722,6 @@ class AudioSettingsResponse(DataClassJsonMixin): speaker_default_on: bool = dc_field( metadata=dc_config(field_name="speaker_default_on") ) - hifi_audio_enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="hifi_audio_enabled") - ) noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( default=None, metadata=dc_config(field_name="noise_cancellation") ) @@ -1984,6 +1996,12 @@ class BlockListOptions(DataClassJsonMixin): @dataclass class BlockListResponse(DataClassJsonMixin): + is_leet_check_enabled: bool = dc_field( + metadata=dc_config(field_name="is_leet_check_enabled") + ) + is_plural_check_enabled: bool = dc_field( + metadata=dc_config(field_name="is_plural_check_enabled") + ) name: str = dc_field(metadata=dc_config(field_name="name")) type: str = dc_field(metadata=dc_config(field_name="type")) words: List[str] = dc_field(metadata=dc_config(field_name="words")) @@ -2870,6 +2888,21 @@ class CallParticipantResponse(DataClassJsonMixin): user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) +@dataclass +class CallParticipantTimeline(DataClassJsonMixin): + severity: str = dc_field(metadata=dc_config(field_name="severity")) + timestamp: datetime = dc_field( + metadata=dc_config( + field_name="timestamp", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + type: str = dc_field(metadata=dc_config(field_name="type")) + data: Dict[str, object] = dc_field(metadata=dc_config(field_name="data")) + + @dataclass class CallReactionEvent(DataClassJsonMixin): call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) @@ -4590,6 +4623,7 @@ class ChannelMember(DataClassJsonMixin): class ChannelMemberLookup(DataClassJsonMixin): archived: bool = dc_field(metadata=dc_config(field_name="archived")) banned: bool = dc_field(metadata=dc_config(field_name="banned")) + blocked: bool = dc_field(metadata=dc_config(field_name="blocked")) hidden: bool = dc_field(metadata=dc_config(field_name="hidden")) pinned: bool = dc_field(metadata=dc_config(field_name="pinned")) archived_at: Optional[datetime] = dc_field( @@ -5807,6 +5841,12 @@ class CountByMinuteResponse(DataClassJsonMixin): class CreateBlockListRequest(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) words: List[str] = dc_field(metadata=dc_config(field_name="words")) + is_leet_check_enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="is_leet_check_enabled") + ) + is_plural_check_enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="is_plural_check_enabled") + ) team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) @@ -5885,6 +5925,9 @@ class CreateChannelTypeRequest(DataClassJsonMixin): connect_events: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="connect_events") ) + count_messages: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="count_messages") + ) custom_events: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="custom_events") ) @@ -6117,6 +6160,9 @@ class CreateFeedGroupRequest(DataClassJsonMixin): ranking: "Optional[RankingConfig]" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) + stories: "Optional[StoriesConfig]" = dc_field( + default=None, metadata=dc_config(field_name="stories") + ) @dataclass @@ -6756,6 +6802,18 @@ class DeleteUsersResponse(DataClassJsonMixin): task_id: str = dc_field(metadata=dc_config(field_name="task_id")) +@dataclass +class DeliveryReceipts(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + + +@dataclass +class DeliveryReceiptsResponse(DataClassJsonMixin): + enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="enabled") + ) + + @dataclass class Device(DataClassJsonMixin): created_at: datetime = dc_field( @@ -7927,8 +7985,10 @@ class FeedViewResponse(DataClassJsonMixin): @dataclass class FeedVisibilityResponse(DataClassJsonMixin): - description: str = dc_field(metadata=dc_config(field_name="description")) name: str = dc_field(metadata=dc_config(field_name="name")) + permissions: "List[Permission]" = dc_field( + metadata=dc_config(field_name="permissions") + ) grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) @@ -8685,18 +8745,18 @@ 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")) - ingress: "Optional[ParticipantSeriesIngressSection]" = dc_field( - default=None, metadata=dc_config(field_name="ingress") - ) - publisher: "Optional[ParticipantSeriesPublisherSection]" = dc_field( + publisher: "Optional[ParticipantSeriesPublisherStats]" = dc_field( default=None, metadata=dc_config(field_name="publisher") ) - subscriber: "Optional[ParticipantSeriesSubscriberSection]" = dc_field( + subscriber: "Optional[ParticipantSeriesSubscriberStats]" = dc_field( default=None, metadata=dc_config(field_name="subscriber") ) timeframe: "Optional[ParticipantSeriesTimeframe]" = dc_field( default=None, metadata=dc_config(field_name="timeframe") ) + user: "Optional[ParticipantSeriesUserStats]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) @dataclass @@ -9085,6 +9145,9 @@ class GetOrCreateFeedGroupRequest(DataClassJsonMixin): ranking: "Optional[RankingConfig]" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) + stories: "Optional[StoriesConfig]" = dc_field( + default=None, metadata=dc_config(field_name="stories") + ) @dataclass @@ -10644,7 +10707,69 @@ class MessageOptions(DataClassJsonMixin): @dataclass class MessagePaginationParams(DataClassJsonMixin): - pass + created_at_after: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="created_at_after", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + created_at_after_or_equal: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="created_at_after_or_equal", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + created_at_around: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="created_at_around", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + created_at_before: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="created_at_before", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + created_at_before_or_equal: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="created_at_before_or_equal", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + id_around: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="id_around") + ) + id_gt: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="id_gt") + ) + id_gte: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="id_gte") + ) + id_lt: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="id_lt") + ) + id_lte: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="id_lte") + ) + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) @dataclass @@ -11184,6 +11309,19 @@ class MessageWithChannelResponse(DataClassJsonMixin): ) +@dataclass +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( + default=None, metadata=dc_config(field_name="value_unit") + ) + window_seconds: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="window_seconds") + ) + + @dataclass class ModerationActionConfig(DataClassJsonMixin): action: str = dc_field(metadata=dc_config(field_name="action")) @@ -11835,6 +11973,25 @@ class OnlyUserID(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) +@dataclass +class OwnCapabilitiesBatchRequest(DataClassJsonMixin): + feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class OwnCapabilitiesBatchResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + capabilities: "Dict[str, List[FeedOwnCapability]]" = dc_field( + metadata=dc_config(field_name="capabilities") + ) + + OwnCapabilityType = NewType("OwnCapabilityType", str) @@ -12152,48 +12309,33 @@ class ParticipantReportResponse(DataClassJsonMixin): @dataclass -class ParticipantSeriesAggregate(DataClassJsonMixin): - label: str = dc_field(metadata=dc_config(field_name="label")) - series: "Dict[str, List[List[float]]]" = dc_field( - metadata=dc_config(field_name="series") +class ParticipantSeriesPublisherStats(DataClassJsonMixin): + _global: "Optional[Dict[str, List[List[float]]]]" = dc_field( + default=None, metadata=dc_config(field_name="global") ) - - -@dataclass -class ParticipantSeriesIngressSection(DataClassJsonMixin): - top_charts: "Optional[List[ParticipantSeriesTopChart]]" = dc_field( - default=None, metadata=dc_config(field_name="top_charts") + global_thresholds: "Optional[Dict[str, List[MetricThreshold]]]" = dc_field( + default=None, metadata=dc_config(field_name="global_thresholds") ) - - -@dataclass -class ParticipantSeriesPublisherSection(DataClassJsonMixin): - top_charts: "Optional[List[ParticipantSeriesTopChart]]" = dc_field( - default=None, metadata=dc_config(field_name="top_charts") - ) - aggregate: "Optional[ParticipantSeriesAggregate]" = dc_field( - default=None, metadata=dc_config(field_name="aggregate") - ) - by_track_type: "Optional[Dict[str, List[ParticipantSeriesTrack]]]" = dc_field( - default=None, metadata=dc_config(field_name="by_track_type") + tracks: "Optional[Dict[str, List[ParticipantSeriesTrackMetrics]]]" = dc_field( + default=None, metadata=dc_config(field_name="tracks") ) @dataclass -class ParticipantSeriesSubscriberSection(DataClassJsonMixin): - subscriptions: "Optional[List[ParticipantSeriesSubscriptionsCharts]]" = dc_field( - default=None, metadata=dc_config(field_name="subscriptions") +class ParticipantSeriesSubscriberStats(DataClassJsonMixin): + subscriptions: "Optional[List[ParticipantSeriesSubscriptionTrackMetrics]]" = ( + dc_field(default=None, metadata=dc_config(field_name="subscriptions")) ) - top_charts: "Optional[List[ParticipantSeriesTopChart]]" = dc_field( - default=None, metadata=dc_config(field_name="top_charts") + _global: "Optional[Dict[str, List[List[float]]]]" = dc_field( + default=None, metadata=dc_config(field_name="global") ) - aggregate: "Optional[ParticipantSeriesAggregate]" = dc_field( - default=None, metadata=dc_config(field_name="aggregate") + global_thresholds: "Optional[Dict[str, List[MetricThreshold]]]" = dc_field( + default=None, metadata=dc_config(field_name="global_thresholds") ) @dataclass -class ParticipantSeriesSubscriptionsCharts(DataClassJsonMixin): +class ParticipantSeriesSubscriptionTrackMetrics(DataClassJsonMixin): publisher_user_id: str = dc_field( metadata=dc_config(field_name="publisher_user_id") ) @@ -12203,13 +12345,14 @@ class ParticipantSeriesSubscriptionsCharts(DataClassJsonMixin): publisher_user_session_id: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="publisher_user_session_id") ) - by_track_type: "Optional[Dict[str, List[ParticipantSeriesTrack]]]" = dc_field( - default=None, metadata=dc_config(field_name="by_track_type") + tracks: "Optional[Dict[str, List[ParticipantSeriesTrackMetrics]]]" = dc_field( + default=None, metadata=dc_config(field_name="tracks") ) @dataclass class ParticipantSeriesTimeframe(DataClassJsonMixin): + max_points: int = dc_field(metadata=dc_config(field_name="max_points")) since: datetime = dc_field( metadata=dc_config( field_name="since", @@ -12230,19 +12373,33 @@ class ParticipantSeriesTimeframe(DataClassJsonMixin): @dataclass -class ParticipantSeriesTopChart(DataClassJsonMixin): - label: str = dc_field(metadata=dc_config(field_name="label")) - metric: str = dc_field(metadata=dc_config(field_name="metric")) - series: "List[List[float]]" = dc_field(metadata=dc_config(field_name="series")) +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( + default=None, metadata=dc_config(field_name="track_type") + ) + metrics: "Optional[Dict[str, List[List[float]]]]" = dc_field( + default=None, metadata=dc_config(field_name="metrics") + ) + thresholds: "Optional[Dict[str, List[MetricThreshold]]]" = dc_field( + default=None, metadata=dc_config(field_name="thresholds") + ) @dataclass -class ParticipantSeriesTrack(DataClassJsonMixin): - label: str = dc_field(metadata=dc_config(field_name="label")) - track_id: str = dc_field(metadata=dc_config(field_name="track_id")) - track_type: str = dc_field(metadata=dc_config(field_name="track_type")) - series: "Dict[str, List[List[float]]]" = dc_field( - metadata=dc_config(field_name="series") +class ParticipantSeriesUserStats(DataClassJsonMixin): + metrics: "Optional[Dict[str, List[List[float]]]]" = dc_field( + default=None, metadata=dc_config(field_name="metrics") + ) + thresholds: "Optional[Dict[str, List[MetricThreshold]]]" = dc_field( + default=None, metadata=dc_config(field_name="thresholds") ) @@ -12673,6 +12830,9 @@ class PollVotesResponse(DataClassJsonMixin): @dataclass class PrivacySettings(DataClassJsonMixin): + delivery_receipts: "Optional[DeliveryReceipts]" = dc_field( + default=None, metadata=dc_config(field_name="delivery_receipts") + ) read_receipts: "Optional[ReadReceipts]" = dc_field( default=None, metadata=dc_config(field_name="read_receipts") ) @@ -12683,6 +12843,9 @@ class PrivacySettings(DataClassJsonMixin): @dataclass class PrivacySettingsResponse(DataClassJsonMixin): + delivery_receipts: "Optional[DeliveryReceiptsResponse]" = dc_field( + default=None, metadata=dc_config(field_name="delivery_receipts") + ) read_receipts: "Optional[ReadReceiptsResponse]" = dc_field( default=None, metadata=dc_config(field_name="read_receipts") ) @@ -13328,6 +13491,24 @@ class QueryCallSessionParticipantStatsResponse(DataClassJsonMixin): counts: "CallStatsParticipantCounts" = dc_field( metadata=dc_config(field_name="counts") ) + call_ended_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="call_ended_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + call_started_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="call_started_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + 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( @@ -13335,6 +13516,19 @@ class QueryCallSessionParticipantStatsResponse(DataClassJsonMixin): ) +@dataclass +class QueryCallSessionParticipantStatsTimelineResponse(DataClassJsonMixin): + call_id: str = dc_field(metadata=dc_config(field_name="call_id")) + call_session_id: str = dc_field(metadata=dc_config(field_name="call_session_id")) + call_type: str = dc_field(metadata=dc_config(field_name="call_type")) + 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( + metadata=dc_config(field_name="events") + ) + + @dataclass class QueryCallStatsRequest(DataClassJsonMixin): limit: Optional[int] = dc_field( @@ -14487,6 +14681,18 @@ class ReadStateResponse(DataClassJsonMixin): ) unread_messages: int = dc_field(metadata=dc_config(field_name="unread_messages")) user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + last_delivered_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="last_delivered_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + last_delivered_message_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="last_delivered_message_id") + ) last_read_message_id: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="last_read_message_id") ) @@ -16035,12 +16241,47 @@ class StopTranscriptionResponse(DataClassJsonMixin): @dataclass class StoriesConfig(DataClassJsonMixin): - expiration_behaviour: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="expiration_behaviour") - ) skip_watched: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="skip_watched") ) + track_watched: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="track_watched") + ) + + +@dataclass +class StoriesFeedUpdatedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.stories_feed.updated", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="received_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + aggregated_activities: "Optional[List[AggregatedActivityResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="aggregated_activities") + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) @dataclass @@ -17088,6 +17329,12 @@ class UpdateAppRequest(DataClassJsonMixin): @dataclass class UpdateBlockListRequest(DataClassJsonMixin): + is_leet_check_enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="is_leet_check_enabled") + ) + is_plural_check_enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="is_plural_check_enabled") + ) team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) words: Optional[List[str]] = dc_field( default=None, metadata=dc_config(field_name="words") @@ -17592,6 +17839,9 @@ class UpdateFeedGroupRequest(DataClassJsonMixin): ranking: "Optional[RankingConfig]" = dc_field( default=None, metadata=dc_config(field_name="ranking") ) + stories: "Optional[StoriesConfig]" = dc_field( + default=None, metadata=dc_config(field_name="stories") + ) @dataclass @@ -17663,6 +17913,21 @@ class UpdateFeedViewResponse(DataClassJsonMixin): feed_view: "FeedViewResponse" = dc_field(metadata=dc_config(field_name="feed_view")) +@dataclass +class UpdateFeedVisibilityRequest(DataClassJsonMixin): + grants: "Optional[Dict[str, List[str]]]" = dc_field( + default=None, metadata=dc_config(field_name="grants") + ) + + +@dataclass +class UpdateFeedVisibilityResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed_visibility: "FeedVisibilityResponse" = dc_field( + metadata=dc_config(field_name="feed_visibility") + ) + + @dataclass class UpdateFollowRequest(DataClassJsonMixin): source: str = dc_field(metadata=dc_config(field_name="source")) diff --git a/getstream/video/async_rest_client.py b/getstream/video/async_rest_client.py index fe1b492b..2daa5668 100644 --- a/getstream/video/async_rest_client.py +++ b/getstream/video/async_rest_client.py @@ -861,24 +861,12 @@ async def get_call_session_participant_stats_details( session: str, user: str, user_session: str, - metrics: Optional[str] = None, since: Optional[str] = None, until: Optional[str] = None, - step: Optional[int] = None, max_points: Optional[int] = None, - track_type: Optional[str] = None, - remote_user_id: Optional[str] = None, - remote_user_session_id: Optional[str] = None, ) -> StreamResponse[GetCallSessionParticipantStatsDetailsResponse]: query_params = build_query_param( - metrics=metrics, - since=since, - until=until, - step=step, - max_points=max_points, - track_type=track_type, - remote_user_id=remote_user_id, - remote_user_session_id=remote_user_session_id, + since=since, until=until, max_points=max_points ) path_params = { "call_type": call_type, @@ -918,6 +906,37 @@ async def query_call_session_participant_stats( path_params=path_params, ) + @telemetry.operation_name( + "getstream.api.video.get_call_session_participant_stats_timeline" + ) + async def get_call_session_participant_stats_timeline( + self, + call_type: str, + call_id: str, + session: str, + user: str, + user_session: str, + start_time: Optional[str] = None, + end_time: Optional[str] = None, + severity: Optional[List[str]] = None, + ) -> StreamResponse[QueryCallSessionParticipantStatsTimelineResponse]: + query_params = build_query_param( + start_time=start_time, end_time=end_time, severity=severity + ) + path_params = { + "call_type": call_type, + "call_id": call_id, + "session": session, + "user": user, + "user_session": user_session, + } + return await self.get( + "/api/v2/video/call_stats/{call_type}/{call_id}/{session}/participants/{user}/{user_session}/timeline", + QueryCallSessionParticipantStatsTimelineResponse, + query_params=query_params, + path_params=path_params, + ) + @telemetry.operation_name("getstream.api.video.query_calls") async def query_calls( self, diff --git a/getstream/video/rest_client.py b/getstream/video/rest_client.py index ac0f4ebb..81883acd 100644 --- a/getstream/video/rest_client.py +++ b/getstream/video/rest_client.py @@ -857,24 +857,12 @@ def get_call_session_participant_stats_details( session: str, user: str, user_session: str, - metrics: Optional[str] = None, since: Optional[str] = None, until: Optional[str] = None, - step: Optional[int] = None, max_points: Optional[int] = None, - track_type: Optional[str] = None, - remote_user_id: Optional[str] = None, - remote_user_session_id: Optional[str] = None, ) -> StreamResponse[GetCallSessionParticipantStatsDetailsResponse]: query_params = build_query_param( - metrics=metrics, - since=since, - until=until, - step=step, - max_points=max_points, - track_type=track_type, - remote_user_id=remote_user_id, - remote_user_session_id=remote_user_session_id, + since=since, until=until, max_points=max_points ) path_params = { "call_type": call_type, @@ -914,6 +902,37 @@ def query_call_session_participant_stats( path_params=path_params, ) + @telemetry.operation_name( + "getstream.api.video.get_call_session_participant_stats_timeline" + ) + def get_call_session_participant_stats_timeline( + self, + call_type: str, + call_id: str, + session: str, + user: str, + user_session: str, + start_time: Optional[str] = None, + end_time: Optional[str] = None, + severity: Optional[List[str]] = None, + ) -> StreamResponse[QueryCallSessionParticipantStatsTimelineResponse]: + query_params = build_query_param( + start_time=start_time, end_time=end_time, severity=severity + ) + path_params = { + "call_type": call_type, + "call_id": call_id, + "session": session, + "user": user, + "user_session": user_session, + } + return self.get( + "/api/v2/video/call_stats/{call_type}/{call_id}/{session}/participants/{user}/{user_session}/timeline", + QueryCallSessionParticipantStatsTimelineResponse, + query_params=query_params, + path_params=path_params, + ) + @telemetry.operation_name("getstream.api.video.query_calls") def query_calls( self,