Skip to content

Commit

Permalink
Fixed UnboundLocalError / AttributeError #571, #581 (#583)
Browse files Browse the repository at this point in the history
* Fix #571, #581

* Add integration test for reaching max retries

* Update tests/integration/test_non_user_endpoints.py

Co-authored-by: Stéphane Bruckert <contact@stephanebruckert.com>

* Update CHANGELOG.md, integration test mock data

Co-authored-by: Stéphane Bruckert <contact@stephanebruckert.com>
  • Loading branch information
Quizz1Cal and stephanebruckert committed Oct 7, 2020
1 parent 76b640a commit 4bb4259
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
4 changes: 3 additions & 1 deletion CHANGELOG.md
Expand Up @@ -7,7 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## Unreleased

// Add your changes here and then delete this line
### Fixed

- SpotifyException now thrown when a request fails & has no response ( fixes #571, #581 )

## [2.16.0] - 2020-09-16

Expand Down
14 changes: 10 additions & 4 deletions spotipy/client.py
Expand Up @@ -243,7 +243,8 @@ def _internal_call(self, method, url, payload, params):

response.raise_for_status()
results = response.json()
except requests.exceptions.HTTPError:
except requests.exceptions.HTTPError as http_error:
response = http_error.response
try:
msg = response.json()["error"]["message"]
except (ValueError, KeyError):
Expand All @@ -263,13 +264,18 @@ def _internal_call(self, method, url, payload, params):
reason=reason,
headers=response.headers,
)
except requests.exceptions.RetryError:
except requests.exceptions.RetryError as retry_error:
request = retry_error.request
logger.error('Max Retries reached')
try:
reason = retry_error.args[0].reason
except (IndexError, AttributeError):
reason = None
raise SpotifyException(
599,
-1,
"%s:\n %s" % (response.url, "Max Retries"),
headers=response.headers,
"%s:\n %s" % (request.path_url, "Max Retries"),
reason=reason
)
except ValueError:
results = None
Expand Down
14 changes: 14 additions & 0 deletions tests/integration/test_non_user_endpoints.py
Expand Up @@ -240,6 +240,20 @@ def test_search_timeout(self):
self.assertRaises((requests.exceptions.Timeout, requests.exceptions.ConnectionError),
lambda: sp.search(q='my*', type='track'))

def test_max_retries_reached(self):
spotify_no_retry = Spotify(
client_credentials_manager=SpotifyClientCredentials(),
retries=0)
i = 0
while i < 100:
try:
spotify_no_retry.search(q='foo')
except spotipy.exceptions.SpotifyException as e:
self.assertIsInstance(e, spotipy.exceptions.SpotifyException)
return
i += 1
self.fail()

def test_album_search(self):
results = self.spotify.search(q='weezer pinkerton', type='album')
self.assertTrue('albums' in results)
Expand Down

0 comments on commit 4bb4259

Please sign in to comment.