Merge pull request #36 from kokarare1212/restyled/deepsource-transform-f45d8bb0
Restyle Format code with yapf
This commit is contained in:
@@ -1,11 +1,5 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from librespot.audio.AbsChunkedInputStream import AbsChunkedInputStream
|
|
||||||
from librespot.audio import GeneralAudioStream, GeneralWritableStream, StreamId
|
|
||||||
from librespot.audio.decrypt import AesAudioDecrypt, NoopAudioDecrypt
|
|
||||||
from librespot.audio.format import SuperAudioFormat
|
|
||||||
from librespot.audio.storage import ChannelManager
|
|
||||||
from librespot.common import Utils
|
|
||||||
from librespot.proto import StorageResolve
|
|
||||||
import concurrent.futures
|
import concurrent.futures
|
||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
@@ -14,9 +8,20 @@ import time
|
|||||||
import typing
|
import typing
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
|
||||||
|
from librespot.audio import GeneralAudioStream
|
||||||
|
from librespot.audio import GeneralWritableStream
|
||||||
|
from librespot.audio import StreamId
|
||||||
|
from librespot.audio.AbsChunkedInputStream import AbsChunkedInputStream
|
||||||
|
from librespot.audio.decrypt import AesAudioDecrypt
|
||||||
|
from librespot.audio.decrypt import NoopAudioDecrypt
|
||||||
|
from librespot.audio.format import SuperAudioFormat
|
||||||
|
from librespot.audio.storage import ChannelManager
|
||||||
|
from librespot.common import Utils
|
||||||
|
from librespot.proto import StorageResolve
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
if typing.TYPE_CHECKING:
|
||||||
from librespot.audio.HaltListener import HaltListener
|
|
||||||
from librespot.audio.decrypt.AudioDecrypt import AudioDecrypt
|
from librespot.audio.decrypt.AudioDecrypt import AudioDecrypt
|
||||||
|
from librespot.audio.HaltListener import HaltListener
|
||||||
from librespot.cache.CacheManager import CacheManager
|
from librespot.cache.CacheManager import CacheManager
|
||||||
from librespot.core.Session import Session
|
from librespot.core.Session import Session
|
||||||
from librespot.proto import Metadata
|
from librespot.proto import Metadata
|
||||||
@@ -30,9 +35,11 @@ class CdnManager:
|
|||||||
self._session = session
|
self._session = session
|
||||||
|
|
||||||
def get_head(self, file_id: bytes):
|
def get_head(self, file_id: bytes):
|
||||||
resp = self._session.client() \
|
resp = self._session.client().get(
|
||||||
.get(self._session.get_user_attribute("head-files-url", "https://heads-fa.spotify.com/head/{file_id}")
|
self._session.get_user_attribute(
|
||||||
.replace("{file_id}", Utils.bytes_to_hex(file_id)))
|
"head-files-url",
|
||||||
|
"https://heads-fa.spotify.com/head/{file_id}").replace(
|
||||||
|
"{file_id}", Utils.bytes_to_hex(file_id)))
|
||||||
|
|
||||||
if resp.status_code != 200:
|
if resp.status_code != 200:
|
||||||
raise IOError("{}".format(resp.status_code))
|
raise IOError("{}".format(resp.status_code))
|
||||||
@@ -46,24 +53,41 @@ class CdnManager:
|
|||||||
def stream_external_episode(self, episode: Metadata.Episode,
|
def stream_external_episode(self, episode: Metadata.Episode,
|
||||||
external_url: str,
|
external_url: str,
|
||||||
halt_listener: HaltListener):
|
halt_listener: HaltListener):
|
||||||
return CdnManager.Streamer(self._session, StreamId(episode),
|
return CdnManager.Streamer(
|
||||||
SuperAudioFormat.MP3,
|
self._session,
|
||||||
CdnManager.CdnUrl(self, None, external_url),
|
StreamId(episode),
|
||||||
self._session.cache(), NoopAudioDecrypt(),
|
SuperAudioFormat.MP3,
|
||||||
halt_listener)
|
CdnManager.CdnUrl(self, None, external_url),
|
||||||
|
self._session.cache(),
|
||||||
|
NoopAudioDecrypt(),
|
||||||
|
halt_listener,
|
||||||
|
)
|
||||||
|
|
||||||
def stream_file(self, file: Metadata.AudioFile, key: bytes, url: str,
|
def stream_file(
|
||||||
halt_listener: HaltListener):
|
self,
|
||||||
return CdnManager.Streamer(self._session, StreamId.StreamId(file),
|
file: Metadata.AudioFile,
|
||||||
SuperAudioFormat.get(file.format),
|
key: bytes,
|
||||||
CdnManager.CdnUrl(self, file.file_id, url),
|
url: str,
|
||||||
self._session.cache(), AesAudioDecrypt(key),
|
halt_listener: HaltListener,
|
||||||
halt_listener)
|
):
|
||||||
|
return CdnManager.Streamer(
|
||||||
|
self._session,
|
||||||
|
StreamId.StreamId(file),
|
||||||
|
SuperAudioFormat.get(file.format),
|
||||||
|
CdnManager.CdnUrl(self, file.file_id, url),
|
||||||
|
self._session.cache(),
|
||||||
|
AesAudioDecrypt(key),
|
||||||
|
halt_listener,
|
||||||
|
)
|
||||||
|
|
||||||
def get_audio_url(self, file_id: bytes):
|
def get_audio_url(self, file_id: bytes):
|
||||||
resp = self._session.api().send(
|
resp = self._session.api().send(
|
||||||
"GET", "/storage-resolve/files/audio/interactive/{}".format(
|
"GET",
|
||||||
Utils.bytes_to_hex(file_id)), None, None)
|
"/storage-resolve/files/audio/interactive/{}".format(
|
||||||
|
Utils.bytes_to_hex(file_id)),
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
if resp.status_code != 200:
|
if resp.status_code != 200:
|
||||||
raise IOError(resp.status_code)
|
raise IOError(resp.status_code)
|
||||||
@@ -159,8 +183,10 @@ class CdnManager:
|
|||||||
else:
|
else:
|
||||||
self._expiration = -1
|
self._expiration = -1
|
||||||
|
|
||||||
class Streamer(GeneralAudioStream.GeneralAudioStream,
|
class Streamer(
|
||||||
GeneralWritableStream.GeneralWritableStream):
|
GeneralAudioStream.GeneralAudioStream,
|
||||||
|
GeneralWritableStream.GeneralWritableStream,
|
||||||
|
):
|
||||||
_session: Session = None
|
_session: Session = None
|
||||||
_streamId: StreamId = None
|
_streamId: StreamId = None
|
||||||
_executorService = concurrent.futures.ThreadPoolExecutor()
|
_executorService = concurrent.futures.ThreadPoolExecutor()
|
||||||
@@ -175,10 +201,16 @@ class CdnManager:
|
|||||||
_internalStream: CdnManager.Streamer.InternalStream = None
|
_internalStream: CdnManager.Streamer.InternalStream = None
|
||||||
_haltListener: HaltListener = None
|
_haltListener: HaltListener = None
|
||||||
|
|
||||||
def __init__(self, session: Session, stream_id: StreamId,
|
def __init__(
|
||||||
audio_format: SuperAudioFormat, cdn_url,
|
self,
|
||||||
cache: CacheManager, audio_decrypt: AudioDecrypt,
|
session: Session,
|
||||||
halt_listener: HaltListener):
|
stream_id: StreamId,
|
||||||
|
audio_format: SuperAudioFormat,
|
||||||
|
cdn_url,
|
||||||
|
cache: CacheManager,
|
||||||
|
audio_decrypt: AudioDecrypt,
|
||||||
|
halt_listener: HaltListener,
|
||||||
|
):
|
||||||
self._session = session
|
self._session = session
|
||||||
self._streamId = stream_id
|
self._streamId = stream_id
|
||||||
self._audioFormat = audio_format
|
self._audioFormat = audio_format
|
||||||
@@ -251,12 +283,12 @@ class CdnManager:
|
|||||||
range_start = ChannelManager.CHUNK_SIZE * chunk
|
range_start = ChannelManager.CHUNK_SIZE * chunk
|
||||||
range_end = (chunk + 1) * ChannelManager.CHUNK_SIZE - 1
|
range_end = (chunk + 1) * ChannelManager.CHUNK_SIZE - 1
|
||||||
|
|
||||||
resp = self._session.client().get(self._cdnUrl._url,
|
resp = self._session.client().get(
|
||||||
headers={
|
self._cdnUrl._url,
|
||||||
"Range":
|
headers={
|
||||||
"bytes={}-{}".format(
|
"Range": "bytes={}-{}".format(range_start, range_end)
|
||||||
range_start, range_end)
|
},
|
||||||
})
|
)
|
||||||
|
|
||||||
if resp.status_code != 206:
|
if resp.status_code != 206:
|
||||||
raise IOError(resp.status_code)
|
raise IOError(resp.status_code)
|
||||||
|
|||||||
Reference in New Issue
Block a user