diff --git a/bmemcached/client/distributed.py b/bmemcached/client/distributed.py index 66000e1..80cb242 100644 --- a/bmemcached/client/distributed.py +++ b/bmemcached/client/distributed.py @@ -204,7 +204,7 @@ def cas(self, key, value, cas, time=0, compress_level=-1): server = self._get_server(key) return server.cas(key, value, cas, time, compress_level) - def incr(self, key, value): + def incr(self, key, value, default=0, time=1000000): """ Increment a key, if it exists, returns it's actual value, if it don't, return 0. @@ -212,13 +212,17 @@ def incr(self, key, value): :type key: six.string_types :param value: Number to be incremented :type value: int + :param default: If key not set, initialize to this value + :type default: int + :param time: Time in seconds that your key will expire. + :type time: int :return: Actual value of the key on server :rtype: int """ server = self._get_server(key) - return server.incr(key, value) + return server.incr(key, value, default=default, time=time) - def decr(self, key, value): + def decr(self, key, value, default=0, time=1000000): """ Decrement a key, if it exists, returns it's actual value, if it don't, return 0. Minimum value of decrement return is 0. @@ -227,8 +231,12 @@ def decr(self, key, value): :type key: six.string_types :param value: Number to be decremented :type value: int + :param default: If key not set, initialize to this value + :type default: int + :param time: Time in seconds that your key will expire. + :type time: int :return: Actual value of the key on server :rtype: int """ server = self._get_server(key) - return server.decr(key, value) + return server.decr(key, value, default=default, time=time) diff --git a/bmemcached/client/replicating.py b/bmemcached/client/replicating.py index 5bd9e5c..2cd7ff7 100644 --- a/bmemcached/client/replicating.py +++ b/bmemcached/client/replicating.py @@ -232,7 +232,7 @@ def delete_multi(self, keys): return all(returns) - def incr(self, key, value): + def incr(self, key, value, default=0, time=1000000): """ Increment a key, if it exists, returns it's actual value, if it don't, return 0. @@ -240,16 +240,20 @@ def incr(self, key, value): :type key: six.string_types :param value: Number to be incremented :type value: int + :param default: If key not set, initialize to this value + :type default: int + :param time: Time in seconds that your key will expire. + :type time: int :return: Actual value of the key on server :rtype: int """ returns = [] for server in self.servers: - returns.append(server.incr(key, value)) + returns.append(server.incr(key, value, default=default, time=time)) return returns[0] - def decr(self, key, value): + def decr(self, key, value, default=0, time=1000000): """ Decrement a key, if it exists, returns it's actual value, if it don't, return 0. Minimum value of decrement return is 0. @@ -258,11 +262,15 @@ def decr(self, key, value): :type key: six.string_types :param value: Number to be decremented :type value: int + :param default: If key not set, initialize to this value + :type default: int + :param time: Time in seconds that your key will expire. + :type time: int :return: Actual value of the key on server :rtype: int """ returns = [] for server in self.servers: - returns.append(server.decr(key, value)) + returns.append(server.decr(key, value, default=default, time=time)) return returns[0] diff --git a/test/test_simple_functions.py b/test/test_simple_functions.py index c04c7e5..f69ce26 100644 --- a/test/test_simple_functions.py +++ b/test/test_simple_functions.py @@ -208,10 +208,18 @@ def testIncrement(self): self.assertEqual(0, self.client.incr('test_key', 1)) self.assertEqual(1, self.client.incr('test_key', 1)) + def testIncrementInitialize(self): + self.assertEqual(10, self.client.incr('test_key', 1, default=10)) + self.assertEqual(11, self.client.incr('test_key', 1, default=10)) + def testDecrement(self): self.assertEqual(0, self.client.decr('test_key', 1)) self.assertEqual(0, self.client.decr('test_key', 1)) + def testDecrementInitialize(self): + self.assertEqual(10, self.client.decr('test_key', 1, default=10)) + self.assertEqual(9, self.client.decr('test_key', 1, default=10)) + def testFlush(self): self.client.set('test_key', 'test') self.assertTrue(self.client.flush_all())