Skip to content

Commit

Permalink
Make redis dependency optional (#869)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahesford authored Dec 26, 2022
1 parent 4918305 commit f005732
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
8 changes: 7 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,15 @@
'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(
Expand Down
16 changes: 14 additions & 2 deletions spotipy/cache_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
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__)

Expand Down Expand Up @@ -188,8 +187,19 @@ def __init__(self, redis, key=None):
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:
Expand All @@ -200,6 +210,8 @@ def get_cached_token(self):
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:
Expand Down

0 comments on commit f005732

Please sign in to comment.