mirror of
https://github.com/spotipy-dev/spotipy.git
synced 2026-06-19 01:03:53 +00:00
Make redis dependency optional (#869)
This commit is contained in:
parent
4918305aba
commit
f005732a38
@ -12,6 +12,10 @@ While this is unreleased, please only add v3 features here. Rebasing master onto
|
||||
### Added
|
||||
|
||||
* `Scope` - An enum which contains all of the authorization scopes (see [here](https://github.com/plamere/spotipy/issues/652#issuecomment-797461311)).
|
||||
* Added `RedisCacheHandler`, a cache handler that stores the token info in Redis.
|
||||
* Added a new parameter to `RedisCacheHandler` to allow custom keys (instead of the default `token_info` key)
|
||||
* Simplify check for existing token in `RedisCacheHandler`
|
||||
* Make redis an optional dependency
|
||||
|
||||
### Changed
|
||||
|
||||
|
||||
@ -26,6 +26,12 @@ or upgrade
|
||||
pip install spotipy --upgrade
|
||||
```
|
||||
|
||||
Spotipy includes optional support for caching Spotify access tokens to a Redis server. To use this support, make sure to specify the `redis` extra:
|
||||
|
||||
```bash
|
||||
pip install spotipy[redis]
|
||||
```
|
||||
|
||||
## 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).
|
||||
|
||||
8
setup.py
8
setup.py
@ -11,9 +11,15 @@ doc_reqs = [
|
||||
'Sphinx>=1.5.2'
|
||||
]
|
||||
|
||||
redis_reqs = [
|
||||
"redis>=3.5.3",
|
||||
"redis<4.0.0;python_version<'3.4'",
|
||||
]
|
||||
|
||||
extra_reqs = {
|
||||
'doc': doc_reqs,
|
||||
'test': test_reqs
|
||||
'test': test_reqs,
|
||||
'redis': redis_reqs,
|
||||
}
|
||||
|
||||
setup(
|
||||
|
||||
@ -12,8 +12,7 @@ import logging
|
||||
import os
|
||||
from spotipy.util import CLIENT_CREDS_ENV_VARS
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
from redis import RedisError
|
||||
import warnings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -188,8 +187,19 @@ class RedisCacheHandler(CacheHandler):
|
||||
self.redis = redis
|
||||
self.key = key if key else 'token_info'
|
||||
|
||||
try:
|
||||
from redis import RedisError # noqa: F401
|
||||
except ImportError:
|
||||
warnings.warn(
|
||||
'Error importing module "redis"; '
|
||||
'it is required for RedisCacheHandler',
|
||||
UserWarning
|
||||
)
|
||||
|
||||
def get_cached_token(self):
|
||||
token_info = None
|
||||
from redis import RedisError
|
||||
|
||||
try:
|
||||
token_info = self.redis.get(self.key)
|
||||
if token_info:
|
||||
@ -200,6 +210,8 @@ class RedisCacheHandler(CacheHandler):
|
||||
return token_info
|
||||
|
||||
def save_token_to_cache(self, token_info):
|
||||
from redis import RedisError
|
||||
|
||||
try:
|
||||
self.redis.set(self.key, json.dumps(token_info))
|
||||
except RedisError as e:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user