-----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

Reply via email to