-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
Thanks for maintaining such an useful python module,
We @pokersource heavily use for the webservice interface of our pokerserver:
https://gna.org/projects/pokersource/
I noticed that memcache Client .get (and others methods) raise a
MemcachedStringEncodingError when given a None key, which have been
missleading when trying to fix the following bug in poker-network
https://gna.org/support/index.php?2135
You can reproduce the error with this command:
[EMAIL PROTECTED] ~/Desktop/python-memcached-1.43 $ python -c 'import
memcache; memcache.Client(["127.0.0.1:11211"]).get(None)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "memcache.py", line 653, in get
check_key(key)
File "memcache.py", line 935, in check_key
raise Client.MemcachedStringEncodingError, ("Keys must be str()'s, not"
memcache.MemcachedStringEncodingError: Keys must be str()'s, notunicode.
Convert your unicode strings using mystring.encode(charset)!
Feel free to apply the attached patch that raise a MemcachedKeyNoneError
error instead if supplied a None key, and MemcachedKeyTypeError if
supplied key is not a string.
Thanks in advance.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkkR1VQACgkQZmEdV9SHoe51dQCeL93hF6DBiLBnkZXoYyryllxe
m/IAmwSTAwBQBHGn3AMaOSZc6c4DZkJe
=Kk+k
-----END PGP SIGNATURE-----
diff -r 894616f32c5b memcache.py
--- a/memcache.py Wed Nov 05 17:46:59 2008 +0100
+++ b/memcache.py Wed Nov 05 18:13:12 2008 +0100
@@ -130,6 +130,10 @@
class MemcachedKeyCharacterError(MemcachedKeyError):
pass
class MemcachedStringEncodingError(Exception):
+ pass
+ class MemcachedKeyNoneError(KeyError):
+ pass
+ class MemcachedKeyTypeError(KeyError):
pass
def __init__(self, servers, debug=0, pickleProtocol=0,
@@ -928,13 +932,19 @@
"""Checks sanity of key. Fails if:
Key length is > SERVER_MAX_KEY_LENGTH (Raises MemcachedKeyLength).
Contains control characters (Raises MemcachedKeyCharacterError).
- Is not a string (Raises MemcachedStringEncodingError)
+ Is an unicode string (Raises MemcachedStringEncodingError)
+ Is not a string (Raises MemcachedKeyError)
+ Is None (Raises MemcachedKeyError)
"""
if type(key) == types.TupleType: key = key[1]
- if not isinstance(key, str):
+ if not key:
+ raise Client.MemcachedKeyNoneError, ("Key is None")
+ if isinstance(key, unicode):
raise Client.MemcachedStringEncodingError, ("Keys must be str()'s, not"
"unicode. Convert your unicode strings using "
"mystring.encode(charset)!")
+ if not isinstance(key, str):
+ raise Client.MemcachedKeyTypeError, ("Key must be str()'s")
if isinstance(key, basestring):
if len(key) + key_extra_len > SERVER_MAX_KEY_LENGTH:
diff -r 894616f32c5b test-memcache.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-memcache.py Wed Nov 05 18:13:12 2008 +0100
@@ -0,0 +1,12 @@
+import unittest
+import memcache
+
+class MemcacheTestCase(unittest.TestCase):
+ def test_check_key(self):
+ self.assertRaises(memcache.Client.MemcachedKeyNoneError,
memcache.check_key, None)
+ self.assertRaises(memcache.Client.MemcachedKeyTypeError,
memcache.check_key, 3)
+ self.assertRaises(memcache.Client.MemcachedStringEncodingError,
memcache.check_key, u'u')
+
+if __name__ == '__main__':
+ unittest.main()
+
_______________________________________________
Pokersource-users mailing list
[email protected]
https://mail.gna.org/listinfo/pokersource-users