Skip to content

Commit 801e65e

Browse files
committed
Stable video stats API: GetCallReport
1 parent ab60840 commit 801e65e

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed

getstream/models/__init__.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,29 @@ class CallRecording(DataClassJsonMixin):
925925
url: str = dc_field(metadata=dc_config(field_name="url"))
926926

927927

928+
@dataclass
929+
class CallReportResponse(DataClassJsonMixin):
930+
score: float = dc_field(metadata=dc_config(field_name="score"))
931+
ended_at: Optional[datetime] = dc_field(
932+
default=None,
933+
metadata=dc_config(
934+
field_name="ended_at",
935+
encoder=encode_datetime,
936+
decoder=datetime_from_unix_ns,
937+
mm_field=fields.DateTime(format="iso"),
938+
),
939+
)
940+
started_at: Optional[datetime] = dc_field(
941+
default=None,
942+
metadata=dc_config(
943+
field_name="started_at",
944+
encoder=encode_datetime,
945+
decoder=datetime_from_unix_ns,
946+
mm_field=fields.DateTime(format="iso"),
947+
),
948+
)
949+
950+
928951
@dataclass
929952
class CallRequest(DataClassJsonMixin):
930953
created_by_id: Optional[str] = dc_field(
@@ -4257,6 +4280,13 @@ class GetCallResponse(DataClassJsonMixin):
42574280
call: "CallResponse" = dc_field(metadata=dc_config(field_name="call"))
42584281

42594282

4283+
@dataclass
4284+
class GetCallReportResponse(DataClassJsonMixin):
4285+
duration: str = dc_field(metadata=dc_config(field_name="duration"))
4286+
session_id: str = dc_field(metadata=dc_config(field_name="session_id"))
4287+
report: "ReportResponse" = dc_field(metadata=dc_config(field_name="report"))
4288+
4289+
42604290
@dataclass
42614291
class GetCallStatsResponse(DataClassJsonMixin):
42624292
call_duration_seconds: int = dc_field(
@@ -6408,6 +6438,12 @@ class PaginationParams(DataClassJsonMixin):
64086438
)
64096439

64106440

6441+
@dataclass
6442+
class ParticipantReportResponse(DataClassJsonMixin):
6443+
sum: int = dc_field(metadata=dc_config(field_name="sum"))
6444+
unique: int = dc_field(metadata=dc_config(field_name="unique"))
6445+
6446+
64116447
@dataclass
64126448
class PendingMessageResponse(DataClassJsonMixin):
64136449
channel: "Optional[ChannelResponse]" = dc_field(
@@ -8025,6 +8061,17 @@ class ReportByHistogramBucket(DataClassJsonMixin):
80258061
)
80268062

80278063

8064+
@dataclass
8065+
class ReportResponse(DataClassJsonMixin):
8066+
call: "CallReportResponse" = dc_field(metadata=dc_config(field_name="call"))
8067+
participants: "ParticipantReportResponse" = dc_field(
8068+
metadata=dc_config(field_name="participants")
8069+
)
8070+
user_ratings: "UserRatingReportResponse" = dc_field(
8071+
metadata=dc_config(field_name="user_ratings")
8072+
)
8073+
8074+
80288075
@dataclass
80298076
class Response(DataClassJsonMixin):
80308077
duration: str = dc_field(metadata=dc_config(field_name="duration"))
@@ -10482,6 +10529,12 @@ class UserMuteResponse(DataClassJsonMixin):
1048210529
)
1048310530

1048410531

10532+
@dataclass
10533+
class UserRatingReportResponse(DataClassJsonMixin):
10534+
average: float = dc_field(metadata=dc_config(field_name="average"))
10535+
count: int = dc_field(metadata=dc_config(field_name="count"))
10536+
10537+
1048510538
@dataclass
1048610539
class UserRequest(DataClassJsonMixin):
1048710540
id: str = dc_field(metadata=dc_config(field_name="id"))

getstream/video/rest_client.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,3 +751,19 @@ def query_aggregate_call_stats(
751751
return self.post(
752752
"/api/v2/video/stats", QueryAggregateCallStatsResponse, json=json
753753
)
754+
755+
def get_call_report(
756+
self, type: str, id: str, session_id: Optional[str] = None
757+
) -> StreamResponse[GetCallReportResponse]:
758+
query_params = build_query_param(session_id=session_id)
759+
path_params = {
760+
"type": type,
761+
"id": id,
762+
}
763+
764+
return self.get(
765+
"/api/v2/video/call/{type}/{id}/report",
766+
GetCallReportResponse,
767+
query_params=query_params,
768+
path_params=path_params,
769+
)

tests/test_video_integration.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,16 @@ def test_delete_not_existing_transcription(self):
355355
with pytest.raises(StreamAPIException):
356356
self.call.delete_transcription("random_session", "random_filename")
357357

358+
def test_get_call_report_for_latest_session(self):
359+
with pytest.raises(StreamAPIException):
360+
self.client.video.get_call_report(self.call.call_type, self.call.id)
361+
362+
def test_get_call_report_for_specified_session(self):
363+
with pytest.raises(StreamAPIException):
364+
self.client.video.get_call_report(
365+
self.call.call_type, self.call.id, session_id="non_existent"
366+
)
367+
358368

359369
class TestDeleteCall:
360370
def test_soft_delete(self, call: Call):

0 commit comments

Comments
 (0)