From 8de2591c18013e6065bbc8b58f7af08acae59073 Mon Sep 17 00:00:00 2001 From: myselfhimself Date: Wed, 2 Dec 2015 20:43:13 +0100 Subject: [PATCH] Avoid unneeded token renewal when cached token's scope contains currently required scope Before that there was a strict string comparision "cached scope" == "currently required scope". Added a scope subset detection method. --- spotipy/oauth2.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spotipy/oauth2.py b/spotipy/oauth2.py index bb10e32..e6b300c 100644 --- a/spotipy/oauth2.py +++ b/spotipy/oauth2.py @@ -130,7 +130,7 @@ class SpotifyOAuth(object): token_info = json.loads(token_info_string) # if scopes don't match, then bail - if 'scope' not in token_info or self.scope != token_info['scope']: + if 'scope' not in token_info or not self._is_scope_subset(self.scope, token_info['scope']): return None if self._is_token_expired(token_info): @@ -150,6 +150,11 @@ class SpotifyOAuth(object): self._warn("couldn't write token cache to " + self.cache_path) pass + def _is_scope_subset(self, needle_scope, haystack_scope): + needle_scope = set(needle_scope.split()) + haystack_scope = set(haystack_scope.split()) + + return needle_scope <= haystack_scope def _is_token_expired(self, token_info): now = int(time.time())