From 7d121cbff5918aa07beb0c76aa4df22a97697132 Mon Sep 17 00:00:00 2001 From: Nick Sonneveld Date: Fri, 30 Mar 2018 15:06:04 +1100 Subject: [PATCH 1/3] Close request object, not the whole connection. Allows keepalive --- spotipy/client.py | 55 ++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/spotipy/client.py b/spotipy/client.py index 3e33a21..06858b9 100644 --- a/spotipy/client.py +++ b/spotipy/client.py @@ -107,36 +107,37 @@ class Spotify(object): if self.trace_out: print(url) - r = self._session.request(method, url, headers=headers, proxies=self.proxies, **args) + + with self._session.request(method, url, headers=headers, proxies=self.proxies, **args) as r: + + if self.trace: # pragma: no cover + print() + print ('request headers', headers) + print ('response headers', r.headers) + print ('http status', r.status_code) + print(method, r.url) + if payload: + print("DATA", json.dumps(payload)) + + try: + r.raise_for_status() + except: + try: + msg = r.json()['error']['message'] + except: + msg = 'error' + raise SpotifyException(r.status_code, + -1, '%s:\n %s' % (r.url, msg), headers=r.headers) + + try: + results = r.json() + except: + results = None if self.trace: # pragma: no cover + print('RESP', results) print() - print ('headers', headers) - print ('http status', r.status_code) - print(method, r.url) - if payload: - print("DATA", json.dumps(payload)) - - try: - r.raise_for_status() - except: - if r.text and len(r.text) > 0 and r.text != 'null': - raise SpotifyException(r.status_code, - -1, '%s:\n %s' % (r.url, r.json()['error']['message']), - headers=r.headers) - else: - raise SpotifyException(r.status_code, - -1, '%s:\n %s' % (r.url, 'error'), headers=r.headers) - finally: - r.connection.close() - if r.text and len(r.text) > 0 and r.text != 'null': - results = r.json() - if self.trace: # pragma: no cover - print('RESP', results) - print() - return results - else: - return None + return results def _get(self, url, args=None, payload=None, **kwargs): if args: From f8608c80ebe590745e833673f60747582954d99e Mon Sep 17 00:00:00 2001 From: Stephane Bruckert Date: Mon, 13 Jan 2020 20:09:37 +0000 Subject: [PATCH 2/3] Close custom session in test --- tests/tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/tests.py b/tests/tests.py index 5d9a4a4..1cc119f 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -203,6 +203,7 @@ class TestSpotipy(unittest.TestCase): self.assertTrue( with_custom_session.user( user="akx")["uri"] == "spotify:user:akx") + sess.close() def test_force_no_requests_session(self): with_no_session = Spotify(auth=self.token, requests_session=False) From c5911268425736b82f8986ead9987cf6225817c7 Mon Sep 17 00:00:00 2001 From: Stephane Bruckert Date: Mon, 13 Jan 2020 20:12:07 +0000 Subject: [PATCH 3/3] Changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28addea..d42cf1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + + - Allow session keepalive + ## [2.6.1] - 2020-01-13 ### Fixed