From 7c710f6965f2aabc1b4846e2f9aaa186b25a1b43 Mon Sep 17 00:00:00 2001 From: Tim Cherry Date: Wed, 28 May 2014 17:39:13 -0700 Subject: [PATCH 1/4] done() callback, to support async request callback --- rediserver/net.py | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/rediserver/net.py b/rediserver/net.py index d5296c7..fd93956 100644 --- a/rediserver/net.py +++ b/rediserver/net.py @@ -77,34 +77,24 @@ def _parse_line(self): self.can_read = False self._process_data() + def _response_done(self, response): + resp = self.wfile.getvalue() + self.wfile = cStringIO.StringIO() + self.data = [] + self.push(resp) + self.close_when_done() + def _process_data(self): response = Response(self.wfile.write) - try: - cmd = InputParser(self.data).read_response() - self.server._callback(cmd, response, self) - if not response.dirty: - raise Exception("no response") - except Exception, e: - response.error(u"ERR: %s" % e) - raise - finally: - resp = self.wfile.getvalue() - self.wfile = cStringIO.StringIO() - self.data = [] - - # write the data out async; close_when_done actually - # causes handle_close to be called, and we unblock and - # enable reads again. - self.push(resp) - self.close_when_done() - + cmd = InputParser(self.data).read_response() + self.server._callback(cmd, response, self._response_done) class AsyncoreServer(asyncore.dispatcher): protocol_handler = RedisProtocolHandler allow_address_reuse = True backlog = 1024 - def __init__(self, ip, port, callback, ): + def __init__(self, ip, port, callback,): self.ip = ip self.port = port self._callback = callback From 24bfb9a3aa7cd89d4e8ce2b9ce6af359b052b564 Mon Sep 17 00:00:00 2001 From: Tim Cherry Date: Thu, 29 May 2014 11:43:36 -0700 Subject: [PATCH 2/4] adding select_timeout option --- rediserver/net.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rediserver/net.py b/rediserver/net.py index fd93956..c767303 100644 --- a/rediserver/net.py +++ b/rediserver/net.py @@ -94,10 +94,11 @@ class AsyncoreServer(asyncore.dispatcher): allow_address_reuse = True backlog = 1024 - def __init__(self, ip, port, callback,): + def __init__(self, ip, port, callback, select_timeout=30.0): self.ip = ip self.port = port self._callback = callback + self.select_timeout = select_timeout asyncore.dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) if self.allow_address_reuse: @@ -107,7 +108,7 @@ def __init__(self, ip, port, callback,): def serve_forever(self): """Starts the asyncore IO loop.""" - asyncore.loop() + asyncore.loop(timeout=self.select_timeout) def handle_accept(self): try: From 68e8eae4c153667bd897dd2f8e6c7720efc0c2ee Mon Sep 17 00:00:00 2001 From: Tim Cherry Date: Thu, 29 May 2014 13:55:08 -0700 Subject: [PATCH 3/4] removing long_description to get build working --- setup.py | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.py b/setup.py index f911566..075016e 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,6 @@ url="https://github.com/ninowalker/py-redis-server", license = "BSD", packages=['rediserver'], - long_description=open('README.md').read(), install_requires=['redis>=2.4.1'], setup_requires=['nose>=1.0', 'coverage', 'nosexcover'], test_suite = 'nose.collector', From 8647b310fc01d129a0b3550a3884f1f1d360e897 Mon Sep 17 00:00:00 2001 From: Tim Cherry Date: Thu, 5 Jun 2014 11:28:32 -0700 Subject: [PATCH 4/4] fixing copy/paste bug --- rediserver/__init__.py | 2 +- rediserver/protocol.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rediserver/__init__.py b/rediserver/__init__.py index 5f284fc..e62b38a 100644 --- a/rediserver/__init__.py +++ b/rediserver/__init__.py @@ -1,2 +1,2 @@ -__version__ = "0.0.1" +__version__ = "0.0.2" diff --git a/rediserver/protocol.py b/rediserver/protocol.py index 92e621c..2b1732e 100644 --- a/rediserver/protocol.py +++ b/rediserver/protocol.py @@ -41,7 +41,7 @@ def encode(self, value): elif isinstance(value, bool): self._write(':%d\r\n' % (1 if value else 0)) else: - self._bulk(v) + self._bulk(value) def status(self, msg="OK"): """Send a status."""