diff --git a/redis_ds/redis_dict.py b/redis_ds/redis_dict.py index cc82922..a0782fb 100644 --- a/redis_ds/redis_dict.py +++ b/redis_ds/redis_dict.py @@ -6,12 +6,19 @@ not a Redis hashmap. If you prefer an interface to a hashmap, the ``redis_hash_dict`` file does just that. """ -import UserDict +try: + import UserDict + _DictMixin = UserDict.DictMixin +except ImportError: + from collections import UserDict + from collections import MutableMapping as DictMixin + _DictMixin = DictMixin + import redis_ds.redis_config as redis_config from redis_ds.serialization import PassThroughSerializer, PickleSerializer, JSONSerializer -class RedisDict(UserDict.DictMixin, PassThroughSerializer): +class RedisDict(_DictMixin, PassThroughSerializer): "Dictionary interface to Redis database." def __init__(self, redis_client=redis_config.CLIENT): """ @@ -51,6 +58,10 @@ def get(self, key, default=None): "Retrieve a key's value from the database falling back to a default." return self.__getitem__(key) or default + def __iter__(self): + "Return iterator over dictionary keys" + return iter(self.keys()) + class PickleRedisDict(RedisDict, PickleSerializer): "Serialize redis dictionary values via pickle." diff --git a/redis_ds/redis_hash_dict.py b/redis_ds/redis_hash_dict.py index 6a74f4d..257da25 100644 --- a/redis_ds/redis_hash_dict.py +++ b/redis_ds/redis_hash_dict.py @@ -4,10 +4,15 @@ """ import redis_ds.redis_config as redis_config from redis_ds.serialization import PassThroughSerializer, PickleSerializer, JSONSerializer -import UserDict - - -class RedisHashDict(UserDict.DictMixin, PassThroughSerializer): +try: + import UserDict + _DictMixin = UserDict.DictMixin +except ImportError: + from collections import UserDict + from collections import MutableMapping as DictMixin + _DictMixin = DictMixin + +class RedisHashDict(_DictMixin, PassThroughSerializer): "A dictionary interface to Redis hashmaps." def __init__(self, hash_key, redis_client=redis_config.CLIENT): "Initialize the redis hashmap dictionary interface." @@ -43,6 +48,10 @@ def get(self, key, default=None): "Retrieve a key's value or a default value if the key does not exist." return self.__getitem__(key) or default + def __iter__(self): + "Return iterator over dictionary keys" + return iter(self.keys()) + class PickleRedisHashDict(RedisHashDict, PickleSerializer): "Serialize hashmap values using pickle." diff --git a/redis_ds/serialization.py b/redis_ds/serialization.py index 76d333e..68a5a1f 100644 --- a/redis_ds/serialization.py +++ b/redis_ds/serialization.py @@ -1,7 +1,9 @@ "Mixins for serializing objects." import json -import cPickle as pickle - +try: + import cPickle as pickle +except ImportError: + import _pickle as pickle class PassThroughSerializer(object): "Don't serialize."