<br>
<br><font size=2 face="sans-serif">ok, thanks.. </font>
<br>
<br><font size=2 face="sans-serif">&nbsp;it thus an internal implementation
that cause this</font>
<br><font size=2 face="sans-serif">I was afraid spage had become a control
char, deprecating me :)</font>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br><font size=6 face="Tahoma"><b>I</b></font><font size=5 face="Tahoma">nternet</font>
<br><font size=1 face="sans-serif">xiaocong.hust@gmail.com - 08/29/2007
04:53 PM</font>
<br><font size=1 face="sans-serif">&nbsp;</font>
<br>
<p><font size=1 color=#800080 face="sans-serif">To: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Jacques ALES</font>
<p><font size=1 color=#800080 face="sans-serif">cc: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">philipn, memcached</font>
<p><font size=1 color=#800080 face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif"><b>Re: check_key</b></font>
<br>
<br><font size=3>when you set a key,for example key is 'key1'<br>
you will send a command 'set &nbsp;key1 0 0 1' to the server and server
will use space as separator,<br>
if your key is 'key 1',<br>
the command will be 'set key 1 0 0 1', <br>
that would cause an error<br>
</font>
<br><font size=3>2007/8/29, </font><a href=mailto:jacques.ales@bnpparibas.com><font size=3 color=blue><u>jacques.ales@bnpparibas.com</u></font></a><font size=3>
&lt;</font><a href=mailto:jacques.ales@bnpparibas.com><font size=3 color=blue><u>jacques.ales@bnpparibas.com
</u></font></a><font size=3>&gt;:</font>
<br><font size=2 face="sans-serif"><br>
I don't understand why space is considered as a control char,</font><font size=3>
</font><font size=2 face="sans-serif"><br>
while and del is not considered so.</font><font size=3> <br>
<br>
<br>
<br>
<br>
</font><font size=6 face="Tahoma"><b><br>
I</b></font><font size=5 face="Tahoma">nternet</font><font size=3> </font><font size=1 face="sans-serif"><br>
philipn@gmail.com@</font><a href=http://lists.danga.com/ target=_blank><font size=1 color=blue face="sans-serif"><u>lists.danga.com</u></font></a><font size=1 face="sans-serif">
- 08/28/2007 06:13 PM</font><font size=3> </font><font size=1 face="sans-serif"><br>
 </font><font size=3>&nbsp;</font>
