diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..034e848 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,21 @@ +# Security Policy + +## Supported Versions + +Use this section to tell people about which versions of your project are +currently being supported with security updates. + +| Version | Supported | +| ------- | ------------------ | +| 5.1.x | :white_check_mark: | +| 5.0.x | :x: | +| 4.0.x | :white_check_mark: | +| < 4.0 | :x: | + +## Reporting a Vulnerability + +Use this section to tell people how to report a vulnerability. + +Tell them where to go, how often they can expect to get an update on a +reported vulnerability, what to expect if the vulnerability is accepted or +declined, etc. diff --git a/docs/index.md b/docs/index.md index 342fa4a..e0aa4d2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,27 +2,32 @@ ![](https://img.shields.io/github/stars/kokarare1212/librespot-python.svg) ![](https://img.shields.io/github/forks/kokarare1212/librespot-python.svg) [![](https://deepsource.io/gh/kokarare1212/librespot-python.svg/?label=active+issues&show_trend=true)](https://deepsource.io/gh/kokarare1212/librespot-python/?ref=repository-badge) + # Get Started + ## Contents + +* [Get Started](index.md) * [Supported Futures](supported.md) * [API Reference](api.md) + ## What's librespot-python? -librespot-python is a python port of Spotify's open source client library [librespot](https://github.com/librespot-org/librespot). +librespot-python is a python port of Spotify's open source client library [librespot](https://github.com/librespot-org/librespot). It was created to play Spotify on various platforms and devices. ## What do you need? -In order to develop with this library, you need to use Python. +In order to develop with this library, you need to use Python. Python can be downloaded from [the official website here](https://python.org/). ## Disclaimer -Please keep in mind that this library is not like Spotify approved. +Please keep in mind that this library is not like Spotify approved. -Therefore, the worst that can happen is that you will be banned from Spotify. +Therefore, the worst that can happen is that you will be banned from Spotify. Also, please keep in mind that this library is in alpha and may behave in unintended ways. diff --git a/docs/supported.md b/docs/supported.md index f656187..4b6f968 100644 --- a/docs/supported.md +++ b/docs/supported.md @@ -1,8 +1,15 @@ ## Supported Futures -| Futures | Supported | + +| Futures | Supported | + | --- | --- | + | Get Metadata | 〇 | + | Play Music | △*1 | + | Spotify Connect | ×*2 | -*1 It is currently possible to retrieve the music stream, but it requires separate software for decoding. + +*1 It is currently possible to retrieve the music stream, but it requires separate software for decoding. + *2 This feature will be added in the future. \ No newline at end of file diff --git a/librespot/ZeroconfServer.py b/librespot/ZeroconfServer.py index d1a551a..bb2c6f4 100644 --- a/librespot/ZeroconfServer.py +++ b/librespot/ZeroconfServer.py @@ -1,13 +1,16 @@ from __future__ import annotations -from librespot.common import Utils -from librespot.core import Session -from librespot.crypto import DiffieHellman -from librespot.standard import Closeable, Runnable -from librespot.proto import Connect + import concurrent.futures import random import socket +from librespot.common import Utils +from librespot.core import Session +from librespot.crypto import DiffieHellman +from librespot.proto import Connect +from librespot.standard import Closeable +from librespot.standard import Runnable + class ZeroconfServer(Closeable): __MAX_PORT = 65536 @@ -16,7 +19,8 @@ class ZeroconfServer(Closeable): __keys: DiffieHellman __inner: ZeroconfServer.Inner - def __init__(self, inner: ZeroconfServer.Inner, listen_port: int, listen_all: bool): + def __init__(self, inner: ZeroconfServer.Inner, listen_port: int, + listen_all: bool): self.__inner = inner self.__keys = DiffieHellman() @@ -39,7 +43,17 @@ class ZeroconfServer(Closeable): return self def create(self) -> ZeroconfServer: - return ZeroconfServer(ZeroconfServer.Inner(self.device_type, self.device_name, self.preferred_locale, self.conf, self.device_id), self.__listenPort, self.__listenAll) + return ZeroconfServer( + ZeroconfServer.Inner( + self.device_type, + self.device_name, + self.preferred_locale, + self.conf, + self.device_id, + ), + self.__listenPort, + self.__listenAll, + ) class Inner: device_type: Connect.DeviceType = None @@ -48,22 +62,25 @@ class ZeroconfServer(Closeable): preferred_locale: str = None conf = None - def __init__(self, - device_type: Connect.DeviceType, - device_name: str, - preferred_locale: str, - conf: Session.Configuration, - device_id: str = None): + def __init__( + self, + device_type: Connect.DeviceType, + device_name: str, + preferred_locale: str, + conf: Session.Configuration, + device_id: str = None, + ): self.preferred_locale = preferred_locale self.conf = conf self.device_type = device_type self.device_name = device_name - self.device_id = device_id if device_id is not None else Utils.random_hex_string( - 40) + self.device_id = (device_id if device_id is not None else + Utils.random_hex_string(40)) class HttpRunner(Runnable, Closeable): __sock: socket - __executorService: concurrent.futures.ThreadPoolExecutor = concurrent.futures.ThreadPoolExecutor() + __executorService: concurrent.futures.ThreadPoolExecutor = ( + concurrent.futures.ThreadPoolExecutor()) __shouldStop: bool = False def __init__(self, port: int): @@ -86,4 +103,3 @@ class ZeroconfServer(Closeable): def close(self) -> None: super().close() - diff --git a/librespot/metadata/__init__.py b/librespot/metadata/__init__.py index e2ce5ae..46204d2 100644 --- a/librespot/metadata/__init__.py +++ b/librespot/metadata/__init__.py @@ -1,8 +1,10 @@ from __future__ import annotations + +import re + from librespot.common import Base62 from librespot.common import Utils from librespot.proto.ContextTrack import ContextTrack -import re class SpotifyId: @@ -47,9 +49,9 @@ class PlayableId: @staticmethod def is_supported(uri: str): - return not uri.startswith("spotify:local:") and \ - not uri == "spotify:delimiter" and \ - not uri == "spotify:meta:delimiter" + return (not uri.startswith("spotify:local:") + and not uri == "spotify:delimiter" + and not uri == "spotify:meta:delimiter") @staticmethod def should_play(track: ContextTrack): @@ -260,5 +262,3 @@ class TrackId(PlayableId, SpotifyId): def get_gid(self) -> bytes: return Utils.hex_to_bytes(self._hexId) - -