Fix weird with Client.behaviors.update.
This would manifest itself in pylibmc setting seemingly random (but consistently so) values for the updated behaviors. Not sure how or why this works when the previous code didn't.
This commit is contained in:
parent
0f8c1e442c
commit
a4e7e2cd75
10
pylibmc.py
10
pylibmc.py
@ -57,9 +57,9 @@ class BehaviorDict(dict):
|
|||||||
super(BehaviorDict, self).__setitem__(name, value)
|
super(BehaviorDict, self).__setitem__(name, value)
|
||||||
self.client.set_behaviors({name: value})
|
self.client.set_behaviors({name: value})
|
||||||
|
|
||||||
def update(self, *args, **kwds):
|
def update(self, d):
|
||||||
super(BehaviorDict, self).update(*args, **kwds)
|
super(BehaviorDict, self).update(d)
|
||||||
self.client.set_behaviors(self.copy())
|
self.client.set_behaviors(d.copy())
|
||||||
|
|
||||||
class Client(_pylibmc.client):
|
class Client(_pylibmc.client):
|
||||||
def __init__(self, servers, binary=False):
|
def __init__(self, servers, binary=False):
|
||||||
@ -115,9 +115,9 @@ class Client(_pylibmc.client):
|
|||||||
This also happens for `distribution`.
|
This also happens for `distribution`.
|
||||||
"""
|
"""
|
||||||
behaviors = behaviors.copy()
|
behaviors = behaviors.copy()
|
||||||
if behaviors.get("hash", None) in hashers:
|
if behaviors.get("hash") is not None:
|
||||||
behaviors["hash"] = hashers[behaviors["hash"]]
|
behaviors["hash"] = hashers[behaviors["hash"]]
|
||||||
if behaviors.get("distribution") in distributions:
|
if behaviors.get("distribution") is not None:
|
||||||
behaviors["distribution"] = distributions[behaviors["distribution"]]
|
behaviors["distribution"] = distributions[behaviors["distribution"]]
|
||||||
return super(Client, self).set_behaviors(behaviors)
|
return super(Client, self).set_behaviors(behaviors)
|
||||||
|
|
||||||
|
10
tests.py
10
tests.py
@ -1,9 +1,11 @@
|
|||||||
"""Tests. They want YOU!!
|
"""Tests. They want YOU!!
|
||||||
|
|
||||||
|
|
||||||
Basic functionality.
|
Basic functionality.
|
||||||
>>> _pylibmc.__version__ == pylibmc.__version__
|
>>> _pylibmc.__version__ == pylibmc.__version__
|
||||||
True
|
True
|
||||||
>>> c = _pylibmc.client([test_server])
|
>>> c = _pylibmc.client([test_server])
|
||||||
|
>>> c.get("hello")
|
||||||
>>> c.set("test_key", 123)
|
>>> c.set("test_key", 123)
|
||||||
True
|
True
|
||||||
>>> c.get("test_key")
|
>>> c.get("test_key")
|
||||||
@ -177,6 +179,14 @@ Empty server lists are bad for your health.
|
|||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
MemcachedError: empty server list
|
MemcachedError: empty server list
|
||||||
|
|
||||||
|
Python-wrapped behaviors dict
|
||||||
|
>>> pc = pylibmc.Client(["%s:%d" % test_server[1:]])
|
||||||
|
>>> (pc.behaviors["hash"], pc.behaviors["distribution"])
|
||||||
|
('default', 'modula')
|
||||||
|
>>> pc.behaviors.update({"hash": "fnv1a_32", "distribution": "consistent"})
|
||||||
|
>>> (pc.behaviors["hash"], pc.behaviors["distribution"])
|
||||||
|
('fnv1a_32', 'consistent')
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Used to test pickling.
|
# Used to test pickling.
|
||||||
|
Reference in New Issue
Block a user