Skip to content

Commit a02fcd0

Browse files
author
Jeremiah Porten
committed
Merge branch 'release/2.9.0.12'
2 parents 45c0099 + f871d02 commit a02fcd0

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
lines changed

CHANGES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
Version 2.9.0.12
2+
- Support: `dbsize`
3+
14
Version 2.9.0.11
25
- Support: `scan_iter`, `sscan_iter`, `zscan_iter`, `hscan_iter`
36

mockredis/client.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import re
99
import sys
1010
import time
11+
import fnmatch
1112

1213
from mockredis.clock import SystemClock
1314
from mockredis.lock import MockRedisLock
@@ -122,13 +123,20 @@ def type(self, key):
122123

123124
def keys(self, pattern='*'):
124125
"""Emulate keys."""
125-
# Make a regex out of pattern. The only special matching character we look for is '*'
126-
regex = re.compile(b'^' + re.escape(self._encode(pattern)).replace(b'\\*', b'.*') + b'$')
126+
# making sure the pattern is unicode/str.
127+
try:
128+
pattern = pattern.decode('utf-8')
129+
# This throws an AttributeError in python 3, or an
130+
# UnicodeEncodeError in python 2
131+
except (AttributeError, UnicodeEncodeError):
132+
pass
127133

128-
# Find every key that matches the pattern
129-
result = [key for key in self.redis.keys() if regex.match(key)]
134+
# Make regex out of glob styled pattern.
135+
regex = fnmatch.translate(pattern)
136+
regex = re.compile(re.sub(r'(^|[^\\])\.', r'\1[^/]', regex))
130137

131-
return result
138+
# Find every key that matches the pattern
139+
return [key for key in self.redis.keys() if regex.match(key.decode('utf-8'))]
132140

133141
def delete(self, *keys):
134142
"""Emulate delete."""
@@ -247,6 +255,9 @@ def _rename(self, old_key, new_key, nx=False):
247255
return True
248256
return False
249257

258+
def dbsize(self):
259+
return len(self.redis.keys())
260+
250261
# String Functions #
251262

252263
def get(self, key):

mockredis/tests/test_redis.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ def test_keys_unicode(self):
199199
self.redis.set(key, "bar")
200200
eq_([key_as_utf8], self.redis.keys("*"))
201201
eq_([key_as_utf8], self.redis.keys("eat*"))
202+
eq_([key_as_utf8], self.redis.keys("[ea]at * n?[a-z]"))
202203

203204
unicode_prefix = b'eat \xf0\x9f\x8d\xb0*'.decode('utf-8')
204205
eq_([key_as_utf8], self.redis.keys(unicode_prefix))
@@ -245,3 +246,9 @@ def test_renamenx(self):
245246
eq_(b"bar2", self.redis.get("foo2"))
246247
eq_(self.redis.renamenx("foo", "foo3"), 1)
247248
eq_(b"bar", self.redis.get("foo3"))
249+
250+
def test_dbsize(self):
251+
self.redis["foo"] = "bar"
252+
eq_(1, self.redis.dbsize())
253+
del self.redis["foo"]
254+
eq_(0, self.redis.dbsize())

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from setuptools import setup, find_packages
44

55
# Match releases to redis-py versions
6-
__version__ = '2.9.0.11'
6+
__version__ = '2.9.0.12'
77

88
# Jenkins will replace __build__ with a unique value.
99
__build__ = ''

0 commit comments

Comments
 (0)