improved error catching on get_ext_metadata()
reorganize LoadedStream and Metrics definitions for better external referencing
This commit is contained in:
@@ -331,7 +331,7 @@ class CdnFeedHelper:
|
|||||||
session: Session, track: Metadata.Track, file: Metadata.AudioFile,
|
session: Session, track: Metadata.Track, file: Metadata.AudioFile,
|
||||||
resp_or_url: typing.Union[StorageResolve.StorageResolveResponse,
|
resp_or_url: typing.Union[StorageResolve.StorageResolveResponse,
|
||||||
str], preload: bool,
|
str], preload: bool,
|
||||||
halt_listener: HaltListener) -> PlayableContentFeeder.LoadedStream:
|
halt_listener: HaltListener) -> LoadedStream:
|
||||||
if type(resp_or_url) is str:
|
if type(resp_or_url) is str:
|
||||||
url = resp_or_url
|
url = resp_or_url
|
||||||
else:
|
else:
|
||||||
@@ -345,18 +345,17 @@ class CdnFeedHelper:
|
|||||||
normalization_data = NormalizationData.read(input_stream)
|
normalization_data = NormalizationData.read(input_stream)
|
||||||
if input_stream.skip(0xA7) != 0xA7:
|
if input_stream.skip(0xA7) != 0xA7:
|
||||||
raise IOError("Couldn't skip 0xa7 bytes!")
|
raise IOError("Couldn't skip 0xa7 bytes!")
|
||||||
return PlayableContentFeeder.LoadedStream(
|
return LoadedStream(
|
||||||
track,
|
track,
|
||||||
streamer,
|
streamer,
|
||||||
normalization_data,
|
normalization_data,
|
||||||
PlayableContentFeeder.Metrics(file.file_id, preload,
|
file.file_id, preload, audio_key_time
|
||||||
-1 if preload else audio_key_time),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def load_episode_external(
|
def load_episode_external(
|
||||||
session: Session, episode: Metadata.Episode,
|
session: Session, episode: Metadata.Episode,
|
||||||
halt_listener: HaltListener) -> PlayableContentFeeder.LoadedStream:
|
halt_listener: HaltListener) -> LoadedStream:
|
||||||
resp = session.client().head(episode.external_url)
|
resp = session.client().head(episode.external_url)
|
||||||
|
|
||||||
if resp.status_code != 200:
|
if resp.status_code != 200:
|
||||||
@@ -368,11 +367,11 @@ class CdnFeedHelper:
|
|||||||
|
|
||||||
streamer = session.cdn().stream_external_episode(
|
streamer = session.cdn().stream_external_episode(
|
||||||
episode, url, halt_listener)
|
episode, url, halt_listener)
|
||||||
return PlayableContentFeeder.LoadedStream(
|
return LoadedStream(
|
||||||
episode,
|
episode,
|
||||||
streamer,
|
streamer,
|
||||||
None,
|
None,
|
||||||
PlayableContentFeeder.Metrics(None, False, -1),
|
None, False, -1
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -383,7 +382,7 @@ class CdnFeedHelper:
|
|||||||
resp_or_url: typing.Union[StorageResolve.StorageResolveResponse, str],
|
resp_or_url: typing.Union[StorageResolve.StorageResolveResponse, str],
|
||||||
preload: bool,
|
preload: bool,
|
||||||
halt_listener: HaltListener,
|
halt_listener: HaltListener,
|
||||||
) -> PlayableContentFeeder.LoadedStream:
|
) -> LoadedStream:
|
||||||
if type(resp_or_url) is str:
|
if type(resp_or_url) is str:
|
||||||
url = resp_or_url
|
url = resp_or_url
|
||||||
else:
|
else:
|
||||||
@@ -397,12 +396,11 @@ class CdnFeedHelper:
|
|||||||
normalization_data = NormalizationData.read(input_stream)
|
normalization_data = NormalizationData.read(input_stream)
|
||||||
if input_stream.skip(0xA7) != 0xA7:
|
if input_stream.skip(0xA7) != 0xA7:
|
||||||
raise IOError("Couldn't skip 0xa7 bytes!")
|
raise IOError("Couldn't skip 0xa7 bytes!")
|
||||||
return PlayableContentFeeder.LoadedStream(
|
return LoadedStream(
|
||||||
episode,
|
episode,
|
||||||
streamer,
|
streamer,
|
||||||
normalization_data,
|
normalization_data,
|
||||||
PlayableContentFeeder.Metrics(file.file_id, preload,
|
file.file_id, preload, audio_key_time
|
||||||
-1 if preload else audio_key_time),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -850,29 +848,13 @@ class PlayableContentFeeder:
|
|||||||
storage_resolve_response.ParseFromString(body)
|
storage_resolve_response.ParseFromString(body)
|
||||||
return storage_resolve_response
|
return storage_resolve_response
|
||||||
|
|
||||||
|
|
||||||
class LoadedStream:
|
class LoadedStream:
|
||||||
episode: Metadata.Episode
|
episode: Metadata.Episode
|
||||||
track: Metadata.Track
|
track: Metadata.Track
|
||||||
input_stream: GeneralAudioStream
|
input_stream: GeneralAudioStream
|
||||||
normalization_data: NormalizationData
|
normalization_data: NormalizationData
|
||||||
metrics: PlayableContentFeeder.Metrics
|
metrics: 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
|
|
||||||
|
|
||||||
class Metrics:
|
class Metrics:
|
||||||
file_id: str
|
file_id: str
|
||||||
@@ -884,9 +866,23 @@ class PlayableContentFeeder:
|
|||||||
self.file_id = None if file_id is None else util.bytes_to_hex(
|
self.file_id = None if file_id is None else util.bytes_to_hex(
|
||||||
file_id)
|
file_id)
|
||||||
self.preloaded_audio_key = preloaded_audio_key
|
self.preloaded_audio_key = preloaded_audio_key
|
||||||
self.audio_key_time = audio_key_time
|
self.audio_key_time = -1 if preloaded_audio_key else audio_key_time
|
||||||
if preloaded_audio_key and audio_key_time != -1:
|
|
||||||
raise RuntimeError()
|
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:
|
class StreamId:
|
||||||
|
|||||||
@@ -202,11 +202,14 @@ class ApiClient(Closeable):
|
|||||||
|
|
||||||
body = response.content
|
body = response.content
|
||||||
if body is None:
|
if body is None:
|
||||||
raise RuntimeError()
|
raise ConnectionError("Extended Metadata request failed: No response body")
|
||||||
|
|
||||||
proto = BatchedExtensionResponse()
|
proto = BatchedExtensionResponse()
|
||||||
proto.ParseFromString(body)
|
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
|
return mdb
|
||||||
|
|
||||||
def get_metadata_4_track(self, track: TrackId) -> Metadata.Track:
|
def get_metadata_4_track(self, track: TrackId) -> Metadata.Track:
|
||||||
|
|||||||
Reference in New Issue
Block a user