Commit 39c8c0f2 authored by Ludovico Magnocavallo's avatar Ludovico Magnocavallo
Browse files

fix trailing cr+nl in values

parent 88e85998
...@@ -32,17 +32,18 @@ class Redis(object): ...@@ -32,17 +32,18 @@ class Redis(object):
"""The main Redis client. """The main Redis client.
""" """
def __init__(self, host=None, port=None, timeout=None): def __init__(self, host=None, port=None, timeout=None, db=None):
self.host = host or 'localhost' self.host = host or 'localhost'
self.port = port or 6379 self.port = port or 6379
if timeout: if timeout:
socket.setdefaulttimeout(timeout) socket.setdefaulttimeout(timeout)
self._sock = None self._sock = None
self._fp = None self._fp = None
self.db = db
def _write(self, s): def _write(self, s):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.connect() >>> r.connect()
>>> r._sock.close() >>> r._sock.close()
>>> try: >>> try:
...@@ -76,7 +77,7 @@ class Redis(object): ...@@ -76,7 +77,7 @@ class Redis(object):
def ping(self): def ping(self):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.ping() >>> r.ping()
'PONG' 'PONG'
>>> >>>
...@@ -87,7 +88,7 @@ class Redis(object): ...@@ -87,7 +88,7 @@ class Redis(object):
def set(self, name, value, preserve=False): def set(self, name, value, preserve=False):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.set('a', 'pippo') >>> r.set('a', 'pippo')
'OK' 'OK'
>>> try: >>> try:
...@@ -118,8 +119,8 @@ class Redis(object): ...@@ -118,8 +119,8 @@ class Redis(object):
def get(self, name): def get(self, name):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.set('a', 'pippo'), r.set('b', 15), r.set('c', '\\r\\naaa\\nbbb\\r\\ncccc\\nddd\\r\\n'), r.set('d', '\\r\\n') >>> r.set('a', 'pippo'), r.set('b', 15), r.set('c', ' \\r\\naaa\\nbbb\\r\\ncccc\\nddd\\r\\n '), r.set('d', '\\r\\n')
('OK', 'OK', 'OK', 'OK') ('OK', 'OK', 'OK', 'OK')
>>> r.get('a') >>> r.get('a')
'pippo' 'pippo'
...@@ -130,9 +131,9 @@ class Redis(object): ...@@ -130,9 +131,9 @@ class Redis(object):
>>> r.get('b') >>> r.get('b')
'15' '15'
>>> r.get('c') >>> r.get('c')
'\\r\\naaa\\nbbb\\r\\ncccc\\nddd\\r\\n' ' \\r\\naaa\\nbbb\\r\\ncccc\\nddd\\r\\n '
>>> r.get('c') >>> r.get('c')
'\\r\\naaa\\nbbb\\r\\ncccc\\nddd\\r\\n' ' \\r\\naaa\\nbbb\\r\\ncccc\\nddd\\r\\n '
>>> r.get('ajhsd') >>> r.get('ajhsd')
>>> >>>
""" """
...@@ -142,7 +143,7 @@ class Redis(object): ...@@ -142,7 +143,7 @@ class Redis(object):
def mget(self, *args): def mget(self, *args):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.set('a', 'pippo'), r.set('b', 15), r.set('c', '\\r\\naaa\\nbbb\\r\\ncccc\\nddd\\r\\n'), r.set('d', '\\r\\n') >>> r.set('a', 'pippo'), r.set('b', 15), r.set('c', '\\r\\naaa\\nbbb\\r\\ncccc\\nddd\\r\\n'), r.set('d', '\\r\\n')
('OK', 'OK', 'OK', 'OK') ('OK', 'OK', 'OK', 'OK')
>>> r.mget('a', 'b', 'c', 'd') >>> r.mget('a', 'b', 'c', 'd')
...@@ -155,7 +156,7 @@ class Redis(object): ...@@ -155,7 +156,7 @@ class Redis(object):
def incr(self, name, amount=1): def incr(self, name, amount=1):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('a') >>> r.delete('a')
1 1
>>> r.incr('a') >>> r.incr('a')
...@@ -175,7 +176,7 @@ class Redis(object): ...@@ -175,7 +176,7 @@ class Redis(object):
def decr(self, name, amount=1): def decr(self, name, amount=1):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> if r.get('a'): >>> if r.get('a'):
... r.delete('a') ... r.delete('a')
... else: ... else:
...@@ -198,7 +199,7 @@ class Redis(object): ...@@ -198,7 +199,7 @@ class Redis(object):
def exists(self, name): def exists(self, name):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.exists('dsjhfksjdhfkdsjfh') >>> r.exists('dsjhfksjdhfkdsjfh')
0 0
>>> r.set('a', 'a') >>> r.set('a', 'a')
...@@ -213,7 +214,7 @@ class Redis(object): ...@@ -213,7 +214,7 @@ class Redis(object):
def delete(self, name): def delete(self, name):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('dsjhfksjdhfkdsjfh') >>> r.delete('dsjhfksjdhfkdsjfh')
0 0
>>> r.set('a', 'a') >>> r.set('a', 'a')
...@@ -240,7 +241,7 @@ class Redis(object): ...@@ -240,7 +241,7 @@ class Redis(object):
def keys(self, pattern): def keys(self, pattern):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.flush() >>> r.flush()
'OK' 'OK'
>>> r.set('a', 'a') >>> r.set('a', 'a')
...@@ -263,7 +264,7 @@ class Redis(object): ...@@ -263,7 +264,7 @@ class Redis(object):
def randomkey(self): def randomkey(self):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.set('a', 'a') >>> r.set('a', 'a')
'OK' 'OK'
>>> isinstance(r.randomkey(), str) >>> isinstance(r.randomkey(), str)
...@@ -277,7 +278,7 @@ class Redis(object): ...@@ -277,7 +278,7 @@ class Redis(object):
def rename(self, src, dst, preserve=False): def rename(self, src, dst, preserve=False):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> try: >>> try:
... r.rename('a', 'a') ... r.rename('a', 'a')
... except ResponseError, e: ... except ResponseError, e:
...@@ -302,11 +303,11 @@ class Redis(object): ...@@ -302,11 +303,11 @@ class Redis(object):
return self.get_response() return self.get_response()
else: else:
self._write('RENAME %s %s\r\n' % (src, dst)) self._write('RENAME %s %s\r\n' % (src, dst))
return self.get_response().strip() return self.get_response() #.strip()
def push(self, name, value, tail=False): def push(self, name, value, tail=False):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('l') >>> r.delete('l')
1 1
>>> r.push('l', 'a') >>> r.push('l', 'a')
...@@ -333,7 +334,7 @@ class Redis(object): ...@@ -333,7 +334,7 @@ class Redis(object):
def llen(self, name): def llen(self, name):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('l') >>> r.delete('l')
1 1
>>> r.push('l', 'a') >>> r.push('l', 'a')
...@@ -352,7 +353,7 @@ class Redis(object): ...@@ -352,7 +353,7 @@ class Redis(object):
def lrange(self, name, start, end): def lrange(self, name, start, end):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('l') >>> r.delete('l')
1 1
>>> r.lrange('l', 0, 1) >>> r.lrange('l', 0, 1)
...@@ -379,7 +380,7 @@ class Redis(object): ...@@ -379,7 +380,7 @@ class Redis(object):
def ltrim(self, name, start, end): def ltrim(self, name, start, end):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('l') >>> r.delete('l')
1 1
>>> try: >>> try:
...@@ -409,7 +410,7 @@ class Redis(object): ...@@ -409,7 +410,7 @@ class Redis(object):
def lindex(self, name, index): def lindex(self, name, index):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> res = r.delete('l') >>> res = r.delete('l')
>>> r.lindex('l', 0) >>> r.lindex('l', 0)
>>> r.push('l', 'aaa') >>> r.push('l', 'aaa')
...@@ -431,7 +432,7 @@ class Redis(object): ...@@ -431,7 +432,7 @@ class Redis(object):
def pop(self, name, tail=False): def pop(self, name, tail=False):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('l') >>> r.delete('l')
1 1
>>> r.pop('l') >>> r.pop('l')
...@@ -461,7 +462,7 @@ class Redis(object): ...@@ -461,7 +462,7 @@ class Redis(object):
def lset(self, name, index, value): def lset(self, name, index, value):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('l') >>> r.delete('l')
1 1
>>> try: >>> try:
...@@ -494,7 +495,7 @@ class Redis(object): ...@@ -494,7 +495,7 @@ class Redis(object):
def lrem(self, name, value, num=0): def lrem(self, name, value, num=0):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('l') >>> r.delete('l')
1 1
>>> r.push('l', 'aaa') >>> r.push('l', 'aaa')
...@@ -531,7 +532,7 @@ class Redis(object): ...@@ -531,7 +532,7 @@ class Redis(object):
def sort(self, name, by=None, get=None, start=None, num=None, desc=False, alpha=False): def sort(self, name, by=None, get=None, start=None, num=None, desc=False, alpha=False):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('l') >>> r.delete('l')
1 1
>>> r.push('l', 'ccc') >>> r.push('l', 'ccc')
...@@ -592,7 +593,7 @@ class Redis(object): ...@@ -592,7 +593,7 @@ class Redis(object):
def sadd(self, name, value): def sadd(self, name, value):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> res = r.delete('s') >>> res = r.delete('s')
>>> r.sadd('s', 'a') >>> r.sadd('s', 'a')
1 1
...@@ -613,7 +614,7 @@ class Redis(object): ...@@ -613,7 +614,7 @@ class Redis(object):
def srem(self, name, value): def srem(self, name, value):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('s') >>> r.delete('s')
1 1
>>> r.srem('s', 'aaa') >>> r.srem('s', 'aaa')
...@@ -639,7 +640,7 @@ class Redis(object): ...@@ -639,7 +640,7 @@ class Redis(object):
def sismember(self, name, value): def sismember(self, name, value):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('s') >>> r.delete('s')
1 1
>>> r.sismember('s', 'b') >>> r.sismember('s', 'b')
...@@ -665,7 +666,7 @@ class Redis(object): ...@@ -665,7 +666,7 @@ class Redis(object):
def sinter(self, *args): def sinter(self, *args):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> res = r.delete('s1') >>> res = r.delete('s1')
>>> res = r.delete('s2') >>> res = r.delete('s2')
>>> res = r.delete('s3') >>> res = r.delete('s3')
...@@ -697,7 +698,7 @@ class Redis(object): ...@@ -697,7 +698,7 @@ class Redis(object):
def sinterstore(self, dest, *args): def sinterstore(self, dest, *args):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> res = r.delete('s1') >>> res = r.delete('s1')
>>> res = r.delete('s2') >>> res = r.delete('s2')
>>> res = r.delete('s3') >>> res = r.delete('s3')
...@@ -721,7 +722,7 @@ class Redis(object): ...@@ -721,7 +722,7 @@ class Redis(object):
def smembers(self, name): def smembers(self, name):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('s') >>> r.delete('s')
1 1
>>> r.sadd('s', 'a') >>> r.sadd('s', 'a')
...@@ -743,7 +744,7 @@ class Redis(object): ...@@ -743,7 +744,7 @@ class Redis(object):
def select(self, db): def select(self, db):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.delete('a') >>> r.delete('a')
1 1
>>> r.select(1) >>> r.select(1)
...@@ -761,28 +762,26 @@ class Redis(object): ...@@ -761,28 +762,26 @@ class Redis(object):
def move(self, name, db): def move(self, name, db):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.select(0)
'OK'
>>> r.set('a', 'a') >>> r.set('a', 'a')
'OK' 'OK'
>>> r.select(1) >>> r.select(10)
'OK' 'OK'
>>> if r.get('a'): >>> if r.get('a'):
... r.delete('a') ... r.delete('a')
... else: ... else:
... print 1 ... print 1
1 1
>>> r.select(0) >>> r.select(9)
'OK' 'OK'
>>> r.move('a', 1) >>> r.move('a', 10)
1 1
>>> r.get('a') >>> r.get('a')
>>> r.select(1) >>> r.select(10)
'OK' 'OK'
>>> r.get('a') >>> r.get('a')
'a' 'a'
>>> r.select(0) >>> r.select(9)
'OK' 'OK'
>>> >>>
""" """
...@@ -792,7 +791,7 @@ class Redis(object): ...@@ -792,7 +791,7 @@ class Redis(object):
def save(self, background=False): def save(self, background=False):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.save() >>> r.save()
'OK' 'OK'
>>> try: >>> try:
...@@ -813,7 +812,7 @@ class Redis(object): ...@@ -813,7 +812,7 @@ class Redis(object):
def lastsave(self): def lastsave(self):
""" """
>>> import time >>> import time
>>> r = Redis() >>> r = Redis(db=9)
>>> t = int(time.time()) >>> t = int(time.time())
>>> r.save() >>> r.save()
'OK' 'OK'
...@@ -827,11 +826,10 @@ class Redis(object): ...@@ -827,11 +826,10 @@ class Redis(object):
def flush(self, all_dbs=False): def flush(self, all_dbs=False):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.flush() >>> r.flush()
'OK' 'OK'
>>> r.flush(all_dbs=True) >>> # r.flush(all_dbs=True)
'OK'
>>> >>>
""" """
self.connect() self.connect()
...@@ -840,7 +838,7 @@ class Redis(object): ...@@ -840,7 +838,7 @@ class Redis(object):
def info(self): def info(self):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> info = r.info() >>> info = r.info()
>>> info and isinstance(info, dict) >>> info and isinstance(info, dict)
True True
...@@ -889,17 +887,13 @@ class Redis(object): ...@@ -889,17 +887,13 @@ class Redis(object):
if c != '$': if c != '$':
raise InvalidResponse("Unkown response prefix for '%s'" % data) raise InvalidResponse("Unkown response prefix for '%s'" % data)
buf = [] buf = []
while i > 0: while True:
data = self._read() data = self._read()
i -= len(data) i -= len(data)
if len(data) > i:
# we got the ending crlf
data = data.rstrip()
buf.append(data) buf.append(data)
if i == 0: if i < 0:
# the data has a trailing crlf embedded, let's restore it break
buf.append(self._read()) return ''.join(buf)[:-2]
return ''.join(buf)
def disconnect(self): def disconnect(self):
if isinstance(self._sock, socket.socket): if isinstance(self._sock, socket.socket):
...@@ -912,10 +906,11 @@ class Redis(object): ...@@ -912,10 +906,11 @@ class Redis(object):
def connect(self): def connect(self):
""" """
>>> r = Redis() >>> r = Redis(db=9)
>>> r.connect() >>> r.connect()
>>> isinstance(r._sock, socket.socket) >>> isinstance(r._sock, socket.socket)
True True
>>> r.disconnect()
>>> >>>
""" """
if isinstance(self._sock, socket.socket): if isinstance(self._sock, socket.socket):
...@@ -928,7 +923,9 @@ class Redis(object): ...@@ -928,7 +923,9 @@ class Redis(object):
else: else:
self._sock = sock self._sock = sock
self._fp = self._sock.makefile('r') self._fp = self._sock.makefile('r')
if self.db:
self.select(self.db)
if __name__ == '__main__': if __name__ == '__main__':
import doctest import doctest
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment