[Python-modules-commits] [python-fakeredis] 01/04: Import python-fakeredis_0.8.2.orig.tar.gz
Ondřej Nový
onovy at moszumanska.debian.org
Sun Dec 11 14:45:47 UTC 2016
This is an automated email from the git hooks/post-receive script.
onovy pushed a commit to branch master
in repository python-fakeredis.
commit 80d655654662809d17b7e6fd07a817cd1464d0c5
Author: Ondřej Nový <onovy at debian.org>
Date: Sun Dec 11 15:31:50 2016 +0100
Import python-fakeredis_0.8.2.orig.tar.gz
---
README.rst | 8 ------
fakeredis.py | 28 +++++++++++++--------
setup.py | 2 +-
test_fakeredis.py | 75 +++++++++++++++++++++++++++++++++++++++++++++++--------
4 files changed, 83 insertions(+), 30 deletions(-)
diff --git a/README.rst b/README.rst
index dd6965f..b57ca6a 100644
--- a/README.rst
+++ b/README.rst
@@ -4,14 +4,6 @@ fakeredis: A fake version of a redis-py
.. image:: https://secure.travis-ci.org/jamesls/fakeredis.png?branch=master
:target: http://travis-ci.org/jamesls/fakeredis
-.. image:: https://pypip.in/version/fakeredis/badge.svg
- :target: https://pypi.python.org/pypi/fakeredis
-
-.. image:: https://pypip.in/py_versions/fakeredis/badge.svg
- :target: https://pypi.python.org/pypi/fakeredis/
-
-.. image:: https://pypip.in/license/fakeredis/badge.svg
- :target: https://pypi.python.org/pypi/fakeredis/
.. image:: https://coveralls.io/repos/jamesls/fakeredis/badge.png?branch=master
:target: https://coveralls.io/r/jamesls/fakeredis
diff --git a/fakeredis.py b/fakeredis.py
index e5f76aa..ee83fe2 100644
--- a/fakeredis.py
+++ b/fakeredis.py
@@ -29,7 +29,7 @@ if not PY2:
long = int
-__version__ = '0.8.1'
+__version__ = '0.8.2'
if sys.version_info[0] == 2:
@@ -40,8 +40,6 @@ if sys.version_info[0] == 2:
int_to_byte = chr
def to_bytes(x, charset=sys.getdefaultencoding(), errors='strict'):
- if x is None:
- return None
if isinstance(x, (bytes, bytearray, buffer)) or hasattr(x, '__str__'):
return bytes(x)
if isinstance(x, unicode):
@@ -72,8 +70,6 @@ else:
int_to_byte = operator.methodcaller('to_bytes', 1, 'big')
def to_bytes(x, charset=sys.getdefaultencoding(), errors='strict'):
- if x is None:
- return None
if isinstance(x, (bytes, bytearray, memoryview)):
return bytes(x)
if isinstance(x, str):
@@ -214,7 +210,7 @@ class FakeStrictRedis(object):
db = int(url.path.replace('/', ''))
except (AttributeError, ValueError):
db = 0
- return cls(db=db)
+ return cls(db=db, **kwargs)
def __init__(self, db=0, charset='utf-8', errors='strict',
decode_responses=False, **kwargs):
@@ -524,11 +520,11 @@ class FakeStrictRedis(object):
def _ttl(self, name, multiplier=1):
if name not in self._db:
- return None
+ return -2
exp_time = self._db.expiring(name)
if not exp_time:
- return None
+ return -1
now = datetime.now()
if now > exp_time:
@@ -760,6 +756,7 @@ class FakeStrictRedis(object):
def rpoplpush(self, src, dst):
el = self.rpop(src)
if el is not None:
+ el = to_bytes(el)
try:
self._db[dst].insert(0, el)
except KeyError:
@@ -793,6 +790,7 @@ class FakeStrictRedis(object):
def brpoplpush(self, src, dst, timeout=0):
el = self.rpop(src)
if el is not None:
+ el = to_bytes(el)
try:
self._db[dst].insert(0, el)
except KeyError:
@@ -921,7 +919,7 @@ class FakeStrictRedis(object):
set named ``dest``. Returns the number of keys in the new set.
"""
diff = self.sdiff(keys, *args)
- self._db[dest] = diff
+ self._db[dest] = set(to_bytes(x) for x in diff)
return len(diff)
def sinter(self, keys, *args):
@@ -938,7 +936,7 @@ class FakeStrictRedis(object):
set named ``dest``. Returns the number of keys in the new set.
"""
intersect = self.sinter(keys, *args)
- self._db[dest] = intersect
+ self._db[dest] = set(to_bytes(x) for x in intersect)
return len(intersect)
def sismember(self, name, value):
@@ -993,7 +991,7 @@ class FakeStrictRedis(object):
set named ``dest``. Returns the number of keys in the new set.
"""
union = self.sunion(keys, *args)
- self._db[dest] = union
+ self._db[dest] = set(to_bytes(x) for x in union)
return len(union)
def _get_zelement_range_filter_func(self, min_val, max_val):
@@ -1620,6 +1618,14 @@ class FakeRedis(FakeStrictRedis):
raise redis.RedisError("ZADD is missing kwargs param")
return super(FakeRedis, self).zadd(name, **pairs)
+ def ttl(self, name):
+ r = super(FakeRedis, self).ttl(name)
+ return r if r >= 0 else None
+
+ def pttl(self, name):
+ r = super(FakeRedis, self).pttl(name)
+ return r if r >= 0 else None
+
class FakePipeline(object):
"""Helper class for FakeStrictRedis to implement pipelines.
diff --git a/setup.py b/setup.py
index 4759ebc..c4c1b13 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ from setuptools import setup, find_packages
setup(
name='fakeredis',
- version='0.8.1',
+ version='0.8.2',
description="Fake implementation of redis API for testing purposes.",
long_description=open(os.path.join(os.path.dirname(__file__),
'README.rst')).read(),
diff --git a/test_fakeredis.py b/test_fakeredis.py
index 91049af..0fc76c3 100644
--- a/test_fakeredis.py
+++ b/test_fakeredis.py
@@ -95,6 +95,10 @@ class TestFakeStrictRedis(unittest.TestCase):
self.assertEqual(self.redis.set('foo', 'bar'), True)
self.assertEqual(self.redis.get('foo'), b'bar')
+ def test_set_None_value(self):
+ self.assertEqual(self.redis.set('foo', None), True)
+ self.assertEqual(self.redis.get('foo'), b'None')
+
def test_get_does_not_exist(self):
self.assertEqual(self.redis.get('foo'), None)
@@ -651,6 +655,10 @@ class TestFakeStrictRedis(unittest.TestCase):
self.assertEqual(self.redis.lrange('foo', 0, -1), [b'one'])
self.assertEqual(self.redis.lrange('bar', 0, -1), [b'two', b'one'])
+ # Catch instances where we store bytes and strings inconsistently
+ # and thus bar = ['two', b'one']
+ self.assertEqual(self.redis.lrem('bar', -1, 'two'), 1)
+
def test_rpoplpush_to_nonexistent_destination(self):
self.redis.rpush('foo', 'one')
self.assertEqual(self.redis.rpoplpush('foo', 'bar'), b'one')
@@ -711,6 +719,10 @@ class TestFakeStrictRedis(unittest.TestCase):
b'two')
self.assertEqual(self.redis.lrange('bar', 0, -1), [b'two'])
+ # Catch instances where we store bytes and strings inconsistently
+ # and thus bar = ['two']
+ self.assertEqual(self.redis.lrem('bar', -1, 'two'), 1)
+
@attr('slow')
def test_blocking_operations_when_empty(self):
self.assertEqual(self.redis.blpop(['foo'], timeout=1),
@@ -962,6 +974,11 @@ class TestFakeStrictRedis(unittest.TestCase):
self.redis.sadd('bar', 'member3')
self.assertEqual(self.redis.sdiffstore('baz', 'foo', 'bar'), 1)
+ # Catch instances where we store bytes and strings inconsistently
+ # and thus baz = {'member1', b'member1'}
+ self.redis.sadd('baz', 'member1')
+ self.assertEqual(self.redis.scard('baz'), 1)
+
def test_sinter(self):
self.redis.sadd('foo', 'member1')
self.redis.sadd('foo', 'member2')
@@ -978,6 +995,11 @@ class TestFakeStrictRedis(unittest.TestCase):
self.redis.sadd('bar', 'member3')
self.assertEqual(self.redis.sinterstore('baz', 'foo', 'bar'), 1)
+ # Catch instances where we store bytes and strings inconsistently
+ # and thus baz = {'member2', b'member2'}
+ self.redis.sadd('baz', 'member2')
+ self.assertEqual(self.redis.scard('baz'), 1)
+
def test_sismember(self):
self.assertEqual(self.redis.sismember('foo', 'member1'), False)
self.redis.sadd('foo', 'member1')
@@ -1039,6 +1061,11 @@ class TestFakeStrictRedis(unittest.TestCase):
self.assertEqual(self.redis.smembers('baz'),
set([b'member1', b'member2', b'member3']))
+ # Catch instances where we store bytes and strings inconsistently
+ # and thus baz = {b'member1', b'member2', b'member3', 'member3'}
+ self.redis.sadd('baz', 'member3')
+ self.assertEqual(self.redis.scard('baz'), 3)
+
def test_zadd(self):
self.redis.zadd('foo', four=4)
self.redis.zadd('foo', three=3)
@@ -2183,8 +2210,11 @@ class TestFakeStrictRedis(unittest.TestCase):
msg3 = q.get()
msg4 = q.get()
- bpatterns = [pattern.encode() for pattern in patterns]
- bpatterns.append(channel.encode())
+ if self.decode_responses:
+ bpatterns = patterns + [channel]
+ else:
+ bpatterns = [pattern.encode() for pattern in patterns]
+ bpatterns.append(channel.encode())
msg = msg.encode()
self.assertEqual(msg1['data'], msg)
self.assertIn(msg1['channel'], bpatterns)
@@ -2382,6 +2412,24 @@ class TestFakeStrictRedis(unittest.TestCase):
self.assertIn(b'key:17', results)
self.assertEqual(2, len(results))
+ def test_ttl_should_return_minus_one_for_non_expiring_key(self):
+ self.redis.set('foo', 'bar')
+ self.assertEqual(self.redis.get('foo'), b'bar')
+ self.assertEqual(self.redis.ttl('foo'), -1)
+
+ def test_ttl_should_return_minus_two_for_non_existent_key(self):
+ self.assertEqual(self.redis.get('foo'), None)
+ self.assertEqual(self.redis.ttl('foo'), -2)
+
+ def test_pttl_should_return_minus_one_for_non_expiring_key(self):
+ self.redis.set('foo', 'bar')
+ self.assertEqual(self.redis.get('foo'), b'bar')
+ self.assertEqual(self.redis.pttl('foo'), -1)
+
+ def test_pttl_should_return_minus_two_for_non_existent_key(self):
+ self.assertEqual(self.redis.get('foo'), None)
+ self.assertEqual(self.redis.pttl('foo'), -2)
+
class TestFakeRedis(unittest.TestCase):
decode_responses = False
@@ -2653,10 +2701,10 @@ class TestFakeRedis(unittest.TestCase):
self.assertEqual(self.redis.ttl('foo'), 1)
self.redis.expire('foo', 2)
self.assertEqual(self.redis.ttl('foo'), 2)
- long_long_c_max = 100000000000
# See https://github.com/antirez/redis/blob/unstable/src/db.c#L632
- self.redis.expire('foo', long_long_c_max)
- self.assertEqual(self.redis.ttl('foo'), long_long_c_max)
+ ttl = 1000000000
+ self.redis.expire('foo', ttl)
+ self.assertEqual(self.redis.ttl('foo'), ttl)
def test_pttl_should_return_none_for_non_expiring_key(self):
self.redis.set('foo', 'bar')
@@ -2670,12 +2718,12 @@ class TestFakeRedis(unittest.TestCase):
self.assertInRange(self.redis.pttl('foo'), 1000 - d, 1000)
self.redis.expire('foo', 2)
self.assertInRange(self.redis.pttl('foo'), 2000 - d, 2000)
- long_long_c_max = 100000000000
+ ttl = 1000000000
# See https://github.com/antirez/redis/blob/unstable/src/db.c#L632
- self.redis.expire('foo', long_long_c_max)
+ self.redis.expire('foo', ttl)
self.assertInRange(self.redis.pttl('foo'),
- long_long_c_max * 1000 - d,
- long_long_c_max * 1000)
+ ttl * 1000 - d,
+ ttl * 1000)
def test_ttls_should_always_be_long(self):
self.redis.set('foo', 'bar')
@@ -2700,7 +2748,7 @@ class DecodeMixin(object):
super(DecodeMixin, self).assertEqual(a, fakeredis._decode(b), msg)
def assertIn(self, member, container, msg=None):
- super(DecodeMixin, self).assertIn(fakeredis._decode(member), fakeredis._decode(container))
+ super(DecodeMixin, self).assertIn(fakeredis._decode(member), container)
def assertItemsEqual(self, a, b):
super(DecodeMixin, self).assertItemsEqual(a, fakeredis._decode(b))
@@ -2772,6 +2820,13 @@ class TestInitArgs(unittest.TestCase):
'redis://username:password@localhost:6379/a')
self.assertEqual(db._db_num, 0)
+ def test_can_pass_through_extra_args(self):
+ db = fakeredis.FakeStrictRedis.from_url(
+ 'redis://username:password@localhost:6379/0',
+ decode_responses=True)
+ db.set('foo', 'bar')
+ self.assertEqual(db.get('foo'), 'bar')
+
class TestImportation(unittest.TestCase):
def test_searches_for_c_stdlib_and_raises_if_missing(self):
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-fakeredis.git
More information about the Python-modules-commits
mailing list