Hello community,
here is the log from the commit of package python-python-memcached for
openSUSE:Factory checked in at 2013-06-25 09:35:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-memcached (Old)
and /work/SRC/openSUSE:Factory/.python-python-memcached.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-memcached"
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-python-memcached/python-python-memcached.changes
2013-06-14 15:47:22.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.python-python-memcached.new/python-python-memcached.changes
2013-06-25 14:45:02.000000000 +0200
@@ -1,0 +2,14 @@
+Sun Jun 23 21:21:17 UTC 2013 - [email protected]
+
+- update to 1.53:
+ * Fixing set_multi() so that if the server closes the connection
+ it will no longer raise AttributeError. Issue found and resolution
+ reviewed by Ben Hoyt.
+ * readline() now will mark the connection dead if the read fails.
+ It was just closing it before. This is related to the set_multi()
+ change but worth noting separately. Thanks to Ben Hoyt.
+ * Changing check_keys to use re.match() instead of str.translate(),
+ because re.match() works with Python < 2.6.
+ Found by Giovanni Di Milia.
+
+-------------------------------------------------------------------
Old:
----
python-memcached-1.51.tar.gz
New:
----
python-memcached-1.53.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-memcached.spec ++++++
--- /var/tmp/diff_new_pack.1gopv9/_old 2013-06-25 14:45:03.000000000 +0200
+++ /var/tmp/diff_new_pack.1gopv9/_new 2013-06-25 14:45:03.000000000 +0200
@@ -17,7 +17,7 @@
Name: python-python-memcached
-Version: 1.51
+Version: 1.53
Release: 0
Url: http://www.tummy.com/Community/software/python-memcached/
Summary: Pure python memcached client
++++++ python-memcached-1.51.tar.gz -> python-memcached-1.53.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-memcached-1.51/ChangeLog
new/python-memcached-1.53/ChangeLog
--- old/python-memcached-1.51/ChangeLog 2013-05-06 23:30:10.000000000 +0200
+++ new/python-memcached-1.53/ChangeLog 2013-06-07 19:14:00.000000000 +0200
@@ -1,3 +1,26 @@
+Sun, 07 Jun 2013 11:12:18 -0600 Sean Reifschneider <[email protected]>
+
+ * 1.53 release.
+
+ * Fixing set_multi() so that if the server closes the connection
+ it will no longer raise AttributeError. Issue found and resolution
+ reviewed by Ben Hoyt.
+
+ * readline() now will mark the connection dead if the read fails.
+ It was just closing it before. This is related to the set_multi()
+ change but worth noting separately. Thanks to Ben Hoyt.
+
+ * Discussion of the above:
+
https://github.com/linsomniac/python-memcached/commit/b7054a964aed0e6d86e853e60aab09cd0183b9f6#commitcomment-3337557
+
+Sun, 02 Jun 2013 01:08:26 -0600 Sean Reifschneider <[email protected]>
+
+ * 1.52 release.
+
+ * Changing check_keys to use re.match() instead of str.translate(),
+ because re.match() works with Python < 2.6.
+ Found by Giovanni Di Milia.
+
Mon, 06 May 2013 15:29:07 -0600 Sean Reifschneider <[email protected]>
* 1.51 release.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-memcached-1.51/PKG-INFO
new/python-memcached-1.53/PKG-INFO
--- old/python-memcached-1.51/PKG-INFO 2013-05-06 23:30:11.000000000 +0200
+++ new/python-memcached-1.53/PKG-INFO 2013-06-07 19:14:03.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: python-memcached
-Version: 1.51
+Version: 1.53
Summary: Pure python memcached client
Home-page: http://www.tummy.com/Community/software/python-memcached/
Author: Sean Reifschneider
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-memcached-1.51/memcache.py
new/python-memcached-1.53/memcache.py
--- old/python-memcached-1.51/memcache.py 2013-05-06 23:30:11.000000000
+0200
+++ new/python-memcached-1.53/memcache.py 2013-06-07 19:14:03.000000000
+0200
@@ -77,12 +77,12 @@
except ImportError:
from StringIO import StringIO
-invalid_key_characters = ''.join(map(chr, range(33) + [127]))
+valid_key_chars_re = re.compile('[\x21-\x7e\x80-\xff]+$')
# Original author: Evan Martin of Danga Interactive
__author__ = "Sean Reifschneider <[email protected]>"
-__version__ = "1.51"
+__version__ = "1.53"
__copyright__ = "Copyright (C) 2003 Danga Interactive"
# http://en.wikipedia.org/wiki/Python_Software_Foundation_License
__license__ = "Python Software Foundation License"
@@ -663,41 +663,53 @@
1
- This method is recommended over regular L{set} as it lowers the number
of
- total packets flying around your network, reducing total latency, since
- your app doesn't have to wait for each round-trip of L{set} before
sending
- the next one.
+ This method is recommended over regular L{set} as it lowers the
+ number of total packets flying around your network, reducing
+ total latency, since your app doesn't have to wait for each
+ round-trip of L{set} before sending the next one.
@param mapping: A dict of key/value pairs to set.
- @param time: Tells memcached the time which this value should expire,
either
- as a delta number of seconds, or an absolute unix time-since-the-epoch
- value. See the memcached protocol docs section "Storage Commands"
- for more info on <exptime>. We default to 0 == cache forever.
- @param key_prefix: Optional string to prepend to each key when
sending to memcache. Allows you to efficiently stuff these keys into a
pseudo-namespace in memcache:
- >>> notset_keys = mc.set_multi({'key1' : 'val1', 'key2' : 'val2'},
key_prefix='subspace_')
+ @param time: Tells memcached the time which this value should
+ expire, either as a delta number of seconds, or an absolute
+ unix time-since-the-epoch value. See the memcached protocol
+ docs section "Storage Commands" for more info on <exptime>. We
+ default to 0 == cache forever.
+ @param key_prefix: Optional string to prepend to each key when
+ sending to memcache. Allows you to efficiently stuff these
+ keys into a pseudo-namespace in memcache:
+
+ >>> notset_keys = mc.set_multi(
+ ... {'key1' : 'val1', 'key2' : 'val2'}, key_prefix='subspace_')
>>> len(notset_keys) == 0
True
>>> mc.get_multi(['subspace_key1', 'subspace_key2']) ==
{'subspace_key1' : 'val1', 'subspace_key2' : 'val2'}
True
- Causes key 'subspace_key1' and 'subspace_key2' to be set. Useful
in conjunction with a higher-level layer which applies namespaces to data in
memcache.
- In this case, the return result would be the list of notset
original keys, prefix not applied.
+ Causes key 'subspace_key1' and 'subspace_key2' to be
+ set. Useful in conjunction with a higher-level layer which
+ applies namespaces to data in memcache. In this case, the
+ return result would be the list of notset original keys,
+ prefix not applied.
- @param min_compress_len: The threshold length to kick in
auto-compression
- of the value using the zlib.compress() routine. If the value being
cached is
- a string, then the length of the string is measured, else if the value
is an
- object, then the length of the pickle result is measured. If the
resulting
- attempt at compression yeilds a larger string than the input, then it
is
- discarded. For backwards compatability, this parameter defaults to 0,
- indicating don't ever try to compress.
- @return: List of keys which failed to be stored [ memcache out of
memory, etc. ].
+ @param min_compress_len: The threshold length to kick in
+ auto-compression of the value using the zlib.compress()
+ routine. If the value being cached is a string, then
+ the length of the string is measured, else if the value
+ is an object, then the length of the pickle result is
+ measured. If the resulting attempt at compression yeilds
+ a larger string than the input, then it is discarded. For
+ backwards compatability, this parameter defaults to 0,
+ indicating don't ever try to compress.
+ @return: List of keys which failed to be stored [ memcache out of
+ memory, etc. ].
@rtype: list
'''
self._statlog('set_multi')
- server_keys, prefixed_to_orig_key =
self._map_and_prefix_keys(mapping.iterkeys(), key_prefix)
+ server_keys, prefixed_to_orig_key = self._map_and_prefix_keys(
+ mapping.iterkeys(), key_prefix)
# send out all requests on each server before reading anything
dead_servers = []
@@ -732,8 +744,7 @@
for server, keys in server_keys.iteritems():
try:
for key in keys:
- line = server.readline()
- if line == 'STORED':
+ if server.readline() == 'STORED':
continue
else:
notstored.append(prefixed_to_orig_key[key]) #un-mangle.
@@ -1046,11 +1057,10 @@
len(key) + key_extra_len > self.server_max_key_length:
raise Client.MemcachedKeyLengthError("Key length is > %s"
% self.server_max_key_length)
- if len(key) != len(key.translate(None, invalid_key_characters)):
+ if not valid_key_chars_re.match(key):
raise Client.MemcachedKeyCharacterError(
"Control characters not allowed")
-
class _Host(object):
def __init__(self, host, debug=0, dead_retry=_DEAD_RETRY,
@@ -1160,7 +1170,11 @@
an empty string.
"""
buf = self.buffer
- recv = self.socket.recv
+ if self.socket:
+ recv = self.socket.recv
+ else:
+ recv = lambda bufsize: ''
+
while True:
index = buf.find('\r\n')
if index >= 0:
@@ -1168,7 +1182,7 @@
data = recv(4096)
if not data:
# connection close, let's kill it and raise
- self.close_socket()
+ self.mark_dead('connection closed in readline()')
if raise_exception:
raise _ConnectionDeadError()
else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-memcached-1.51/python_memcached.egg-info/PKG-INFO
new/python-memcached-1.53/python_memcached.egg-info/PKG-INFO
--- old/python-memcached-1.51/python_memcached.egg-info/PKG-INFO
2013-05-06 23:30:11.000000000 +0200
+++ new/python-memcached-1.53/python_memcached.egg-info/PKG-INFO
2013-06-07 19:14:03.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: python-memcached
-Version: 1.51
+Version: 1.53
Summary: Pure python memcached client
Home-page: http://www.tummy.com/Community/software/python-memcached/
Author: Sean Reifschneider
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]