diff --git a/CHANGELOG.md b/CHANGELOG.md index 3878654..c751afc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Add your changes below. - Fixed scripts in examples directory that didn't run correctly - Updated documentation for `Client.current_user_top_artists` to indicate maximum number of artists limit - Set auth cache file permissions to `600`: https://github.com/spotipy-dev/spotipy/security/advisories/GHSA-pwhh-q4h6-w599 +- Fixed `__del__` methods by preventing garbage collection for `requests.Session` ### Changed diff --git a/spotipy/client.py b/spotipy/client.py index b622b14..03825a8 100644 --- a/spotipy/client.py +++ b/spotipy/client.py @@ -11,7 +11,7 @@ from collections import defaultdict import requests from spotipy.exceptions import SpotifyException -from spotipy.util import Retry +from spotipy.util import REQUESTS_SESSION, Retry logger = logging.getLogger(__name__) @@ -211,11 +211,8 @@ class Spotify: def __del__(self): """Make sure the connection (pool) gets closed""" - try: - if isinstance(self._session, requests.Session): - self._session.close() - except AttributeError: - pass + if getattr(self, "_session", None) and isinstance(self._session, REQUESTS_SESSION): + self._session.close() def _build_session(self): self._session = requests.Session() diff --git a/spotipy/oauth2.py b/spotipy/oauth2.py index e949f84..7028588 100644 --- a/spotipy/oauth2.py +++ b/spotipy/oauth2.py @@ -21,7 +21,7 @@ import requests from spotipy.cache_handler import CacheFileHandler, CacheHandler from spotipy.exceptions import SpotifyOauthError, SpotifyStateError -from spotipy.util import CLIENT_CREDS_ENV_VARS, get_host_port, normalize_scope +from spotipy.util import CLIENT_CREDS_ENV_VARS, REQUESTS_SESSION, get_host_port, normalize_scope logger = logging.getLogger(__name__) @@ -122,7 +122,7 @@ class SpotifyAuthBase: def __del__(self): """Make sure the connection (pool) gets closed""" - if isinstance(self._session, requests.Session): + if getattr(self, "_session", None) and isinstance(self._session, REQUESTS_SESSION): self._session.close() diff --git a/spotipy/util.py b/spotipy/util.py index 4aeef09..65a9701 100644 --- a/spotipy/util.py +++ b/spotipy/util.py @@ -22,6 +22,9 @@ CLIENT_CREDS_ENV_VARS = { "redirect_uri": "SPOTIPY_REDIRECT_URI", } +# workaround for garbage collection +REQUESTS_SESSION = requests.Session + def prompt_for_user_token( username=None,