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.
This commit is contained in:
myselfhimself 2015-12-02 20:43:13 +01:00 committed by Jonathan-David Schröder
parent 1bdd8b32c3
commit 8de2591c18

View File

@ -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())