<p><font size=1 color=#800080 face="sans-serif">Sent by: &nbsp; &nbsp;
&nbsp; &nbsp;</font><a href="mailto:memcached-bounces@lists.danga.com" target=_blank><font size=1 color=blue face="sans-serif"><u>memcached-bounces@lists.danga.com</u></font></a><font size=3>
</font>
<p><font size=1 color=#800080 face="sans-serif">To: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">memcached</font><font size=3>
</font>
<p><font size=1 color=#800080 face="sans-serif">cc: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=3> </font>
<p><font size=1 color=#800080 face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif"><b>Re: check_key</b></font><font size=3>
</font>
<p><font size=3><br>
</font><font size=2><tt><br>
&gt;&gt;&gt; c = 'hi there'<br>
&gt;&gt;&gt; space = c[2]<br>
&gt;&gt;&gt; ord(space)<br>
32<br>
<br>
The memcached protocol spec says no control chars. &nbsp;ord(c) &lt; 33
does that.<br>
<br>
That is the latest version of the client. &nbsp;You can grab new releases<br>
here: </tt></font><a href="http://www.tummy.com/Community/software/python-memcached/" target=_blank><font size=2 color=blue><tt><u>http://www.tummy.com/Community/software/python-memcached/</u></tt></font></a><font size=2><tt><br>
<br>
--Philip Neustrom<br>
<br>
On 8/28/07, </tt></font><a href=mailto:jacques.ales@bnpparibas.com target=_blank><font size=2 color=blue><tt><u>jacques.ales@bnpparibas.com</u></tt></font></a><font size=2><tt>
&lt;</tt></font><a href=mailto:jacques.ales@bnpparibas.com target=_blank><font size=2 color=blue><tt><u>
jacques.ales@bnpparibas.com</u></tt></font></a><font size=2><tt>&gt; wrote:<br>
&gt;<br>
&gt; hello<br>
&gt;<br>
&gt; I'm using the python wrapper for memcached in it's version<br>
&gt; __author__ &nbsp; &nbsp;= &quot;Evan Martin &lt;</tt></font><a href=mailto:martine@danga.com target=_blank><font size=2 color=blue><tt><u>martine@danga.com</u></tt></font></a><font size=2><tt>&gt;&quot;<br>
&gt; __version__ = &quot;1.36&quot;<br>
&gt; __copyright__ = &quot;Copyright (C) 2003 Danga Interactive&quot;<br>
&gt; __license__ &nbsp; = &quot;Python&quot;<br>
&gt;<br>
&gt; I can't figure out if this is the latest since the verion available
in the<br>
&gt; svn repository is<br>
&gt; </tt></font><a href=http://code.sixapart.com/svn/memcached/trunk/api/python/memcache.py target=_blank><font size=2 color=blue><tt><u>http://code.sixapart.com/svn/memcached/trunk/api/python/memcache.py
</u></tt></font></a><font size=2><tt><br>
&gt; __author__ &nbsp; &nbsp;= &quot;Evan Martin &lt;</tt></font><a href=mailto:martine@danga.com target=_blank><font size=2 color=blue><tt><u>martine@danga.com</u></tt></font></a><font size=2><tt>&gt;&quot;<br>
&gt; &nbsp;__version__ &nbsp; = &quot;1.2&quot;<br>
&gt; &nbsp;__copyright__ = &quot;Copyright (C) 2003 Danga Interactive&quot;<br>
&gt; &nbsp;__license__ &nbsp; = &quot;Python&quot;<br>
&gt;<br>
&gt;<br>
&gt; anyway, my concern is that version 1.36 checks key validity with the<br>
&gt; followinf function, that excludes spaces char (ascii32)<br>
&gt; as being 'control characters'.<br>
&gt;<br>
&gt; I was wondering is this is correct.<br>
&gt; and also wondering why other chars as DEL(ascii127) are not excluded<br>
&gt;<br>
&gt; thanks for your clues<br>
&gt;<br>
&gt; jacques<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; def check_key(key, key_extra_len=0):<br>
&gt; &nbsp; &nbsp; &quot;&quot;&quot;Checks sanity of key. &nbsp;Fails
if:<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; Key length is &gt; SERVER_MAX_KEY_LENGTH
(Raises MemcachedKeyLength).<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; Contains control characters &nbsp;(Raises
MemcachedKeyCharacterError).<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; Is not a string (Raises MemcachedStringEncodingError)<br>
&gt; &nbsp; &nbsp; &quot;&quot;&quot;<br>
&gt; &nbsp; &nbsp; if not isinstance(key, str):<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; raise Client.MemcachedStringEncodingError,
(&quot;Keys<br>
&gt; must be str()'s, not&quot;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;unicode.
&nbsp;Convert your unicode strings using &quot;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;mystring.encode(charset)!&quot;)<br>
&gt;<br>
&gt; &nbsp; &nbsp; if isinstance(key, basestring):<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; if len(key) + key_extra_len &gt; SERVER_MAX_KEY_LENGTH:<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;raise Client.MemcachedKeyLengthError,
(&quot;Key length is &gt; %s&quot;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;% SERVER_MAX_KEY_LENGTH)<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; for char in key:<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ord(char) &lt; 33:<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise Client.MemcachedKeyCharacterError,<br>
&gt; &quot;Control characters not allowed&quot;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; This message and any attachments (the &quot;message&quot;) is intended
solely for the<br>
&gt; addressees and is confidential.<br>
&gt; If you receive this message in error, please delete it and immediately<br>
&gt; notify the sender. Any use not in accord with<br>
&gt; its purpose, any dissemination or disclosure, either whole or partial,
is<br>
&gt; prohibited except formal approval.<br>
&gt; The internet can not guarantee the integrity of this message.<br>
&gt; BNP PARIBAS (and its subsidiaries) shall (will) not therefore be liable
for<br>
&gt; the message if modified.<br>
&gt; Do not print this message unless it is necessary, consider the environment.<br>
&gt; &nbsp;---------------------------------------------<br>
&gt; Ce message et toutes les pieces jointes (ci-apres le &quot;message&quot;)
sont etablis<br>
&gt; a l'intention exclusive de ses destinataires et sont confidentiels.
Si vous<br>
&gt; recevez ce<br>
&gt; message par erreur, merci de le detruire et d'en avertir immediatement<br>
&gt; l'expediteur.<br>
&gt; Toute utilisation de ce message non conforme a sa destination, toute<br>
&gt; diffusion ou toute publication, totale ou partielle, est interdite,
sauf<br>
&gt; autorisation expresse.<br>
&gt; L'internet ne permettant pas d'assurer l'integrite de ce message,
BNP<br>
&gt; PARIBAS (et ses filiales) decline(nt) toute responsabilite au titre
de ce<br>
&gt; message, dans l'hypothese ou il aurait ete modifie.<br>
&gt; N'imprimez ce message que si necessaire, pensez a l'environnement.<br>
&gt;<br>
&gt;</tt></font><font size=3><br>
</font>
<p>
<p>