Skip to content

Commit 41ed613

Browse files
authored
feat: Expose incr/decr default and time protocol arguments in client class (#243)
The protocol implements `default` and `time` arguments, but those are not exposed in the client class implementation. This adds those fields.
1 parent bf56314 commit 41ed613

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

bmemcached/client/distributed.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,21 +204,25 @@ def cas(self, key, value, cas, time=0, compress_level=-1):
204204
server = self._get_server(key)
205205
return server.cas(key, value, cas, time, compress_level)
206206

207-
def incr(self, key, value):
207+
def incr(self, key, value, default=0, time=1000000):
208208
"""
209209
Increment a key, if it exists, returns it's actual value, if it don't, return 0.
210210
211211
:param key: Key's name
212212
:type key: six.string_types
213213
:param value: Number to be incremented
214214
:type value: int
215+
:param default: If key not set, initialize to this value
216+
:type default: int
217+
:param time: Time in seconds that your key will expire.
218+
:type time: int
215219
:return: Actual value of the key on server
216220
:rtype: int
217221
"""
218222
server = self._get_server(key)
219-
return server.incr(key, value)
223+
return server.incr(key, value, default=default, time=time)
220224

221-
def decr(self, key, value):
225+
def decr(self, key, value, default=0, time=1000000):
222226
"""
223227
Decrement a key, if it exists, returns it's actual value, if it don't, return 0.
224228
Minimum value of decrement return is 0.
@@ -227,8 +231,12 @@ def decr(self, key, value):
227231
:type key: six.string_types
228232
:param value: Number to be decremented
229233
:type value: int
234+
:param default: If key not set, initialize to this value
235+
:type default: int
236+
:param time: Time in seconds that your key will expire.
237+
:type time: int
230238
:return: Actual value of the key on server
231239
:rtype: int
232240
"""
233241
server = self._get_server(key)
234-
return server.decr(key, value)
242+
return server.decr(key, value, default=default, time=time)

bmemcached/client/replicating.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,24 +232,28 @@ def delete_multi(self, keys):
232232

233233
return all(returns)
234234

235-
def incr(self, key, value):
235+
def incr(self, key, value, default=0, time=1000000):
236236
"""
237237
Increment a key, if it exists, returns it's actual value, if it don't, return 0.
238238
239239
:param key: Key's name
240240
:type key: six.string_types
241241
:param value: Number to be incremented
242242
:type value: int
243+
:param default: If key not set, initialize to this value
244+
:type default: int
245+
:param time: Time in seconds that your key will expire.
246+
:type time: int
243247
:return: Actual value of the key on server
244248
:rtype: int
245249
"""
246250
returns = []
247251
for server in self.servers:
248-
returns.append(server.incr(key, value))
252+
returns.append(server.incr(key, value, default=default, time=time))
249253

250254
return returns[0]
251255

252-
def decr(self, key, value):
256+
def decr(self, key, value, default=0, time=1000000):
253257
"""
254258
Decrement a key, if it exists, returns it's actual value, if it don't, return 0.
255259
Minimum value of decrement return is 0.
@@ -258,11 +262,15 @@ def decr(self, key, value):
258262
:type key: six.string_types
259263
:param value: Number to be decremented
260264
:type value: int
265+
:param default: If key not set, initialize to this value
266+
:type default: int
267+
:param time: Time in seconds that your key will expire.
268+
:type time: int
261269
:return: Actual value of the key on server
262270
:rtype: int
263271
"""
264272
returns = []
265273
for server in self.servers:
266-
returns.append(server.decr(key, value))
274+
returns.append(server.decr(key, value, default=default, time=time))
267275

268276
return returns[0]

test/test_simple_functions.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,18 @@ def testIncrement(self):
208208
self.assertEqual(0, self.client.incr('test_key', 1))
209209
self.assertEqual(1, self.client.incr('test_key', 1))
210210

211+
def testIncrementInitialize(self):
212+
self.assertEqual(10, self.client.incr('test_key', 1, default=10))
213+
self.assertEqual(11, self.client.incr('test_key', 1, default=10))
214+
211215
def testDecrement(self):
212216
self.assertEqual(0, self.client.decr('test_key', 1))
213217
self.assertEqual(0, self.client.decr('test_key', 1))
214218

219+
def testDecrementInitialize(self):
220+
self.assertEqual(10, self.client.decr('test_key', 1, default=10))
221+
self.assertEqual(9, self.client.decr('test_key', 1, default=10))
222+
215223
def testFlush(self):
216224
self.client.set('test_key', 'test')
217225
self.assertTrue(self.client.flush_all())

0 commit comments

Comments
 (0)