python-memcached
Advanced tools
| Metadata-Version: 1.1 | ||
| Name: python-memcached | ||
| Version: 1.59 | ||
| Summary: Pure python memcached client | ||
| Home-page: https://github.com/linsomniac/python-memcached | ||
| Author: Sean Reifschneider | ||
| Author-email: jafo@tummy.com | ||
| License: UNKNOWN | ||
| Download-URL: https://github.com/linsomniac/python-memcached/releases/download/1.59/python-memcached-1.59.tar.gz | ||
| Description: [](https://travis-ci.org/linsomniac/python-memcached) | ||
| ## Overview | ||
| This software is a 100% Python interface to the memcached memory cache | ||
| daemon. It is the client side software which allows storing values | ||
| in one or more, possibly remote, memcached servers. Search google for | ||
| memcached for more information. | ||
| This package was originally written by Evan Martin of Danga. Please do | ||
| not contact Evan about maintenance. Sean Reifschneider of tummy.com, | ||
| ltd. has taken over maintenance of it. | ||
| Please report issues and submit code changes to the github repository at: | ||
| https://github.com/linsomniac/python-memcached | ||
| For changes prior to 2013-03-26, see the old Launchpad repository at: | ||
| Historic issues: https://launchpad.net/python-memcached | ||
| ## Testing | ||
| Test patches locally and easily by running tox: | ||
| pip install tox | ||
| tox -e py27 | ||
| Test for style by running tox: | ||
| tox -e pep8 | ||
| Platform: UNKNOWN | ||
| Classifier: Development Status :: 5 - Production/Stable | ||
| Classifier: Intended Audience :: Developers | ||
| Classifier: License :: OSI Approved :: Python Software Foundation License | ||
| Classifier: Operating System :: OS Independent | ||
| Classifier: Programming Language :: Python | ||
| Classifier: Topic :: Internet | ||
| Classifier: Topic :: Software Development :: Libraries :: Python Modules | ||
| Classifier: Programming Language :: Python | ||
| Classifier: Programming Language :: Python :: 2 | ||
| Classifier: Programming Language :: Python :: 2.7 | ||
| Classifier: Programming Language :: Python :: 3 | ||
| Classifier: Programming Language :: Python :: 3.4 | ||
| Classifier: Programming Language :: Python :: 3.5 | ||
| Classifier: Programming Language :: Python :: 3.6 |
| six>=1.4.0 |
| ChangeLog | ||
| MANIFEST.in | ||
| README.md | ||
| memcache.py | ||
| requirements.txt | ||
| setup.cfg | ||
| setup.py | ||
| test-requirements.txt | ||
| python_memcached.egg-info/PKG-INFO | ||
| python_memcached.egg-info/SOURCES.txt | ||
| python_memcached.egg-info/dependency_links.txt | ||
| python_memcached.egg-info/requires.txt | ||
| python_memcached.egg-info/top_level.txt |
| memcache |
+43
-53
@@ -51,3 +51,3 @@ #!/usr/bin/env python | ||
| import binascii | ||
| import os | ||
| from io import BytesIO | ||
| import re | ||
@@ -70,5 +70,3 @@ import socket | ||
| def cmemcache_hash(key): | ||
| return ( | ||
| (((binascii.crc32(key) & 0xffffffff) | ||
| >> 16) & 0x7fff) or 1) | ||
| return (((binascii.crc32(key) & 0xffffffff) >> 16) & 0x7fff) or 1 | ||
| serverHashFunction = cmemcache_hash | ||
@@ -82,15 +80,3 @@ | ||
| from io import BytesIO | ||
| if six.PY2: | ||
| try: | ||
| unicode | ||
| except NameError: | ||
| _has_unicode = False | ||
| else: | ||
| _has_unicode = True | ||
| else: | ||
| _has_unicode = True | ||
| _str_cls = six.string_types | ||
| valid_key_chars_re = re.compile(b'[\x21-\x7e\x80-\xff]+$') | ||
@@ -100,4 +86,4 @@ | ||
| # Original author: Evan Martin of Danga Interactive | ||
| __author__ = "Sean Reifschneider <jafo-memcached@tummy.com>" | ||
| __version__ = "1.58" | ||
| __author__ = "Sean Reifschneider <jafo00@gmail.com>" | ||
| __version__ = "1.59" | ||
| __copyright__ = "Copyright (C) 2003 Danga Interactive" | ||
@@ -155,2 +141,3 @@ # http://en.wikipedia.org/wiki/Python_Software_Foundation_License | ||
| _FLAG_COMPRESSED = 1 << 3 | ||
| _FLAG_TEXT = 1 << 4 | ||
@@ -351,3 +338,3 @@ _SERVER_RETRIES = 10 # how many times to try finding a free server. | ||
| return(data) | ||
| return data | ||
@@ -375,3 +362,3 @@ def get_slab_stats(self): | ||
| if line.startswith('STAT active_slabs') or line.startswith('STAT total_malloced'): | ||
| serverData[item[1]]=item[2] | ||
| serverData[item[1]] = item[2] | ||
| else: | ||
@@ -576,3 +563,3 @@ # 0 = STAT, 1 = ITEM, 2 = Value | ||
| self._statlog(cmd) | ||
| if time is not None and time != 0: | ||
| if time is not None: | ||
| headers = str(time) | ||
@@ -591,3 +578,3 @@ else: | ||
| self.debuglog('%s expected %s, got: %r' | ||
| % (cmd, ' or '.join(expected), line)) | ||
| % (cmd, b' or '.join(expected), line)) | ||
| except socket.error as msg: | ||
@@ -741,5 +728,5 @@ if isinstance(msg, tuple): | ||
| object, then the length of the pickle result is measured. If | ||
| the resulting attempt at compression yeilds a larger string | ||
| the resulting attempt at compression yields a larger string | ||
| than the input, then it is discarded. For backwards | ||
| compatability, this parameter defaults to 0, indicating don't | ||
| compatibility, this parameter defaults to 0, indicating don't | ||
| ever try to compress. | ||
@@ -779,5 +766,5 @@ | ||
| object, then the length of the pickle result is measured. If | ||
| the resulting attempt at compression yeilds a larger string | ||
| the resulting attempt at compression yields a larger string | ||
| than the input, then it is discarded. For backwards | ||
| compatability, this parameter defaults to 0, indicating don't | ||
| compatibility, this parameter defaults to 0, indicating don't | ||
| ever try to compress. | ||
@@ -791,3 +778,5 @@ | ||
| def _map_and_prefix_keys(self, key_iterable, key_prefix): | ||
| """Compute the mapping of server (_Host instance) -> list of keys to | ||
| """Map keys to the servers they will reside on. | ||
| Compute the mapping of server (_Host instance) -> list of keys to | ||
| stuff onto that server, as well as the mapping of prefixed key | ||
@@ -861,5 +850,5 @@ -> original key. | ||
| >>> notset_keys = mc.set_multi({'key1' : 'val1', 'key2' : 'val2'}) | ||
| >>> mc.get_multi(['key1', 'key2']) == {'key1' : 'val1', | ||
| ... 'key2' : 'val2'} | ||
| 1 | ||
| >>> keys = mc.get_multi(['key1', 'key2']) | ||
| >>> keys == {'key1': 'val1', 'key2': 'val2'} | ||
| True | ||
@@ -884,3 +873,3 @@ | ||
| >> notset_keys = mc.set_multi( | ||
| >>> notset_keys = mc.set_multi( | ||
| ... {'key1' : 'val1', 'key2' : 'val2'}, | ||
@@ -890,5 +879,4 @@ ... key_prefix='subspace_') | ||
| True | ||
| >>> mc.get_multi(['subspace_key1', | ||
| ... 'subspace_key2']) == {'subspace_key1': 'val1', | ||
| ... 'subspace_key2' : 'val2'} | ||
| >>> keys = mc.get_multi(['subspace_key1', 'subspace_key2']) | ||
| >>> keys == {'subspace_key1': 'val1', 'subspace_key2': 'val2'} | ||
| True | ||
@@ -907,5 +895,5 @@ | ||
| object, then the length of the pickle result is | ||
| measured. If the resulting attempt at compression yeilds a | ||
| measured. If the resulting attempt at compression yields a | ||
| larger string than the input, then it is discarded. For | ||
| backwards compatability, this parameter defaults to 0, | ||
| backwards compatibility, this parameter defaults to 0, | ||
| indicating don't ever try to compress. | ||
@@ -987,7 +975,12 @@ | ||
| flags = 0 | ||
| if isinstance(val, six.binary_type): | ||
| # Check against the exact type, rather than using isinstance(), so that | ||
| # subclasses of native types (such as markup-safe strings) are pickled | ||
| # and restored as instances of the correct class. | ||
| val_type = type(val) | ||
| if val_type == six.binary_type: | ||
| pass | ||
| elif isinstance(val, six.text_type): | ||
| elif val_type == six.text_type: | ||
| flags |= Client._FLAG_TEXT | ||
| val = val.encode('utf-8') | ||
| elif isinstance(val, int): | ||
| elif val_type == int: | ||
| flags |= Client._FLAG_INTEGER | ||
@@ -999,3 +992,3 @@ val = '%d' % val | ||
| min_compress_len = 0 | ||
| elif six.PY2 and isinstance(val, long): | ||
| elif six.PY2 and isinstance(val, long): # noqa: F821 | ||
| flags |= Client._FLAG_LONG | ||
@@ -1033,3 +1026,3 @@ val = str(val) | ||
| len(val) > self.server_max_value_length): | ||
| return(0) | ||
| return 0 | ||
@@ -1055,3 +1048,3 @@ return (flags, len(val), val) | ||
| if not store_info: | ||
| return(0) | ||
| return 0 | ||
| flags, len_val, encoded_val = store_info | ||
@@ -1071,4 +1064,3 @@ | ||
| return True | ||
| return(server.expect(b"STORED", raise_exception=True) | ||
| == b"STORED") | ||
| return server.expect(b"STORED", raise_exception=True) == b"STORED" | ||
| except socket.error as msg: | ||
@@ -1178,3 +1170,3 @@ if isinstance(msg, tuple): | ||
| get_mult [ and L{set_multi} ] can take str()-ables like ints / | ||
| get_multi [ and L{set_multi} ] can take str()-ables like ints / | ||
| longs as keys too. Such as your db pri key fields. They're | ||
@@ -1211,3 +1203,3 @@ rotored through str() before being passed off to memcache, | ||
| @return: A dictionary of key/value pairs that were | ||
| available. If key_prefix was provided, the keys in the retured | ||
| available. If key_prefix was provided, the keys in the returned | ||
| dictionary will not have it present. | ||
@@ -1290,9 +1282,7 @@ ''' | ||
| flags &= ~Client._FLAG_COMPRESSED | ||
| if flags == 0: | ||
| # Bare string | ||
| if six.PY3: | ||
| val = buf.decode('utf8') | ||
| else: | ||
| val = buf | ||
| # Bare bytes | ||
| val = buf | ||
| elif flags & Client._FLAG_TEXT: | ||
| val = buf.decode('utf-8') | ||
| elif flags & Client._FLAG_INTEGER: | ||
@@ -1304,3 +1294,3 @@ val = int(buf) | ||
| else: | ||
| val = long(buf) | ||
| val = long(buf) # noqa: F821 | ||
| elif flags & Client._FLAG_PICKLE: | ||
@@ -1307,0 +1297,0 @@ try: |
+54
-7
@@ -1,10 +0,57 @@ | ||
| Metadata-Version: 1.0 | ||
| Metadata-Version: 1.1 | ||
| Name: python-memcached | ||
| Version: 1.58 | ||
| Summary: A Python memcached client library. | ||
| Home-page: http://www.tummy.com/Community/software/python-memcached/ | ||
| Version: 1.59 | ||
| Summary: Pure python memcached client | ||
| Home-page: https://github.com/linsomniac/python-memcached | ||
| Author: Sean Reifschneider | ||
| Author-email: jafo-memcached@tummy.com | ||
| License: Python Software Foundation License | ||
| Description: A Python memcached client library. | ||
| Author-email: jafo@tummy.com | ||
| License: UNKNOWN | ||
| Download-URL: https://github.com/linsomniac/python-memcached/releases/download/1.59/python-memcached-1.59.tar.gz | ||
| Description: [](https://travis-ci.org/linsomniac/python-memcached) | ||
| ## Overview | ||
| This software is a 100% Python interface to the memcached memory cache | ||
| daemon. It is the client side software which allows storing values | ||
| in one or more, possibly remote, memcached servers. Search google for | ||
| memcached for more information. | ||
| This package was originally written by Evan Martin of Danga. Please do | ||
| not contact Evan about maintenance. Sean Reifschneider of tummy.com, | ||
| ltd. has taken over maintenance of it. | ||
| Please report issues and submit code changes to the github repository at: | ||
| https://github.com/linsomniac/python-memcached | ||
| For changes prior to 2013-03-26, see the old Launchpad repository at: | ||
| Historic issues: https://launchpad.net/python-memcached | ||
| ## Testing | ||
| Test patches locally and easily by running tox: | ||
| pip install tox | ||
| tox -e py27 | ||
| Test for style by running tox: | ||
| tox -e pep8 | ||
| Platform: UNKNOWN | ||
| Classifier: Development Status :: 5 - Production/Stable | ||
| Classifier: Intended Audience :: Developers | ||
| Classifier: License :: OSI Approved :: Python Software Foundation License | ||
| Classifier: Operating System :: OS Independent | ||
| Classifier: Programming Language :: Python | ||
| Classifier: Topic :: Internet | ||
| Classifier: Topic :: Software Development :: Libraries :: Python Modules | ||
| Classifier: Programming Language :: Python | ||
| Classifier: Programming Language :: Python :: 2 | ||
| Classifier: Programming Language :: Python :: 2.7 | ||
| Classifier: Programming Language :: Python :: 3 | ||
| Classifier: Programming Language :: Python :: 3.4 | ||
| Classifier: Programming Language :: Python :: 3.5 | ||
| Classifier: Programming Language :: Python :: 3.6 |
+8
-0
@@ -6,3 +6,11 @@ [bdist_rpm] | ||
| [flake8] | ||
| ignore = H304,H405 | ||
| [wheel] | ||
| universal = 1 | ||
| [egg_info] | ||
| tag_build = | ||
| tag_date = 0 | ||
+31
-29
@@ -7,30 +7,32 @@ #!/usr/bin/env python | ||
| setup(name="python-memcached", | ||
| version=get_module_constant('memcache', '__version__'), | ||
| description="Pure python memcached client", | ||
| long_description=open("README.md").read(), | ||
| author="Evan Martin", | ||
| author_email="martine@danga.com", | ||
| maintainer="Sean Reifschneider", | ||
| maintainer_email="jafo@tummy.com", | ||
| url="http://www.tummy.com/Community/software/python-memcached/", | ||
| download_url="ftp://ftp.tummy.com/pub/python-memcached/", | ||
| py_modules=["memcache"], | ||
| install_requires=open('requirements.txt').read().split(), | ||
| classifiers=[ | ||
| "Development Status :: 5 - Production/Stable", | ||
| "Intended Audience :: Developers", | ||
| "License :: OSI Approved :: Python Software Foundation License", | ||
| "Operating System :: OS Independent", | ||
| "Programming Language :: Python", | ||
| "Topic :: Internet", | ||
| "Topic :: Software Development :: Libraries :: Python Modules", | ||
| "Programming Language :: Python", | ||
| "Programming Language :: Python :: 2", | ||
| "Programming Language :: Python :: 2.6", | ||
| "Programming Language :: Python :: 2.7", | ||
| "Programming Language :: Python :: 3", | ||
| "Programming Language :: Python :: 3.2", | ||
| "Programming Language :: Python :: 3.3", | ||
| "Programming Language :: Python :: 3.4" | ||
| ]) | ||
| version = get_module_constant('memcache', '__version__') | ||
| setup( | ||
| name="python-memcached", | ||
| version=version, | ||
| description="Pure python memcached client", | ||
| long_description=open("README.md").read(), | ||
| author="Evan Martin", | ||
| author_email="martine@danga.com", | ||
| maintainer="Sean Reifschneider", | ||
| maintainer_email="jafo@tummy.com", | ||
| url="https://github.com/linsomniac/python-memcached", | ||
| download_url="https://github.com/linsomniac/python-memcached/releases/download/{0}/python-memcached-{0}.tar.gz".format(version), | ||
| py_modules=["memcache"], | ||
| install_requires=open('requirements.txt').read().split(), | ||
| classifiers=[ | ||
| "Development Status :: 5 - Production/Stable", | ||
| "Intended Audience :: Developers", | ||
| "License :: OSI Approved :: Python Software Foundation License", | ||
| "Operating System :: OS Independent", | ||
| "Programming Language :: Python", | ||
| "Topic :: Internet", | ||
| "Topic :: Software Development :: Libraries :: Python Modules", | ||
| "Programming Language :: Python", | ||
| "Programming Language :: Python :: 2", | ||
| "Programming Language :: Python :: 2.7", | ||
| "Programming Language :: Python :: 3", | ||
| "Programming Language :: Python :: 3.4", | ||
| "Programming Language :: Python :: 3.5", | ||
| "Programming Language :: Python :: 3.6", | ||
| ], | ||
| ) |
| nose | ||
| coverage | ||
| hacking | ||
| mock |
| *.pyc | ||
| /dist | ||
| /python_memcached.egg-info | ||
| .tox | ||
| .coverage |
-13
| language: python | ||
| python: | ||
| - 2.6 | ||
| - 2.7 | ||
| - 3.2 | ||
| - 3.3 | ||
| - 3.4 | ||
| - pypy | ||
| services: | ||
| - memcached | ||
| install: python setup.py install | ||
| before_script: pip install nose | ||
| script: nosetests |
Sorry, the diff of this file is not supported yet
-9
| test: | ||
| python memcache.py | ||
| ( cd tests; make ) | ||
| clean: | ||
| rm -f memcache.pyc memcache.py.orig | ||
| push: | ||
| bzr push lp:python-memcached |
-556
| PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 | ||
| -------------------------------------------- | ||
| 1. This LICENSE AGREEMENT is between the Python Software Foundation | ||
| ("PSF"), and the Individual or Organization ("Licensee") accessing and | ||
| otherwise using this software ("Python") in source or binary form and | ||
| its associated documentation. | ||
| 2. Subject to the terms and conditions of this License Agreement, PSF | ||
| hereby grants Licensee a nonexclusive, royalty-free, world-wide | ||
| license to reproduce, analyze, test, perform and/or display publicly, | ||
| prepare derivative works, distribute, and otherwise use Python | ||
| alone or in any derivative version, provided, however, that PSF's | ||
| License Agreement and PSF's notice of copyright, i.e., "Copyright (c) | ||
| 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Python Software Foundation; | ||
| All Rights Reserved" are retained in Python alone or in any derivative | ||
| version prepared by Licensee. | ||
| 3. In the event Licensee prepares a derivative work that is based on | ||
| or incorporates Python or any part thereof, and wants to make | ||
| the derivative work available to others as provided herein, then | ||
| Licensee hereby agrees to include in any such work a brief summary of | ||
| the changes made to Python. | ||
| 4. PSF is making Python available to Licensee on an "AS IS" | ||
| basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR | ||
| IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND | ||
| DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS | ||
| FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT | ||
| INFRINGE ANY THIRD PARTY RIGHTS. | ||
| 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON | ||
| FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS | ||
| A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, | ||
| OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. | ||
| 6. This License Agreement will automatically terminate upon a material | ||
| breach of its terms and conditions. | ||
| 7. Nothing in this License Agreement shall be deemed to create any | ||
| relationship of agency, partnership, or joint venture between PSF and | ||
| Licensee. This License Agreement does not grant permission to use PSF | ||
| trademarks or trade name in a trademark sense to endorse or promote | ||
| products or services of Licensee, or any third party. | ||
| 8. By copying, installing or otherwise using Python, Licensee | ||
| agrees to be bound by the terms and conditions of this License | ||
| Agreement. | ||
| BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 | ||
| ------------------------------------------- | ||
| BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 | ||
| 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an | ||
| office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the | ||
| Individual or Organization ("Licensee") accessing and otherwise using | ||
| this software in source or binary form and its associated | ||
| documentation ("the Software"). | ||
| 2. Subject to the terms and conditions of this BeOpen Python License | ||
| Agreement, BeOpen hereby grants Licensee a non-exclusive, | ||
| royalty-free, world-wide license to reproduce, analyze, test, perform | ||
| and/or display publicly, prepare derivative works, distribute, and | ||
| otherwise use the Software alone or in any derivative version, | ||
| provided, however, that the BeOpen Python License is retained in the | ||
| Software, alone or in any derivative version prepared by Licensee. | ||
| 3. BeOpen is making the Software available to Licensee on an "AS IS" | ||
| basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR | ||
| IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND | ||
| DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS | ||
| FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT | ||
| INFRINGE ANY THIRD PARTY RIGHTS. | ||
| 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE | ||
| SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS | ||
| AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY | ||
| DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. | ||
| 5. This License Agreement will automatically terminate upon a material | ||
| breach of its terms and conditions. | ||
| 6. This License Agreement shall be governed by and interpreted in all | ||
| respects by the law of the State of California, excluding conflict of | ||
| law provisions. Nothing in this License Agreement shall be deemed to | ||
| create any relationship of agency, partnership, or joint venture | ||
| between BeOpen and Licensee. This License Agreement does not grant | ||
| permission to use BeOpen trademarks or trade names in a trademark | ||
| sense to endorse or promote products or services of Licensee, or any | ||
| third party. As an exception, the "BeOpen Python" logos available at | ||
| http://www.pythonlabs.com/logos.html may be used according to the | ||
| permissions granted on that web page. | ||
| 7. By copying, installing or otherwise using the software, Licensee | ||
| agrees to be bound by the terms and conditions of this License | ||
| Agreement. | ||
| CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 | ||
| --------------------------------------- | ||
| 1. This LICENSE AGREEMENT is between the Corporation for National | ||
| Research Initiatives, having an office at 1895 Preston White Drive, | ||
| Reston, VA 20191 ("CNRI"), and the Individual or Organization | ||
| ("Licensee") accessing and otherwise using Python 1.6.1 software in | ||
| source or binary form and its associated documentation. | ||
| 2. Subject to the terms and conditions of this License Agreement, CNRI | ||
| hereby grants Licensee a nonexclusive, royalty-free, world-wide | ||
| license to reproduce, analyze, test, perform and/or display publicly, | ||
| prepare derivative works, distribute, and otherwise use Python 1.6.1 | ||
| alone or in any derivative version, provided, however, that CNRI's | ||
| License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) | ||
| 1995-2001 Corporation for National Research Initiatives; All Rights | ||
| Reserved" are retained in Python 1.6.1 alone or in any derivative | ||
| version prepared by Licensee. Alternately, in lieu of CNRI's License | ||
| Agreement, Licensee may substitute the following text (omitting the | ||
| quotes): "Python 1.6.1 is made available subject to the terms and | ||
| conditions in CNRI's License Agreement. This Agreement together with | ||
| Python 1.6.1 may be located on the Internet using the following | ||
| unique, persistent identifier (known as a handle): 1895.22/1013. This | ||
| Agreement may also be obtained from a proxy server on the Internet | ||
| using the following URL: http://hdl.handle.net/1895.22/1013". | ||
| 3. In the event Licensee prepares a derivative work that is based on | ||
| or incorporates Python 1.6.1 or any part thereof, and wants to make | ||
| the derivative work available to others as provided herein, then | ||
| Licensee hereby agrees to include in any such work a brief summary of | ||
| the changes made to Python 1.6.1. | ||
| 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" | ||
| basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR | ||
| IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND | ||
| DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS | ||
| FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT | ||
| INFRINGE ANY THIRD PARTY RIGHTS. | ||
| 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON | ||
| 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS | ||
| A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, | ||
| OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. | ||
| 6. This License Agreement will automatically terminate upon a material | ||
| breach of its terms and conditions. | ||
| 7. This License Agreement shall be governed by the federal | ||
| intellectual property law of the United States, including without | ||
| limitation the federal copyright law, and, to the extent such | ||
| U.S. federal law does not apply, by the law of the Commonwealth of | ||
| Virginia, excluding Virginia's conflict of law provisions. | ||
| Notwithstanding the foregoing, with regard to derivative works based | ||
| on Python 1.6.1 that incorporate non-separable material that was | ||
| previously distributed under the GNU General Public License (GPL), the | ||
| law of the Commonwealth of Virginia shall govern this License | ||
| Agreement only as to issues arising under or with respect to | ||
| Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this | ||
| License Agreement shall be deemed to create any relationship of | ||
| agency, partnership, or joint venture between CNRI and Licensee. This | ||
| License Agreement does not grant permission to use CNRI trademarks or | ||
| trade name in a trademark sense to endorse or promote products or | ||
| services of Licensee, or any third party. | ||
| 8. By clicking on the "ACCEPT" button where indicated, or by copying, | ||
| installing or otherwise using Python 1.6.1, Licensee agrees to be | ||
| bound by the terms and conditions of this License Agreement. | ||
| ACCEPT | ||
| CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 | ||
| -------------------------------------------------- | ||
| Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, | ||
| The Netherlands. All rights reserved. | ||
| Permission to use, copy, modify, and distribute this software and its | ||
| documentation for any purpose and without fee is hereby granted, | ||
| provided that the above copyright notice appear in all copies and that | ||
| both that copyright notice and this permission notice appear in | ||
| supporting documentation, and that the name of Stichting Mathematisch | ||
| Centrum or CWI not be used in advertising or publicity pertaining to | ||
| distribution of the software without specific, written prior | ||
| permission. | ||
| STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO | ||
| THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND | ||
| FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE | ||
| FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | ||
| OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| This copy of Python includes a copy of bzip2, which is licensed under the following terms: | ||
| This program, "bzip2", the associated library "libbzip2", and all | ||
| documentation, are copyright (C) 1996-2005 Julian R Seward. All | ||
| rights reserved. | ||
| Redistribution and use in source and binary forms, with or without | ||
| modification, are permitted provided that the following conditions | ||
| are met: | ||
| 1. Redistributions of source code must retain the above copyright | ||
| notice, this list of conditions and the following disclaimer. | ||
| 2. The origin of this software must not be misrepresented; you must | ||
| not claim that you wrote the original software. If you use this | ||
| software in a product, an acknowledgment in the product | ||
| documentation would be appreciated but is not required. | ||
| 3. Altered source versions must be plainly marked as such, and must | ||
| not be misrepresented as being the original software. | ||
| 4. The name of the author may not be used to endorse or promote | ||
| products derived from this software without specific prior written | ||
| permission. | ||
| THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS | ||
| OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | ||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE | ||
| GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | ||
| WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| Julian Seward, Cambridge, UK. | ||
| jseward@acm.org | ||
| bzip2/libbzip2 version 1.0.3 of 15 February 2005 | ||
| This copy of Python includes a copy of db, which is licensed under the following terms: | ||
| /*- | ||
| * $Id: LICENSE,v 12.1 2005/06/16 20:20:10 bostic Exp $ | ||
| */ | ||
| The following is the license that applies to this copy of the Berkeley DB | ||
| software. For a license to use the Berkeley DB software under conditions | ||
| other than those described here, or to purchase support for this software, | ||
| please contact Sleepycat Software by email at info@sleepycat.com, or on | ||
| the Web at http://www.sleepycat.com. | ||
| =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||
| /* | ||
| * Copyright (c) 1990-2005 | ||
| * Sleepycat Software. All rights reserved. | ||
| * | ||
| * Redistribution and use in source and binary forms, with or without | ||
| * modification, are permitted provided that the following conditions | ||
| * are met: | ||
| * 1. Redistributions of source code must retain the above copyright | ||
| * notice, this list of conditions and the following disclaimer. | ||
| * 2. Redistributions in binary form must reproduce the above copyright | ||
| * notice, this list of conditions and the following disclaimer in the | ||
| * documentation and/or other materials provided with the distribution. | ||
| * 3. Redistributions in any form must be accompanied by information on | ||
| * how to obtain complete source code for the DB software and any | ||
| * accompanying software that uses the DB software. The source code | ||
| * must either be included in the distribution or be available for no | ||
| * more than the cost of distribution plus a nominal fee, and must be | ||
| * freely redistributable under reasonable conditions. For an | ||
| * executable file, complete source code means the source code for all | ||
| * modules it contains. It does not include source code for modules or | ||
| * files that typically accompany the major components of the operating | ||
| * system on which the executable file runs. | ||
| * | ||
| * THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE ``AS IS'' AND ANY EXPRESS | ||
| * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
| * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR | ||
| * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL SLEEPYCAT SOFTWARE | ||
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | ||
| * THE POSSIBILITY OF SUCH DAMAGE. | ||
| */ | ||
| /* | ||
| * Copyright (c) 1990, 1993, 1994, 1995 | ||
| * The Regents of the University of California. All rights reserved. | ||
| * | ||
| * Redistribution and use in source and binary forms, with or without | ||
| * modification, are permitted provided that the following conditions | ||
| * are met: | ||
| * 1. Redistributions of source code must retain the above copyright | ||
| * notice, this list of conditions and the following disclaimer. | ||
| * 2. Redistributions in binary form must reproduce the above copyright | ||
| * notice, this list of conditions and the following disclaimer in the | ||
| * documentation and/or other materials provided with the distribution. | ||
| * 3. Neither the name of the University nor the names of its contributors | ||
| * may be used to endorse or promote products derived from this software | ||
| * without specific prior written permission. | ||
| * | ||
| * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | ||
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | ||
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
| * SUCH DAMAGE. | ||
| */ | ||
| /* | ||
| * Copyright (c) 1995, 1996 | ||
| * The President and Fellows of Harvard University. All rights reserved. | ||
| * | ||
| * Redistribution and use in source and binary forms, with or without | ||
| * modification, are permitted provided that the following conditions | ||
| * are met: | ||
| * 1. Redistributions of source code must retain the above copyright | ||
| * notice, this list of conditions and the following disclaimer. | ||
| * 2. Redistributions in binary form must reproduce the above copyright | ||
| * notice, this list of conditions and the following disclaimer in the | ||
| * documentation and/or other materials provided with the distribution. | ||
| * 3. Neither the name of the University nor the names of its contributors | ||
| * may be used to endorse or promote products derived from this software | ||
| * without specific prior written permission. | ||
| * | ||
| * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND | ||
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE | ||
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
| * SUCH DAMAGE. | ||
| */ | ||
| This copy of Python includes a copy of openssl, which is licensed under the following terms: | ||
| LICENSE ISSUES | ||
| ============== | ||
| The OpenSSL toolkit stays under a dual license, i.e. both the conditions of | ||
| the OpenSSL License and the original SSLeay license apply to the toolkit. | ||
| See below for the actual license texts. Actually both licenses are BSD-style | ||
| Open Source licenses. In case of any license issues related to OpenSSL | ||
| please contact openssl-core@openssl.org. | ||
| OpenSSL License | ||
| --------------- | ||
| /* ==================================================================== | ||
| * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. | ||
| * | ||
| * Redistribution and use in source and binary forms, with or without | ||
| * modification, are permitted provided that the following conditions | ||
| * are met: | ||
| * | ||
| * 1. Redistributions of source code must retain the above copyright | ||
| * notice, this list of conditions and the following disclaimer. | ||
| * | ||
| * 2. Redistributions in binary form must reproduce the above copyright | ||
| * notice, this list of conditions and the following disclaimer in | ||
| * the documentation and/or other materials provided with the | ||
| * distribution. | ||
| * | ||
| * 3. All advertising materials mentioning features or use of this | ||
| * software must display the following acknowledgment: | ||
| * "This product includes software developed by the OpenSSL Project | ||
| * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" | ||
| * | ||
| * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
| * endorse or promote products derived from this software without | ||
| * prior written permission. For written permission, please contact | ||
| * openssl-core@openssl.org. | ||
| * | ||
| * 5. Products derived from this software may not be called "OpenSSL" | ||
| * nor may "OpenSSL" appear in their names without prior written | ||
| * permission of the OpenSSL Project. | ||
| * | ||
| * 6. Redistributions of any form whatsoever must retain the following | ||
| * acknowledgment: | ||
| * "This product includes software developed by the OpenSSL Project | ||
| * for use in the OpenSSL Toolkit (http://www.openssl.org/)" | ||
| * | ||
| * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
| * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
| * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
| * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| * ==================================================================== | ||
| * | ||
| * This product includes cryptographic software written by Eric Young | ||
| * (eay@cryptsoft.com). This product includes software written by Tim | ||
| * Hudson (tjh@cryptsoft.com). | ||
| * | ||
| */ | ||
| Original SSLeay License | ||
| ----------------------- | ||
| /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
| * All rights reserved. | ||
| * | ||
| * This package is an SSL implementation written | ||
| * by Eric Young (eay@cryptsoft.com). | ||
| * The implementation was written so as to conform with Netscapes SSL. | ||
| * | ||
| * This library is free for commercial and non-commercial use as long as | ||
| * the following conditions are aheared to. The following conditions | ||
| * apply to all code found in this distribution, be it the RC4, RSA, | ||
| * lhash, DES, etc., code; not just the SSL code. The SSL documentation | ||
| * included with this distribution is covered by the same copyright terms | ||
| * except that the holder is Tim Hudson (tjh@cryptsoft.com). | ||
| * | ||
| * Copyright remains Eric Young's, and as such any Copyright notices in | ||
| * the code are not to be removed. | ||
| * If this package is used in a product, Eric Young should be given attribution | ||
| * as the author of the parts of the library used. | ||
| * This can be in the form of a textual message at program startup or | ||
| * in documentation (online or textual) provided with the package. | ||
| * | ||
| * Redistribution and use in source and binary forms, with or without | ||
| * modification, are permitted provided that the following conditions | ||
| * are met: | ||
| * 1. Redistributions of source code must retain the copyright | ||
| * notice, this list of conditions and the following disclaimer. | ||
| * 2. Redistributions in binary form must reproduce the above copyright | ||
| * notice, this list of conditions and the following disclaimer in the | ||
| * documentation and/or other materials provided with the distribution. | ||
| * 3. All advertising materials mentioning features or use of this software | ||
| * must display the following acknowledgement: | ||
| * "This product includes cryptographic software written by | ||
| * Eric Young (eay@cryptsoft.com)" | ||
| * The word 'cryptographic' can be left out if the rouines from the library | ||
| * being used are not cryptographic related :-). | ||
| * 4. If you include any Windows specific code (or a derivative thereof) from | ||
| * the apps directory (application code) you must include an acknowledgement: | ||
| * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | ||
| * | ||
| * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | ||
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
| * SUCH DAMAGE. | ||
| * | ||
| * The licence and distribution terms for any publically available version or | ||
| * derivative of this code cannot be changed. i.e. this code cannot simply be | ||
| * copied and put under another distribution licence | ||
| * [including the GNU Public Licence.] | ||
| */ | ||
| This copy of Python includes a copy of tcl, which is licensed under the following terms: | ||
| This software is copyrighted by the Regents of the University of | ||
| California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState | ||
| Corporation and other parties. The following terms apply to all files | ||
| associated with the software unless explicitly disclaimed in | ||
| individual files. | ||
| The authors hereby grant permission to use, copy, modify, distribute, | ||
| and license this software and its documentation for any purpose, provided | ||
| that existing copyright notices are retained in all copies and that this | ||
| notice is included verbatim in any distributions. No written agreement, | ||
| license, or royalty fee is required for any of the authorized uses. | ||
| Modifications to this software may be copyrighted by their authors | ||
| and need not follow the licensing terms described here, provided that | ||
| the new terms are clearly indicated on the first page of each file where | ||
| they apply. | ||
| IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY | ||
| FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES | ||
| ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY | ||
| DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE | ||
| POSSIBILITY OF SUCH DAMAGE. | ||
| THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, | ||
| INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE | ||
| IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE | ||
| NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR | ||
| MODIFICATIONS. | ||
| GOVERNMENT USE: If you are acquiring this software on behalf of the | ||
| U.S. government, the Government shall have only "Restricted Rights" | ||
| in the software and related documentation as defined in the Federal | ||
| Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you | ||
| are acquiring the software on behalf of the Department of Defense, the | ||
| software shall be classified as "Commercial Computer Software" and the | ||
| Government shall have only "Restricted Rights" as defined in Clause | ||
| 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the | ||
| authors grant the U.S. Government and others acting in its behalf | ||
| permission to use and distribute the software in accordance with the | ||
| terms specified in this license. | ||
| This copy of Python includes a copy of tk, which is licensed under the following terms: | ||
| This software is copyrighted by the Regents of the University of | ||
| California, Sun Microsystems, Inc., and other parties. The following | ||
| terms apply to all files associated with the software unless explicitly | ||
| disclaimed in individual files. | ||
| The authors hereby grant permission to use, copy, modify, distribute, | ||
| and license this software and its documentation for any purpose, provided | ||
| that existing copyright notices are retained in all copies and that this | ||
| notice is included verbatim in any distributions. No written agreement, | ||
| license, or royalty fee is required for any of the authorized uses. | ||
| Modifications to this software may be copyrighted by their authors | ||
| and need not follow the licensing terms described here, provided that | ||
| the new terms are clearly indicated on the first page of each file where | ||
| they apply. | ||
| IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY | ||
| FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES | ||
| ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY | ||
| DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE | ||
| POSSIBILITY OF SUCH DAMAGE. | ||
| THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, | ||
| INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE | ||
| IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE | ||
| NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR | ||
| MODIFICATIONS. | ||
| GOVERNMENT USE: If you are acquiring this software on behalf of the | ||
| U.S. government, the Government shall have only "Restricted Rights" | ||
| in the software and related documentation as defined in the Federal | ||
| Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you | ||
| are acquiring the software on behalf of the Department of Defense, the | ||
| software shall be classified as "Commercial Computer Software" and the | ||
| Government shall have only "Restricted Rights" as defined in Clause | ||
| 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the | ||
| authors grant the U.S. Government and others acting in its behalf | ||
| permission to use and distribute the software in accordance with the | ||
| terms specified in this license. |
| from __future__ import print_function | ||
| import unittest | ||
| import six | ||
| from memcache import Client, SERVER_MAX_KEY_LENGTH, SERVER_MAX_VALUE_LENGTH | ||
| try: | ||
| _str_cls = basestring | ||
| except NameError: | ||
| _str_cls = str | ||
| def to_s(val): | ||
| if not isinstance(val, _str_cls): | ||
| return "%s (%s)" % (val, type(val)) | ||
| return "%s" % val | ||
| class FooStruct(object): | ||
| def __init__(self): | ||
| self.bar = "baz" | ||
| def __str__(self): | ||
| return "A FooStruct" | ||
| def __eq__(self, other): | ||
| if isinstance(other, FooStruct): | ||
| return self.bar == other.bar | ||
| return 0 | ||
| class TestMemcache(unittest.TestCase): | ||
| def setUp(self): | ||
| # TODO: unix socket server stuff | ||
| servers = ["127.0.0.1:11211"] | ||
| self.mc = Client(servers, debug=1) | ||
| def tearDown(self): | ||
| self.mc.disconnect_all() | ||
| def check_setget(self, key, val, noreply=False): | ||
| self.mc.set(key, val, noreply=noreply) | ||
| newval = self.mc.get(key) | ||
| self.assertEqual(newval, val) | ||
| def test_setget(self): | ||
| self.check_setget("a_string", "some random string") | ||
| self.check_setget("a_string_2", "some random string", noreply=True) | ||
| self.check_setget("an_integer", 42) | ||
| self.check_setget("an_integer_2", 42, noreply=True) | ||
| def test_delete(self): | ||
| self.check_setget("long", int(1 << 30)) | ||
| result = self.mc.delete("long") | ||
| self.assertEqual(result, True) | ||
| self.assertEqual(self.mc.get("long"), None) | ||
| def test_get_multi(self): | ||
| self.check_setget("gm_a_string", "some random string") | ||
| self.check_setget("gm_an_integer", 42) | ||
| self.assertEqual( | ||
| self.mc.get_multi(["gm_a_string", "gm_an_integer"]), | ||
| {"gm_an_integer": 42, "gm_a_string": "some random string"}) | ||
| def test_get_unknown_value(self): | ||
| self.mc.delete("unknown_value") | ||
| self.assertEqual(self.mc.get("unknown_value"), None) | ||
| def test_setget_foostruct(self): | ||
| f = FooStruct() | ||
| self.check_setget("foostruct", f) | ||
| self.check_setget("foostruct_2", f, noreply=True) | ||
| def test_incr(self): | ||
| self.check_setget("i_an_integer", 42) | ||
| self.assertEqual(self.mc.incr("i_an_integer", 1), 43) | ||
| def test_incr_noreply(self): | ||
| self.check_setget("i_an_integer_2", 42) | ||
| self.assertEqual(self.mc.incr("i_an_integer_2", 1, noreply=True), None) | ||
| self.assertEqual(self.mc.get("i_an_integer_2"), 43) | ||
| def test_decr(self): | ||
| self.check_setget("i_an_integer", 42) | ||
| self.assertEqual(self.mc.decr("i_an_integer", 1), 41) | ||
| def test_decr_noreply(self): | ||
| self.check_setget("i_an_integer_2", 42) | ||
| self.assertEqual(self.mc.decr("i_an_integer_2", 1, noreply=True), None) | ||
| self.assertEqual(self.mc.get("i_an_integer_2"), 41) | ||
| def test_sending_spaces(self): | ||
| try: | ||
| self.mc.set("this has spaces", 1) | ||
| except Client.MemcachedKeyCharacterError as err: | ||
| self.assertTrue("characters not allowed" in err.args[0]) | ||
| else: | ||
| self.fail( | ||
| "Expected Client.MemcachedKeyCharacterError, nothing raised") | ||
| def test_sending_control_characters(self): | ||
| try: | ||
| self.mc.set("this\x10has\x11control characters\x02", 1) | ||
| except Client.MemcachedKeyCharacterError as err: | ||
| self.assertTrue("characters not allowed" in err.args[0]) | ||
| else: | ||
| self.fail( | ||
| "Expected Client.MemcachedKeyCharacterError, nothing raised") | ||
| def test_sending_key_too_long(self): | ||
| try: | ||
| self.mc.set('a' * SERVER_MAX_KEY_LENGTH + 'a', 1) | ||
| except Client.MemcachedKeyLengthError as err: | ||
| self.assertTrue("length is >" in err.args[0]) | ||
| else: | ||
| self.fail( | ||
| "Expected Client.MemcachedKeyLengthError, nothing raised") | ||
| # These should work. | ||
| self.mc.set('a' * SERVER_MAX_KEY_LENGTH, 1) | ||
| self.mc.set('a' * SERVER_MAX_KEY_LENGTH, 1, noreply=True) | ||
| def test_setget_boolean(self): | ||
| """GitHub issue #75. Set/get with boolean values.""" | ||
| self.check_setget("bool", True) | ||
| def test_unicode_key(self): | ||
| s = six.u('\u4f1a') | ||
| maxlen = SERVER_MAX_KEY_LENGTH // len(s.encode('utf-8')) | ||
| key = s * maxlen | ||
| self.mc.set(key, 5) | ||
| value = self.mc.get(key) | ||
| self.assertEqual(value, 5) | ||
| def test_ignore_too_large_value(self): | ||
| # NOTE: "MemCached: while expecting[...]" is normal... | ||
| key = 'keyhere' | ||
| value = 'a' * (SERVER_MAX_VALUE_LENGTH // 2) | ||
| self.assertTrue(self.mc.set(key, value)) | ||
| self.assertEqual(self.mc.get(key), value) | ||
| value = 'a' * SERVER_MAX_VALUE_LENGTH | ||
| self.assertFalse(self.mc.set(key, value)) | ||
| # This test fails if the -I option is used on the memcached server | ||
| self.assertTrue(self.mc.get(key) is None) | ||
| def test_get_set_multi_key_prefix(self): | ||
| """Testing set_multi() with no memcacheds running.""" | ||
| prefix = 'pfx_' | ||
| values = {'key1': 'a', 'key2': 'b'} | ||
| errors = self.mc.set_multi(values, key_prefix=prefix) | ||
| self.assertEqual(errors, []) | ||
| keys = list(values) | ||
| self.assertEqual(self.mc.get_multi(keys, key_prefix=prefix), | ||
| values) | ||
| def test_set_multi_dead_servers(self): | ||
| """Testing set_multi() with no memcacheds running.""" | ||
| self.mc.disconnect_all() | ||
| for server in self.mc.servers: | ||
| server.mark_dead('test') | ||
| errors = self.mc.set_multi({'key1': 'a', 'key2': 'b'}) | ||
| self.assertEqual(sorted(errors), ['key1', 'key2']) | ||
| def test_disconnect_all_delete_multi(self): | ||
| """Testing delete_multi() with no memcacheds running.""" | ||
| self.mc.disconnect_all() | ||
| ret = self.mc.delete_multi({'keyhere': 'a', 'keythere': 'b'}) | ||
| self.assertEqual(ret, 1) | ||
| if __name__ == '__main__': | ||
| unittest.main() |
| #!/usr/bin/env python | ||
| # | ||
| # Tests for set_multi. | ||
| # | ||
| # ============== | ||
| # This is based on a skeleton test file, more information at: | ||
| # | ||
| # https://github.com/linsomniac/python-unittest-skeleton | ||
| from __future__ import print_function | ||
| import socket | ||
| import sys | ||
| import unittest | ||
| sys.path.append('..') | ||
| import memcache | ||
| DEBUG = False | ||
| class test_Memcached_Set_Multi(unittest.TestCase): | ||
| def setUp(self): | ||
| RECV_CHUNKS = [b'chunk1'] | ||
| class FakeSocket(object): | ||
| def __init__(self, *args): | ||
| if DEBUG: | ||
| print('FakeSocket{0!r}'.format(args)) | ||
| self._recv_chunks = list(RECV_CHUNKS) | ||
| def connect(self, *args): | ||
| if DEBUG: | ||
| print('FakeSocket.connect{0!r}'.format(args)) | ||
| def sendall(self, *args): | ||
| if DEBUG: | ||
| print('FakeSocket.sendall{0!r}'.format(args)) | ||
| def recv(self, *args): | ||
| if self._recv_chunks: | ||
| data = self._recv_chunks.pop(0) | ||
| else: | ||
| data = '' | ||
| if DEBUG: | ||
| print('FakeSocket.recv{0!r} -> {1!r}'.format(args, data)) | ||
| return data | ||
| def close(self): | ||
| if DEBUG: | ||
| print('FakeSocket.close()') | ||
| self.old_socket = socket.socket | ||
| socket.socket = FakeSocket | ||
| self.mc = memcache.Client(['memcached'], debug=True) | ||
| def tearDown(self): | ||
| socket.socket = self.old_socket | ||
| def test_Socket_Disconnect(self): | ||
| mapping = {'foo': 'FOO', 'bar': 'BAR'} | ||
| bad_keys = self.mc.set_multi(mapping) | ||
| self.assertEqual(sorted(bad_keys), ['bar', 'foo']) | ||
| if DEBUG: | ||
| print('set_multi({0!r}) -> {1!r}'.format(mapping, bad_keys)) | ||
| if __name__ == '__main__': | ||
| unittest.main() |
-26
| [tox] | ||
| minversion = 1.6 | ||
| envlist = py26,py27,py32,py33,py34,pypy,pep8 | ||
| skipsdist = True | ||
| [testenv] | ||
| usedevelop = True | ||
| # Customize pip command, add -U to force updates. | ||
| install_command = pip install -U {opts} {packages} | ||
| deps = -r{toxinidir}/requirements.txt | ||
| -r{toxinidir}/test-requirements.txt | ||
| commands = | ||
| nosetests {posargs} | ||
| python -c 'import memcache; memcache._doctest()' | ||
| [tox:jenkins] | ||
| downloadcache = ~/cache/pip | ||
| [testenv:pep8] | ||
| commands = flake8 | ||
| [testenv:cover] | ||
| commands = nosetests --with-coverage {posargs} | ||
| [flake8] | ||
| exclude = .venv*,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*.egg,.update-venv |
Sorry, the diff of this file is not supported yet
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
82491
-28.63%14
-17.65%1305
-13.23%