Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-spotipy for openSUSE:Factory 
checked in at 2025-11-27 15:21:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-spotipy (Old)
 and      /work/SRC/openSUSE:Factory/.python-spotipy.new.14147 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-spotipy"

Thu Nov 27 15:21:45 2025 rev:16 rq:1320285 version:2.25.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-spotipy/python-spotipy.changes    
2025-02-28 17:40:51.516432649 +0100
+++ /work/SRC/openSUSE:Factory/.python-spotipy.new.14147/python-spotipy.changes 
2025-11-27 15:23:30.917924342 +0100
@@ -1,0 +2,16 @@
+Thu Nov 27 07:15:05 UTC 2025 - Daniel Garcia <[email protected]>
+
+- Update to 2.25.2 (bsc#1254285):
+  * Security
+    + CVE-2025-66040 – HTML for OAuth flow now sanitized: prevents
+      potential XSS attacks (by @yueyueL) Upgrade if you run spotipy
+      with the default OAuth flow (uses a local HTTP server as a
+      callback method) (bsc#1254285)
+  * Added
+    + Adds additional_types parameter to retrieve currently playing episode
+    + Add deprecation warnings to documentation
+  * Fixed
+    + Fixed dead link in README.md
+    + Corrected Spotify/Spotipy typo in documentation
+
+-------------------------------------------------------------------
@@ -4 +20 @@
-- Update to 2.25.1:
+- Update to 2.25.1 (bsc#1238059):

Old:
----
  2.25.1.tar.gz

New:
----
  2.25.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-spotipy.spec ++++++
--- /var/tmp/diff_new_pack.X1VDrk/_old  2025-11-27 15:23:31.537950490 +0100
+++ /var/tmp/diff_new_pack.X1VDrk/_new  2025-11-27 15:23:31.541950659 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-spotipy
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-spotipy
-Version:        2.25.1
+Version:        2.25.2
 Release:        0
 Summary:        Client for the Spotify Web API
 License:        MIT

++++++ 2.25.1.tar.gz -> 2.25.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spotipy-2.25.1/.github/workflows/integration_tests.yml 
new/spotipy-2.25.2/.github/workflows/integration_tests.yml
--- old/spotipy-2.25.1/.github/workflows/integration_tests.yml  2025-02-27 
08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/.github/workflows/integration_tests.yml  2025-11-26 
21:16:13.000000000 +0100
@@ -4,7 +4,7 @@
 
 jobs:
   build:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-22.04
     env:
       SPOTIPY_CLIENT_ID: ${{ secrets.SPOTIPY_CLIENT_ID }}
       SPOTIPY_CLIENT_SECRET: ${{ secrets.SPOTIPY_CLIENT_SECRET }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/.github/workflows/lint.yml 
new/spotipy-2.25.2/.github/workflows/lint.yml
--- old/spotipy-2.25.1/.github/workflows/lint.yml       2025-02-27 
08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/.github/workflows/lint.yml       2025-11-26 
21:16:13.000000000 +0100
@@ -4,8 +4,7 @@
 
 jobs:
   build:
-
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@v4
       - name: Set up Python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/.github/workflows/publish.yml 
new/spotipy-2.25.2/.github/workflows/publish.yml
--- old/spotipy-2.25.1/.github/workflows/publish.yml    2025-02-27 
08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/.github/workflows/publish.yml    2025-11-26 
21:16:13.000000000 +0100
@@ -10,8 +10,7 @@
 jobs:
   build-n-publish:
     name: Build and publish Python 🐍 distributions 📦 to PyPI and TestPyPI
-    runs-on: ubuntu-latest
-
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@v4
       - name: Set up Python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/.github/workflows/pull_request.yml 
new/spotipy-2.25.2/.github/workflows/pull_request.yml
--- old/spotipy-2.25.1/.github/workflows/pull_request.yml       2025-02-27 
08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/.github/workflows/pull_request.yml       2025-11-26 
21:16:13.000000000 +0100
@@ -6,7 +6,7 @@
 jobs:
   # Enforces the update of a changelog file on every pull request
   changelog:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@v4
       - uses: dangoslen/[email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/.github/workflows/unit_tests.yml 
new/spotipy-2.25.2/.github/workflows/unit_tests.yml
--- old/spotipy-2.25.1/.github/workflows/unit_tests.yml 2025-02-27 
08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/.github/workflows/unit_tests.yml 2025-11-26 
21:16:13.000000000 +0100
@@ -4,7 +4,7 @@
 
 jobs:
   build:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     strategy:
       matrix:
         python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/CHANGELOG.md 
new/spotipy-2.25.2/CHANGELOG.md
--- old/spotipy-2.25.1/CHANGELOG.md     2025-02-27 08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/CHANGELOG.md     2025-11-26 21:16:13.000000000 +0100
@@ -15,6 +15,19 @@
 
 ### Removed
 
+## [2.25.2] - 2025-11-26
+
+### Added
+
+- Adds `additional_types` parameter to retrieve currently playing episode
+- Add deprecation warnings to documentation
+
+### Fixed
+
+- Fixed dead link in README.md
+- Corrected Spotify/Spotipy typo in documentation
+- Sanitize HTML error message output for OAuth flow: 
https://github.com/spotipy-dev/spotipy/security/advisories/GHSA-r77h-rpp9-w2xm
+
 ## [2.25.1] - 2025-02-27
 
 ### Added
@@ -26,6 +39,8 @@
 - 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`
+- Improved retry warning by using `logger` instead of `logging` and making 
sure that `retry_header` is an int
 
 ### Changed
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/README.md new/spotipy-2.25.2/README.md
--- old/spotipy-2.25.1/README.md        2025-02-27 08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/README.md        2025-11-26 21:16:13.000000000 +0100
@@ -36,7 +36,7 @@
 
 ## Quick Start
 
-A full set of examples can be found in the [online 
documentation](http://spotipy.readthedocs.org/) and in the [Spotipy examples 
directory](https://github.com/plamere/spotipy/tree/master/examples).
+A full set of examples can be found in the [online 
documentation](http://spotipy.readthedocs.org/) and in the [Spotipy examples 
directory](https://github.com/spotipy-dev/spotipy-examples).
 
 To get started, [install spotipy](#installation), create a new account or log 
in on https://developers.spotify.com/. Go to the 
[dashboard](https://developer.spotify.com/dashboard), create an app and add 
your new ID and SECRET (ID and SECRET can be found on an app setting) to your 
environment:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/docs/index.rst 
new/spotipy-2.25.2/docs/index.rst
--- old/spotipy-2.25.1/docs/index.rst   2025-02-27 08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/docs/index.rst   2025-11-26 21:16:13.000000000 +0100
@@ -23,7 +23,7 @@
 
     pip install spotipy --upgrade
 
-You can also obtain the source code from the `Spotify GitHub repository 
<https://github.com/plamere/spotipy>`_.
+You can also obtain the source code from the `Spotipy GitHub repository 
<https://github.com/plamere/spotipy>`_.
 
 
 Getting Started
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/setup.py new/spotipy-2.25.2/setup.py
--- old/spotipy-2.25.1/setup.py 2025-02-27 08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/setup.py 2025-11-26 21:16:13.000000000 +0100
@@ -21,7 +21,7 @@
 
 setup(
     name='spotipy',
-    version='2.25.1',
+    version='2.25.2',
     description='A light weight Python library for the Spotify Web API',
     long_description=long_description,
     long_description_content_type="text/markdown",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/spotipy/client.py 
new/spotipy-2.25.2/spotipy/client.py
--- old/spotipy-2.25.1/spotipy/client.py        2025-02-27 08:30:09.000000000 
+0100
+++ new/spotipy-2.25.2/spotipy/client.py        2025-11-26 21:16:13.000000000 
+0100
@@ -11,7 +11,7 @@
 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 @@
 
     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()
@@ -407,6 +404,10 @@
     ):
         """ Get Spotify catalog information about an artist's albums
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `artist_albums(..., include_groups='...')` instead.
+
             Parameters:
                 - artist_id - the artist ID, URI or URL
                 - include_groups - the types of items to return. One or more 
of 'album', 'single',
@@ -452,6 +453,9 @@
             identified artist. Similarity is based on analysis of the
             Spotify community's listening history.
 
+            .. deprecated::
+            This endpoint has been removed by Spotify and is no longer 
available.
+
             Parameters:
                 - artist_id - the artist ID, URI or URL
         """
@@ -683,6 +687,10 @@
     ):
         """ Get full details of the tracks of a playlist.
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_items(playlist_id, ..., additional_types=('track',))` 
instead.
+
             Parameters:
                 - playlist_id - the playlist ID, URI or URL
                 - fields - which fields to return
@@ -755,18 +763,22 @@
         )
 
     def user_playlist(self, user, playlist_id=None, fields=None, market=None):
-        warnings.warn(
-            "You should use `playlist(playlist_id)` instead",
-            DeprecationWarning,
-        )
-
         """ Gets a single playlist of a user
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist(playlist_id)` instead.
+
             Parameters:
                 - user - the id of the user
                 - playlist_id - the id of the playlist
                 - fields - which fields to return
         """
+        warnings.warn(
+            "You should use `playlist(playlist_id)` instead",
+            DeprecationWarning,
+        )
+
         if playlist_id is None:
             return self._get(f"users/{user}/starred")
         return self.playlist(playlist_id, fields=fields, market=market)
@@ -780,13 +792,12 @@
         offset=0,
         market=None,
     ):
-        warnings.warn(
-            "You should use `playlist_tracks(playlist_id)` instead",
-            DeprecationWarning,
-        )
-
         """ Get full details of the tracks of a playlist owned by a user.
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_tracks(playlist_id)` instead.
+
             Parameters:
                 - user - the id of the user
                 - playlist_id - the id of the playlist
@@ -795,6 +806,10 @@
                 - offset - the index of the first track to return
                 - market - an ISO 3166-1 alpha-2 country code.
         """
+        warnings.warn(
+            "You should use `playlist_tracks(playlist_id)` instead",
+            DeprecationWarning,
+        )
         return self.playlist_tracks(
             playlist_id,
             limit=limit,
@@ -847,6 +862,10 @@
 
             Changes a playlist's name and/or public/private state
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_change_details(playlist_id, ...)` instead.
+
             Parameters:
                 - user - the id of the user
                 - playlist_id - the id of the playlist
@@ -868,6 +887,10 @@
 
             Unfollows (deletes) a playlist for a user
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `current_user_unfollow_playlist(playlist_id)` instead.
+
             Parameters:
                 - user - the id of the user
                 - name - the name of the playlist
@@ -885,6 +908,10 @@
 
             Adds tracks to a playlist
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_add_items(playlist_id, tracks)` instead.
+
             Parameters:
                 - user - the id of the user
                 - playlist_id - the id of the playlist
@@ -906,6 +933,10 @@
 
             Adds episodes to a playlist
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_add_items(playlist_id, episodes)` instead.
+
             Parameters:
                 - user - the id of the user
                 - playlist_id - the id of the playlist
@@ -925,6 +956,10 @@
 
             Replace all tracks in a playlist for a user
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_replace_items(playlist_id, tracks)` instead.
+
             Parameters:
                 - user - the id of the user
                 - playlist_id - the id of the playlist
@@ -949,6 +984,10 @@
 
             Reorder tracks in a playlist from a user
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_reorder_items(playlist_id, ...)` instead.
+
             Parameters:
                 - user - the id of the user
                 - playlist_id - the id of the playlist
@@ -974,6 +1013,10 @@
 
             Removes all occurrences of the given tracks from the given playlist
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_remove_all_occurrences_of_items(playlist_id, tracks)` 
instead.
+
             Parameters:
                 - user - the id of the user
                 - playlist_id - the id of the playlist
@@ -994,7 +1037,10 @@
     ):
         """ This function is no longer in use, please use the recommended 
function in the warning!
 
-            Removes all occurrences of the given tracks from the given playlist
+            Removes specific occurrences of the given tracks from the given 
playlist
+
+            .. deprecated::
+            This endpoint has been removed by Spotify and is no longer 
available.
 
             Parameters:
                 - user - the id of the user
@@ -1007,8 +1053,8 @@
                 - snapshot_id - optional id of the playlist snapshot
         """
         warnings.warn(
-            "You should use `playlist_remove_specific_occurrences_of_items"
-            "(playlist_id, tracks)` instead",
+            "You're using 
`user_playlist_remove_specific_occurrences_of_tracks(...)`, "
+            "which is marked as deprecated by Spotify.",
             DeprecationWarning,
         )
         plid = self._get_id("playlist", playlist_id)
@@ -1032,6 +1078,10 @@
 
             Add the current authenticated user as a follower of a playlist.
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `current_user_follow_playlist(playlist_id)` instead.
+
             Parameters:
                 - playlist_owner_id - the user id of the playlist owner
                 - playlist_id - the id of the playlist
@@ -1049,6 +1099,10 @@
 
             Check to see if the given users are following the given playlist
 
+            .. deprecated::
+            This method is deprecated and may be removed in a future version. 
Use
+            `playlist_is_following(playlist_id, user_ids)` instead.
+
             Parameters:
                 - playlist_owner_id - the user id of the playlist owner
                 - playlist_id - the id of the playlist
@@ -1259,10 +1313,20 @@
         """
         return self.me()
 
-    def current_user_playing_track(self):
+    def current_user_playing_track(self, market=None, 
additional_types=("track",)):
         """ Get information about the current users currently playing track.
+
+            Parameters:
+                - market - An ISO 3166-1 alpha-2 country code or the
+                           string from_token.
+                - additional_types - list of item types to return.
+                                     valid types are: track and episode
         """
-        return self._get("me/player/currently-playing")
+        return self._get(
+            "me/player/currently-playing",
+            market=market,
+            additional_types=",".join(additional_types)
+        )
 
     def current_user_saved_albums(self, limit=20, offset=0, market=None):
         """ Gets a list of the albums saved in the current authorized user's
@@ -1568,6 +1632,9 @@
     ):
         """ Get a list of Spotify featured playlists
 
+            .. deprecated::
+            This endpoint has been removed by Spotify and is no longer 
available.
+
             Parameters:
                 - locale - The desired language, consisting of a lowercase ISO
                   639-1 alpha-2 language code and an uppercase ISO 3166-1 
alpha-2
@@ -1664,6 +1731,9 @@
     ):
         """ Get a list of playlists for a specific Spotify category
 
+            .. deprecated::
+            This endpoint has been removed by Spotify and is no longer 
available.
+
             Parameters:
                 - category_id - The Spotify category ID for the category.
 
@@ -1701,6 +1771,9 @@
             (at least one of `seed_artists`, `seed_tracks` and `seed_genres`
             are needed)
 
+            .. deprecated::
+            This endpoint has been removed by Spotify and is no longer 
available.
+
             Parameters:
                 - seed_artists - a list of artist IDs, URIs or URLs
                 - seed_tracks - a list of track IDs, URIs or URLs
@@ -1761,17 +1834,24 @@
         return self._get("recommendations", **params)
 
     def recommendation_genre_seeds(self):
+        """ Get a list of genres available for the recommendations function.
+
+            .. deprecated::
+            This endpoint has been removed by Spotify and is no longer 
available.
+        """
         warnings.warn(
             "You're using `recommendation_genre_seeds(...)`, "
             "which is marked as deprecated by Spotify.",
             DeprecationWarning,
         )
-        """ Get a list of genres available for the recommendations function.
-        """
         return self._get("recommendations/available-genre-seeds")
 
     def audio_analysis(self, track_id):
         """ Get audio analysis for a track based upon its Spotify ID
+
+            .. deprecated::
+            This endpoint has been removed by Spotify and is no longer 
available.
+
             Parameters:
                 - track_id - a track URI, URL or ID
         """
@@ -1785,6 +1865,10 @@
 
     def audio_features(self, tracks=[]):
         """ Get audio features for one or multiple tracks based upon their 
Spotify IDs
+
+            .. deprecated::
+            This endpoint has been removed by Spotify and is no longer 
available.
+
             Parameters:
                 - tracks - a list of track URIs, URLs or IDs, maximum: 100 ids
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/spotipy/oauth2.py 
new/spotipy-2.25.2/spotipy/oauth2.py
--- old/spotipy-2.25.1/spotipy/oauth2.py        2025-02-27 08:30:09.000000000 
+0100
+++ new/spotipy-2.25.2/spotipy/oauth2.py        2025-11-26 21:16:13.000000000 
+0100
@@ -8,6 +8,7 @@
 ]
 
 import base64
+import html
 import logging
 import os
 import time
@@ -21,7 +22,8 @@
 
 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 +124,7 @@
 
     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()
 
 
@@ -185,7 +187,7 @@
         Else fetches a new token and returns it
 
             Parameters:
-            - as_dict - a boolean indicating if returning the access token
+            - as_dict: (deprecated) a boolean indicating if returning the 
access token
                 as a token_info dictionary, otherwise it will be returned
                 as a string.
         """
@@ -483,8 +485,8 @@
         """ Gets the access token for the app given the code
 
             Parameters:
-                - code - the response code
-                - as_dict - a boolean indicating if returning the access token
+                - code: the response code
+                - as_dict: (deprecated) a boolean indicating if returning the 
access token
                             as a token_info dictionary, otherwise it will be 
returned
                             as a string.
         """
@@ -577,6 +579,11 @@
         return token_info
 
     def get_cached_token(self):
+        """ Gets the cached token for the app
+
+            .. deprecated::
+            This method is deprecated and may be removed in a future version.
+        """
         warnings.warn("Calling get_cached_token directly on the SpotifyOAuth 
object will be " +
                       "deprecated. Instead, please specify a CacheFileHandler 
instance as " +
                       "the cache_handler in SpotifyOAuth and use the 
CacheFileHandler's " +
@@ -1203,6 +1210,11 @@
         return token_info
 
     def get_cached_token(self):
+        """ Gets the cached token for the app
+
+            .. deprecated::
+            This method is deprecated and may be removed in a future version.
+        """
         warnings.warn("Calling get_cached_token directly on the 
SpotifyImplicitGrant " +
                       "object will be deprecated. Instead, please specify a " +
                       "CacheFileHandler instance as the cache_handler in 
SpotifyOAuth " +
@@ -1241,7 +1253,7 @@
         if self.server.auth_code:
             status = "successful"
         elif self.server.error:
-            status = f"failed ({self.server.error})"
+            status = f"failed ({html.escape(str(self.server.error))})"
         else:
             self._write("<html><body><h1>Invalid request</h1></body></html>")
             return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spotipy-2.25.1/spotipy/util.py 
new/spotipy-2.25.2/spotipy/util.py
--- old/spotipy-2.25.1/spotipy/util.py  2025-02-27 08:30:09.000000000 +0100
+++ new/spotipy-2.25.2/spotipy/util.py  2025-11-26 21:16:13.000000000 +0100
@@ -9,11 +9,12 @@
 import warnings
 from types import TracebackType
 
+import requests
 import urllib3
 
 import spotipy
 
-LOGGER = logging.getLogger(__name__)
+logger = logging.getLogger(__name__)
 
 CLIENT_CREDS_ENV_VARS = {
     "client_id": "SPOTIPY_CLIENT_ID",
@@ -22,6 +23,9 @@
     "redirect_uri": "SPOTIPY_REDIRECT_URI",
 }
 
+# workaround for garbage collection
+REQUESTS_SESSION = requests.Session
+
 
 def prompt_for_user_token(
     username=None,
@@ -33,15 +37,11 @@
     oauth_manager=None,
     show_dialog=False
 ):
-    warnings.warn(
-        "'prompt_for_user_token' is deprecated."
-        "Use the following instead: "
-        "    auth_manager=SpotifyOAuth(scope=scope)"
-        "    spotipy.Spotify(auth_manager=auth_manager)",
-        DeprecationWarning
-    )
-    """Prompt the user to login if necessary and returns a user token
-       suitable for use with the spotipy.Spotify constructor.
+    """ Prompt the user to login if necessary and returns a user token
+        suitable for use with the spotipy.Spotify constructor.
+
+        .. deprecated::
+            This method is deprecated and may be removed in a future version.
 
         Parameters:
             - username - the Spotify username. (optional)
@@ -53,6 +53,14 @@
             - oauth_manager - OAuth manager object. (optional)
             - show_dialog - If True, a login prompt always shows or defaults 
to False. (optional)
     """
+    warnings.warn(
+        "'prompt_for_user_token' is deprecated."
+        "Use the following instead: "
+        "    auth_manager=SpotifyOAuth(scope=scope)"
+        "    spotipy.Spotify(auth_manager=auth_manager)",
+        DeprecationWarning
+    )
+
     if not oauth_manager:
         if not client_id:
             client_id = os.getenv("SPOTIPY_CLIENT_ID")
@@ -64,7 +72,7 @@
             redirect_uri = os.getenv("SPOTIPY_REDIRECT_URI")
 
         if not client_id:
-            LOGGER.warning(
+            logger.warning(
                 """
                 You need to set your Spotify API credentials.
                 You can do this by setting environment variables like so:
@@ -166,8 +174,9 @@
         if response:
             retry_header = response.headers.get("Retry-After")
             if self.is_retry(method, response.status, bool(retry_header)):
-                logging.warning("Your application has reached a rate/request 
limit. "
-                                f"Retry will occur after: {retry_header}")
+                retry_header = retry_header or 0
+                logger.warning("Your application has reached a rate/request 
limit. "
+                               f"Retry will occur after: {retry_header} s")
         return super().increment(method,
                                  url,
                                  response=response,

Reply via email to