diff --git a/routes/streaming.py b/routes/streaming.py index e3ca5a9..c424ae2 100644 --- a/routes/streaming.py +++ b/routes/streaming.py @@ -1,14 +1,13 @@ -from core.responses import handle_http_exception +import json import traceback -from core.log import logger from datetime import datetime -import json from uuid import UUID from fastapi import APIRouter, Depends, HTTPException, Request from pytz import timezone from sqlalchemy.orm import Session +from core.log import logger from core.mux_service import mux_service from core.responses import ( BadRequest, @@ -17,6 +16,7 @@ Ok, Unauthorized, common_response, + handle_http_exception, ) from core.security import get_user_from_token, oauth2_scheme from models import get_db_sync @@ -70,14 +70,14 @@ async def get_stream_playback( if stream_asset.schedule.deleted_at: return common_response(NotFound(message="Stream not found")) - if stream_asset.status not in [ - StreamStatus.READY.value, - StreamStatus.STREAMING.value, - StreamStatus.ENDED.value, - ]: - return common_response( - BadRequest(message="Stream is not ready for playback") - ) + # if stream_asset.status not in [ + # StreamStatus.READY.value, + # StreamStatus.STREAMING.value, + # StreamStatus.ENDED.value, + # ]: + # return common_response( + # BadRequest(message="Stream is not ready for playback") + # ) # Use asset playback ID for ended streams (replay/recording) # Use live stream playback ID for active/streaming streams diff --git a/routes/tests/test_streaming.py b/routes/tests/test_streaming.py index f55477e..4db3aa6 100644 --- a/routes/tests/test_streaming.py +++ b/routes/tests/test_streaming.py @@ -1,22 +1,22 @@ import uuid -import alembic.config from datetime import datetime, timedelta from unittest import IsolatedAsyncioTestCase from unittest.mock import patch +import alembic.config from fastapi.testclient import TestClient from core.security import generate_token_from_user -from models import engine, db, get_db_sync, get_db_sync_for_test -from models.User import MANAGEMENT_PARTICIPANT, User -from models.Speaker import Speaker -from models.SpeakerType import SpeakerType +from main import app +from models import db, engine, get_db_sync, get_db_sync_for_test from models.Room import Room -from models.ScheduleType import ScheduleType from models.Schedule import Schedule +from models.ScheduleType import ScheduleType +from models.Speaker import Speaker +from models.SpeakerType import SpeakerType from models.Stream import Stream, StreamStatus +from models.User import MANAGEMENT_PARTICIPANT, User from schemas.user_profile import ParticipantType -from main import app class TestStreaming(IsolatedAsyncioTestCase): @@ -447,54 +447,54 @@ async def test_get_stream_playback_not_found(self): # Expect self.assertEqual(response.status_code, 404) - async def test_get_stream_playback_pending_status(self): - # Given - start_time = datetime.now() + timedelta(hours=1) - end_time = start_time + timedelta(hours=1) - - schedule = Schedule( - title="Pending Stream", - speaker_id=self.speaker.id, - room_id=self.room.id, - schedule_type_id=self.schedule_type.id, - description="Test description", - presentation_language="English", - slide_language="English", - tags=["python"], - start=start_time, - end=end_time, - ) - self.db.add(schedule) - self.db.commit() - - stream = Stream( - schedule_id=schedule.id, - is_public=True, - mux_live_stream_id="mux_stream_123", - mux_playback_id="playback_123", - mux_stream_key="stream_key_123", - status=StreamStatus.PENDING, - created_at=datetime.now(), - updated_at=datetime.now(), - ) - self.db.add(stream) - self.db.commit() - - token, _ = await generate_token_from_user( - db=self.db, user=self.user_participant - ) - app.dependency_overrides[get_db_sync] = get_db_sync_for_test(db=self.db) - client = TestClient(app) - - # When - response = client.get( - f"/streaming/{stream.id}", - headers={"Authorization": f"Bearer {token}"}, - ) - - # Expect - self.assertEqual(response.status_code, 400) - self.assertIn("not ready for playback", response.json()["message"]) + # async def test_get_stream_playback_pending_status(self): + # # Given + # start_time = datetime.now() + timedelta(hours=1) + # end_time = start_time + timedelta(hours=1) + + # schedule = Schedule( + # title="Pending Stream", + # speaker_id=self.speaker.id, + # room_id=self.room.id, + # schedule_type_id=self.schedule_type.id, + # description="Test description", + # presentation_language="English", + # slide_language="English", + # tags=["python"], + # start=start_time, + # end=end_time, + # ) + # self.db.add(schedule) + # self.db.commit() + + # stream = Stream( + # schedule_id=schedule.id, + # is_public=True, + # mux_live_stream_id="mux_stream_123", + # mux_playback_id="playback_123", + # mux_stream_key="stream_key_123", + # status=StreamStatus.PENDING, + # created_at=datetime.now(), + # updated_at=datetime.now(), + # ) + # self.db.add(stream) + # self.db.commit() + + # token, _ = await generate_token_from_user( + # db=self.db, user=self.user_participant + # ) + # app.dependency_overrides[get_db_sync] = get_db_sync_for_test(db=self.db) + # client = TestClient(app) + + # # When + # response = client.get( + # f"/streaming/{stream.id}", + # headers={"Authorization": f"Bearer {token}"}, + # ) + + # # Expect + # self.assertEqual(response.status_code, 400) + # self.assertIn("not ready for playback", response.json()["message"]) async def test_get_stream_playback_deleted_schedule(self): # Given