EsiPy is packaged with some default caching mechanism you may use.
This is a fake cache, only used to disable caching. This is used by default when cache
is set to None
in the EsiClient
.
This is the default EsiPy cache. It stores everything in memory dictionary and may then use many memory on your system.
This cache use DiskCache
to work, thus requires you to install diskcache
using pip instal diskcache
.
This cache will save data in files in a given directory, useful if you have many disc space but not much RAM.
When you instanciate the FileCache object, you’ll have to give the following parameters:
Parameter | Type | Description |
---|---|---|
path | String | The path where you want the files to be saved (diskCache will automatically create the directories if required) |
settings | kwargs | The DiskCache parameters you may need. See Cache.__init__() parameters |
Example:
# create the cache
from esipy.cache import FileCache
cache = FileCache(path="/tmp")
# and feed the client you create
client = EsiClient(cache=cache)
This cache use a memcache.Client
object you give it as parameter to cache everything.
It requires you to have python-memcached
installed.
# create the cache
import memcache
from esipy.cache import MemcachedCache
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
cache = MemcachedCache(memcache_client=mc)
# and feed the client you create
client = EsiClient(cache=cache)
This cache use a redis.Redis
object you give it as parameter to cache everything.
It requires you to have python redis
package installed.
# create the cache
import redis
from esipy.cache import RedisCache
redis_client = redis.Redis(host='localhost', port=6379, db=0)
cache = RedisCache(redis_client)
# and feed the client you create
client = EsiClient(cache=cache)
If you need a specific cache, because you already use your own, there’s a way to define a valid cache for EsiPy.
esipy.cache.BaseCache
and override the get
, set
and invalidate
methods
IMPORTANT: the caches keys used by EsiPy are tuples of frozendicts, which cannot be used everywhere. An existing _hash
method allows you to get a md5 hash of the tuple, but you can define you own.
from esipy.cache import BaseCache
# this is the minimum required
class YourCache(BaseCache):
def set(self, key, value, expire=300):
# do something and store the value
def get(self, key, default=None):
# return the value or return default
def invalidate(self, key):
# invalidate the cache key