Skip to content

Commit b7969e5

Browse files
committed
Merge remote-tracking branch 'origin/357' into 2.7
2 parents 03d20d2 + d5b7f92 commit b7969e5

5 files changed

Lines changed: 44 additions & 18 deletions

File tree

.travis.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,17 @@ env:
77
- TOX_ENV=py27 CASS_VER=20
88
- TOX_ENV=py27 CASS_VER=21
99
- TOX_ENV=py27 CASS_VER=21 CYTHON_DEP=cython
10-
- TOX_ENV=pypy CASS_VER=21
1110
- TOX_ENV=py33 CASS_VER=21
1211
- TOX_ENV=py33 CASS_VER=21 CYTHON_DEP=cython
1312
- TOX_ENV=py34 CASS_VER=21
1413
- TOX_ENV=py34 CASS_VER=21 CYTHON_DEP=cython
14+
- TOX_ENV=pypy CASS_VER=21
15+
- TOX_ENV=pypy3 CASS_VER=21
1516

1617
before_install:
1718
- sudo apt-get update -y
1819
- sudo apt-get install -y build-essential python-dev
20+
- sudo apt-get install -y pypy-dev
1921
- sudo apt-get install -y libev4 libev-dev
2022
- sudo echo "deb http://www.apache.org/dist/cassandra/debian ${CASS_VER}x main" | sudo tee -a /etc/apt/sources.list
2123
- sudo echo "deb-src http://www.apache.org/dist/cassandra/debian ${CASS_VER}x main" | sudo tee -a /etc/apt/sources.list

cassandra/murmur3.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ typedef int Py_ssize_t;
2020
#define PY_SSIZE_T_MIN INT_MIN
2121
#endif
2222

23+
#ifdef PYPY_VERSION
24+
#define COMPILING_IN_PYPY 1
25+
#define COMPILING_IN_CPYTHON 0
26+
#else
27+
#define COMPILING_IN_PYPY 0
28+
#define COMPILING_IN_CPYTHON 1
29+
#endif
2330
//-----------------------------------------------------------------------------
2431
// Platform-specific functions and macros
2532

@@ -179,7 +186,8 @@ struct module_state {
179186
PyObject *error;
180187
};
181188

182-
#if PY_MAJOR_VERSION >= 3
189+
// pypy3 doesn't have GetState yet.
190+
#if COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
183191
#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
184192
#else
185193
#define GETSTATE(m) (&_state)

setup.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ def run_setup(extensions):
235235
**kw)
236236

237237
is_windows = os.name == 'nt'
238+
238239
if is_windows:
239240
build_extensions.error_message = """
240241
===============================================================================
@@ -267,7 +268,7 @@ def run_setup(extensions):
267268
[Extension('cassandra.%s' % m, ['cassandra/%s.py' % m], extra_compile_args=compile_args) for m in cython_candidates],
268269
exclude_failures=True))
269270
except ImportError:
270-
print("Cython is not installed. Not compiling core driver files as extensions (optional).")
271+
sys.stderr.write("Cython is not installed. Not compiling core driver files as extensions (optional).")
271272

272273
if "--no-extensions" in sys.argv:
273274
extensions = []
@@ -289,15 +290,25 @@ def run_setup(extensions):
289290
===============================================================================
290291
"""
291292

293+
pypy_unsupported_msg = \
294+
"""
295+
=================================================================================
296+
Some optional C extensions are not supported in PyPy. Only murmur3 will be built.
297+
=================================================================================
298+
"""
299+
292300
if extensions:
293-
if (sys.platform.startswith("java")
294-
or sys.platform == "cli"
295-
or "PyPy" in sys.version):
301+
if "PyPy" in sys.version:
302+
sys.stderr.write(pypy_unsupported_msg)
303+
extensions = [ext for ext in extensions if ext is murmur3_ext]
304+
305+
if (sys.platform.startswith("java") or sys.platform == "cli"):
296306
sys.stderr.write(platform_unsupported_msg)
297-
extensions = ()
307+
extensions = []
298308
elif sys.byteorder == "big":
299309
sys.stderr.write(arch_unsupported_msg)
300-
extensions = ()
310+
extensions = []
311+
301312

