improved error catching on get_ext_metadata()

reorganize LoadedStream and Metrics definitions for better external referencing
This commit is contained in:
Googolplexed0
2025-11-10 22:10:54 -06:00
parent 3e52743549
commit 10748b8c5c
2 changed files with 39 additions and 40 deletions

View File

@@ -331,7 +331,7 @@ class CdnFeedHelper:
session: Session, track: Metadata.Track, file: Metadata.AudioFile,
resp_or_url: typing.Union[StorageResolve.StorageResolveResponse,
str], preload: bool,
halt_listener: HaltListener) -> PlayableContentFeeder.LoadedStream:
halt_listener: HaltListener) -> LoadedStream:
if type(resp_or_url) is str:
url = resp_or_url
else:
@@ -345,18 +345,17 @@ class CdnFeedHelper:
normalization_data = NormalizationData.read(input_stream)
if input_stream.skip(0xA7) != 0xA7:
raise IOError("Couldn't skip 0xa7 bytes!")
return PlayableContentFeeder.LoadedStream(
return LoadedStream(
track,
streamer,
normalization_data,
PlayableContentFeeder.Metrics(file.file_id, preload,
-1 if preload else audio_key_time),
file.file_id, preload, audio_key_time
)
@staticmethod
def load_episode_external(
session: Session, episode: Metadata.Episode,
halt_listener: HaltListener) -> PlayableContentFeeder.LoadedStream:
halt_listener: HaltListener) -> LoadedStream:
resp = session.client().head(episode.external_url)
if resp.status_code != 200:
@@ -368,11 +367,11 @@ class CdnFeedHelper:
streamer = session.cdn().stream_external_episode(
episode, url, halt_listener)
return PlayableContentFeeder.LoadedStream(
return LoadedStream(
episode,
streamer,
None,
PlayableContentFeeder.Metrics(None, False, -1),
None, False, -1
)
@staticmethod
@@ -383,7 +382,7 @@ class CdnFeedHelper:
resp_or_url: typing.Union[StorageResolve.StorageResolveResponse, str],
preload: bool,
halt_listener: HaltListener,
) -> PlayableContentFeeder.LoadedStream:
) -> LoadedStream:
if type(resp_or_url) is str:
url = resp_or_url
else:
@@ -397,12 +396,11 @@ class CdnFeedHelper:
normalization_data = NormalizationData.read(input_stream)
if input_stream.skip(0xA7) != 0xA7:
raise IOError("Couldn't skip 0xa7 bytes!")
return PlayableContentFeeder.LoadedStream(
return LoadedStream(
episode,
streamer,
normalization_data,
PlayableContentFeeder.Metrics(file.file_id, preload,
-1 if preload else audio_key_time),
file.file_id, preload, audio_key_time
)
@@ -850,29 +848,13 @@ class PlayableContentFeeder:
storage_resolve_response.ParseFromString(body)
return storage_resolve_response
class LoadedStream:
episode: Metadata.Episode
track: Metadata.Track
input_stream: GeneralAudioStream
normalization_data: NormalizationData
metrics: PlayableContentFeeder.Metrics
def __init__(self, track_or_episode: typing.Union[Metadata.Track,
Metadata.Episode],
input_stream: GeneralAudioStream,
normalization_data: typing.Union[NormalizationData, None],
metrics: PlayableContentFeeder.Metrics):
if type(track_or_episode) is Metadata.Track:
self.track = track_or_episode
self.episode = None
elif type(track_or_episode) is Metadata.Episode:
self.track = None
self.episode = track_or_episode
else:
raise TypeError()
self.input_stream = input_stream
self.normalization_data = normalization_data
self.metrics = metrics
metrics: Metrics
class Metrics:
file_id: str
@@ -884,9 +866,23 @@ class PlayableContentFeeder:
self.file_id = None if file_id is None else util.bytes_to_hex(
file_id)
self.preloaded_audio_key = preloaded_audio_key
self.audio_key_time = audio_key_time
if preloaded_audio_key and audio_key_time != -1:
raise RuntimeError()
self.audio_key_time = -1 if preloaded_audio_key else audio_key_time
def __init__(self, track_or_episode: typing.Union[Metadata.Track, Metadata.Episode],
input_stream: GeneralAudioStream,
normalization_data: typing.Union[NormalizationData, None],
file_id: str, preloaded_audio_key: bool, audio_key_time: int):
if type(track_or_episode) is Metadata.Track:
self.track = track_or_episode
self.episode = None
elif type(track_or_episode) is Metadata.Episode:
self.track = None
self.episode = track_or_episode
else:
raise TypeError()
self.input_stream = input_stream
self.normalization_data = normalization_data
self.metrics = self.Metrics(file_id, preloaded_audio_key, audio_key_time)
class StreamId:

View File

@@ -202,11 +202,14 @@ class ApiClient(Closeable):
body = response.content
if body is None:
raise RuntimeError()
raise ConnectionError("Extended Metadata request failed: No response body")
proto = BatchedExtensionResponse()
proto.ParseFromString(body)
mdb: bytes = proto.extended_metadata.pop().extension_data.pop().extension_data.value
entityextd = proto.extended_metadata.pop().extension_data.pop()
if entityextd.header.status_code != 200:
raise ConnectionError("Extended Metadata request failed: Status code {}".format(entityextd.header.status_code))
mdb: bytes = entityextd.extension_data.value
return mdb
def get_metadata_4_track(self, track: TrackId) -> Metadata.Track: