Merge remote-tracking branch 'origin/357' into 2.7
This commit is contained in:
@@ -7,15 +7,17 @@ env:
|
|||||||
- TOX_ENV=py27 CASS_VER=20
|
- TOX_ENV=py27 CASS_VER=20
|
||||||
- TOX_ENV=py27 CASS_VER=21
|
- TOX_ENV=py27 CASS_VER=21
|
||||||
- TOX_ENV=py27 CASS_VER=21 CYTHON_DEP=cython
|
- TOX_ENV=py27 CASS_VER=21 CYTHON_DEP=cython
|
||||||
- TOX_ENV=pypy CASS_VER=21
|
|
||||||
- TOX_ENV=py33 CASS_VER=21
|
- TOX_ENV=py33 CASS_VER=21
|
||||||
- TOX_ENV=py33 CASS_VER=21 CYTHON_DEP=cython
|
- TOX_ENV=py33 CASS_VER=21 CYTHON_DEP=cython
|
||||||
- TOX_ENV=py34 CASS_VER=21
|
- TOX_ENV=py34 CASS_VER=21
|
||||||
- TOX_ENV=py34 CASS_VER=21 CYTHON_DEP=cython
|
- TOX_ENV=py34 CASS_VER=21 CYTHON_DEP=cython
|
||||||
|
- TOX_ENV=pypy CASS_VER=21
|
||||||
|
- TOX_ENV=pypy3 CASS_VER=21
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get update -y
|
- sudo apt-get update -y
|
||||||
- sudo apt-get install -y build-essential python-dev
|
- sudo apt-get install -y build-essential python-dev
|
||||||
|
- sudo apt-get install -y pypy-dev
|
||||||
- sudo apt-get install -y libev4 libev-dev
|
- sudo apt-get install -y libev4 libev-dev
|
||||||
- sudo echo "deb http://www.apache.org/dist/cassandra/debian ${CASS_VER}x main" | sudo tee -a /etc/apt/sources.list
|
- sudo echo "deb http://www.apache.org/dist/cassandra/debian ${CASS_VER}x main" | sudo tee -a /etc/apt/sources.list
|
||||||
- sudo echo "deb-src http://www.apache.org/dist/cassandra/debian ${CASS_VER}x main" | sudo tee -a /etc/apt/sources.list
|
- sudo echo "deb-src http://www.apache.org/dist/cassandra/debian ${CASS_VER}x main" | sudo tee -a /etc/apt/sources.list
|
||||||
|
@@ -20,6 +20,13 @@ typedef int Py_ssize_t;
|
|||||||
#define PY_SSIZE_T_MIN INT_MIN
|
#define PY_SSIZE_T_MIN INT_MIN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PYPY_VERSION
|
||||||
|
#define COMPILING_IN_PYPY 1
|
||||||
|
#define COMPILING_IN_CPYTHON 0
|
||||||
|
#else
|
||||||
|
#define COMPILING_IN_PYPY 0
|
||||||
|
#define COMPILING_IN_CPYTHON 1
|
||||||
|
#endif
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Platform-specific functions and macros
|
// Platform-specific functions and macros
|
||||||
|
|
||||||
@@ -179,7 +186,8 @@ struct module_state {
|
|||||||
PyObject *error;
|
PyObject *error;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if PY_MAJOR_VERSION >= 3
|
// pypy3 doesn't have GetState yet.
|
||||||
|
#if COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
|
||||||
#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
|
#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
|
||||||
#else
|
#else
|
||||||
#define GETSTATE(m) (&_state)
|
#define GETSTATE(m) (&_state)
|
||||||
|
23
setup.py
23
setup.py
@@ -235,6 +235,7 @@ def run_setup(extensions):
|
|||||||
**kw)
|
**kw)
|
||||||
|
|
||||||
is_windows = os.name == 'nt'
|
is_windows = os.name == 'nt'
|
||||||
|
|
||||||
if is_windows:
|
if is_windows:
|
||||||
build_extensions.error_message = """
|
build_extensions.error_message = """
|
||||||
===============================================================================
|
===============================================================================
|
||||||
@@ -267,7 +268,7 @@ if "--no-cython" not in sys.argv:
|
|||||||
[Extension('cassandra.%s' % m, ['cassandra/%s.py' % m], extra_compile_args=compile_args) for m in cython_candidates],
|
[Extension('cassandra.%s' % m, ['cassandra/%s.py' % m], extra_compile_args=compile_args) for m in cython_candidates],
|
||||||
exclude_failures=True))
|
exclude_failures=True))
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print("Cython is not installed. Not compiling core driver files as extensions (optional).")
|
sys.stderr.write("Cython is not installed. Not compiling core driver files as extensions (optional).")
|
||||||
|
|
||||||
if "--no-extensions" in sys.argv:
|
if "--no-extensions" in sys.argv:
|
||||||
extensions = []
|
extensions = []
|
||||||
@@ -289,15 +290,25 @@ The optional C extensions are not supported on big-endian systems.
|
|||||||
===============================================================================
|
===============================================================================
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
pypy_unsupported_msg = \
|
||||||
|
"""
|
||||||
|
=================================================================================
|
||||||
|
Some optional C extensions are not supported in PyPy. Only murmur3 will be built.
|
||||||
|
=================================================================================
|
||||||
|
"""
|
||||||
|
|
||||||
if extensions:
|
if extensions:
|
||||||
if (sys.platform.startswith("java")
|
if "PyPy" in sys.version:
|
||||||
or sys.platform == "cli"
|
sys.stderr.write(pypy_unsupported_msg)
|
||||||
or "PyPy" in sys.version):
|
extensions = [ext for ext in extensions if ext is murmur3_ext]
|
||||||
|
|
||||||
|
if (sys.platform.startswith("java") or sys.platform == "cli"):
|
||||||
sys.stderr.write(platform_unsupported_msg)
|
sys.stderr.write(platform_unsupported_msg)
|
||||||
extensions = ()
|
extensions = []
|
||||||
elif sys.byteorder == "big":
|
elif sys.byteorder == "big":
|
||||||
sys.stderr.write(arch_unsupported_msg)
|
sys.stderr.write(arch_unsupported_msg)
|
||||||
extensions = ()
|
extensions = []
|
||||||
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
# try to build as many of the extensions as we can
|
# try to build as many of the extensions as we can
|
||||||
|
@@ -199,17 +199,17 @@ class TestTwistedConnection(unittest.TestCase):
|
|||||||
Verify that handle_read() processes incomplete messages properly.
|
Verify that handle_read() processes incomplete messages properly.
|
||||||
"""
|
"""
|
||||||
self.obj_ut.process_msg = Mock()
|
self.obj_ut.process_msg = Mock()
|
||||||
self.assertEqual(self.obj_ut._iobuf.getvalue(), '') # buf starts empty
|
self.assertEqual(self.obj_ut._iobuf.getvalue(), b'') # buf starts empty
|
||||||
# incomplete header
|
# incomplete header
|
||||||
self.obj_ut._iobuf.write('\x84\x00\x00\x00\x00')
|
self.obj_ut._iobuf.write(b'\x84\x00\x00\x00\x00')
|
||||||
self.obj_ut.handle_read()
|
self.obj_ut.handle_read()
|
||||||
self.assertEqual(self.obj_ut._iobuf.getvalue(), '\x84\x00\x00\x00\x00')
|
self.assertEqual(self.obj_ut._iobuf.getvalue(), b'\x84\x00\x00\x00\x00')
|
||||||
|
|
||||||
# full header, but incomplete body
|
# full header, but incomplete body
|
||||||
self.obj_ut._iobuf.write('\x00\x00\x00\x15')
|
self.obj_ut._iobuf.write(b'\x00\x00\x00\x15')
|
||||||
self.obj_ut.handle_read()
|
self.obj_ut.handle_read()
|
||||||
self.assertEqual(self.obj_ut._iobuf.getvalue(),
|
self.assertEqual(self.obj_ut._iobuf.getvalue(),
|
||||||
'\x84\x00\x00\x00\x00\x00\x00\x00\x15')
|
b'\x84\x00\x00\x00\x00\x00\x00\x00\x15')
|
||||||
self.assertEqual(self.obj_ut._current_frame.end_pos, 30)
|
self.assertEqual(self.obj_ut._current_frame.end_pos, 30)
|
||||||
|
|
||||||
# verify we never attempted to process the incomplete message
|
# verify we never attempted to process the incomplete message
|
||||||
@@ -220,14 +220,14 @@ class TestTwistedConnection(unittest.TestCase):
|
|||||||
Verify that handle_read() processes complete messages properly.
|
Verify that handle_read() processes complete messages properly.
|
||||||
"""
|
"""
|
||||||
self.obj_ut.process_msg = Mock()
|
self.obj_ut.process_msg = Mock()
|
||||||
self.assertEqual(self.obj_ut._iobuf.getvalue(), '') # buf starts empty
|
self.assertEqual(self.obj_ut._iobuf.getvalue(), b'') # buf starts empty
|
||||||
|
|
||||||
# write a complete message, plus 'NEXT' (to simulate next message)
|
# write a complete message, plus 'NEXT' (to simulate next message)
|
||||||
# assumes protocol v3+ as default Connection.protocol_version
|
# assumes protocol v3+ as default Connection.protocol_version
|
||||||
body = 'this is the drum roll'
|
body = b'this is the drum roll'
|
||||||
extra = 'NEXT'
|
extra = b'NEXT'
|
||||||
self.obj_ut._iobuf.write(
|
self.obj_ut._iobuf.write(
|
||||||
'\x84\x01\x00\x02\x03\x00\x00\x00\x15' + body + extra)
|
b'\x84\x01\x00\x02\x03\x00\x00\x00\x15' + body + extra)
|
||||||
self.obj_ut.handle_read()
|
self.obj_ut.handle_read()
|
||||||
self.assertEqual(self.obj_ut._iobuf.getvalue(), extra)
|
self.assertEqual(self.obj_ut._iobuf.getvalue(), extra)
|
||||||
self.obj_ut.process_msg.assert_called_with(
|
self.obj_ut.process_msg.assert_called_with(
|
||||||
|
7
tox.ini
7
tox.ini
@@ -1,5 +1,5 @@
|
|||||||
[tox]
|
[tox]
|
||||||
envlist = py{26,27,33,34},pypy
|
envlist = py{26,27,33,34},pypy,pypy3
|
||||||
|
|
||||||
[base]
|
[base]
|
||||||
deps = nose
|
deps = nose
|
||||||
@@ -25,5 +25,10 @@ commands = nosetests --verbosity=2 --no-path-adjustment {toxinidir}/tests/unit/
|
|||||||
[testenv:pypy]
|
[testenv:pypy]
|
||||||
deps = {[base]deps}
|
deps = {[base]deps}
|
||||||
commands = nosetests --verbosity=2 {toxinidir}/tests/unit/
|
commands = nosetests --verbosity=2 {toxinidir}/tests/unit/
|
||||||
|
|
||||||
|
[testenv:pypy3]
|
||||||
|
deps = {[base]deps}
|
||||||
|
commands = nosetests --verbosity=2 {toxinidir}/tests/unit/
|
||||||
|
|
||||||
# cqlengine/test_timestamp.py uses sure, which fails in pypy presently
|
# cqlengine/test_timestamp.py uses sure, which fails in pypy presently
|
||||||
# could remove sure usage
|
# could remove sure usage
|
||||||
|
Reference in New Issue
Block a user