302313
while True:
303314
# try to build as many of the extensions as we can

tests/unit/io/test_twistedreactor.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -199,17 +199,17 @@ def test_handle_read__incomplete(self):
199199
Verify that handle_read() processes incomplete messages properly.
200200
"""
201201
self.obj_ut.process_msg = Mock()
202-
self.assertEqual(self.obj_ut._iobuf.getvalue(), '') # buf starts empty
202+
self.assertEqual(self.obj_ut._iobuf.getvalue(), b'') # buf starts empty
203203
# incomplete header
204-
self.obj_ut._iobuf.write('\x84\x00\x00\x00\x00')
204+
self.obj_ut._iobuf.write(b'\x84\x00\x00\x00\x00')
205205
self.obj_ut.handle_read()
206-
self.assertEqual(self.obj_ut._iobuf.getvalue(), '\x84\x00\x00\x00\x00')
206+
self.assertEqual(self.obj_ut._iobuf.getvalue(), b'\x84\x00\x00\x00\x00')
207207

208208
# full header, but incomplete body
209-
self.obj_ut._iobuf.write('\x00\x00\x00\x15')
209+
self.obj_ut._iobuf.write(b'\x00\x00\x00\x15')
210210
self.obj_ut.handle_read()
211211
self.assertEqual(self.obj_ut._iobuf.getvalue(),
212-
'\x84\x00\x00\x00\x00\x00\x00\x00\x15')
212+
b'\x84\x00\x00\x00\x00\x00\x00\x00\x15')
213213
self.assertEqual(self.obj_ut._current_frame.end_pos, 30)
214214

215215
# verify we never attempted to process the incomplete message
@@ -220,14 +220,14 @@ def test_handle_read__fullmessage(self):
220220
Verify that handle_read() processes complete messages properly.
221221
"""
222222
self.obj_ut.process_msg = Mock()
223-
self.assertEqual(self.obj_ut._iobuf.getvalue(), '') # buf starts empty
223+
self.assertEqual(self.obj_ut._iobuf.getvalue(), b'') # buf starts empty
224224

225225
# write a complete message, plus 'NEXT' (to simulate next message)
226226
# assumes protocol v3+ as default Connection.protocol_version
227-
body = 'this is the drum roll'
228-
extra = 'NEXT'
227+
body = b'this is the drum roll'
228+
extra = b'NEXT'
229229
self.obj_ut._iobuf.write(
230-
'\x84\x01\x00\x02\x03\x00\x00\x00\x15' + body + extra)
230+
b'\x84\x01\x00\x02\x03\x00\x00\x00\x15' + body + extra)
231231
self.obj_ut.handle_read()
232232
self.assertEqual(self.obj_ut._iobuf.getvalue(), extra)
233233
self.obj_ut.process_msg.assert_called_with(

tox.ini

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[tox]
2-
envlist = py{26,27,33,34},pypy
2+
envlist = py{26,27,33,34},pypy,pypy3
33

44
[base]
55
deps = nose
@@ -25,5 +25,10 @@ commands = nosetests --verbosity=2 --no-path-adjustment {toxinidir}/tests/unit/
2525
[testenv:pypy]
2626
deps = {[base]deps}
2727
commands = nosetests --verbosity=2 {toxinidir}/tests/unit/
28+
29+
[testenv:pypy3]
30+
deps = {[base]deps}
31+
commands = nosetests --verbosity=2 {toxinidir}/tests/unit/
32+
2833
# cqlengine/test_timestamp.py uses sure, which fails in pypy presently
2934
# could remove sure usage

0 commit comments

Comments
 (0)