Skip to content

Commit

Permalink
Initial support for Increment.
Browse files Browse the repository at this point in the history
  • Loading branch information
Toru Maesaka committed Apr 7, 2011
1 parent fe3e7e4 commit f07e779
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 1 deletion.
19 changes: 19 additions & 0 deletions kyototycoon/kt_http.py
Expand Up @@ -121,6 +121,25 @@ def append(self, key, value, expire):
body = rv.read()
return rv.status == 200

def increment(self, key, delta, expire):
if key is None: return False

key = key.encode('UTF-8')
key = urllib.quote(key)
delta = int(delta)

request_body = 'key\t%s\nnum\t%d\n' % (key, delta)
self.conn.request('POST', '/rpc/increment', body=request_body,
headers=KT_HTTP_HEADER)

res = self.conn.getresponse()
body = res.read()

if res.status != 200:
return None

return int(self._tsv_to_dict(body)['num'])

def report(self):
self.conn.request('GET', '/rpc/report')
res = self.conn.getresponse()
Expand Down
3 changes: 3 additions & 0 deletions kyototycoon/kyototycoon.py
Expand Up @@ -55,6 +55,9 @@ def replace(self, key, value, expire=None):
def append(self, key, value, expire=None):
return self.core.append(key, value, expire)

def increment(self, key, delta, expire=None):
return self.core.increment(key, delta, expire)

def remove(self, key):
return self.core.remove(key)

Expand Down
1 change: 0 additions & 1 deletion tests/t_all.py
Expand Up @@ -25,4 +25,3 @@ def _run_all_tests():

if __name__ == '__main__':
unittest.main(defaultTest='_run_all_tests')
pass
15 changes: 15 additions & 0 deletions tests/t_simple.py
Expand Up @@ -68,6 +68,21 @@ def test_append(self):
self.assertEqual(self.kt_handle.get('key'), 'abcdefghi')
self.assertFalse(self.kt_handle.append(None, 'value'))

def test_increment(self):
self.assertTrue(self.kt_handle.clear())

key = 'incrkey'
self.assertEqual(self.kt_handle.increment(key, 10), 10)
self.assertEqual(self.kt_handle.increment(key, 10), 20)
self.assertEqual(self.kt_handle.increment(key, 10), 30)
self.assertEqual(self.kt_handle.increment(key, 10), 40)
self.assertEqual(self.kt_handle.increment(key, 10), 50)

# Incrementing against a non numeric value. Must fail.
self.assertTrue(self.kt_handle.set(key, 'foo'))
self.assertEqual(self.kt_handle.increment(key, 10), None)
self.assertEqual(self.kt_handle.increment(key, 10), None)

def test_add(self):
self.assertTrue(self.kt_handle.clear())
self.assertTrue(self.kt_handle.set('stewie', 'griffin'))
Expand Down

0 comments on commit f07e779

Please sign in to comment.