[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