Add optional cythonized core driver files.

This commit is contained in:
Adam Holmberg
2015-07-08 09:46:00 -05:00
parent 858a26879c
commit 9de29a7665
3 changed files with 27 additions and 10 deletions

3
.gitignore vendored
View File

@@ -17,6 +17,9 @@ tests/integration/ccm
setuptools*.tar.gz
setuptools*.egg
cassandra/*.c
!cassandra/murmur3.c
# OSX
.DS_Store

View File

@@ -48,13 +48,15 @@ if six.PY3:
def varint_unpack(term):
val = int(''.join("%02x" % i for i in term), 16)
if (term[0] & 128) != 0:
val -= 1 << (len(term) * 8)
len_term = len(term) # pulling this out of the expression to avoid overflow in cython optimized code
val -= 1 << (len_term * 8)
return val
else:
def varint_unpack(term): # noqa
val = int(term.encode('hex'), 16)
if (ord(term[0]) & 128) != 0:
val = val - (1 << (len(term) * 8))
len_term = len(term) # pulling this out of the expression to avoid overflow in cython optimized code
val = val - (1 << (len_term * 8))
return val

View File

@@ -234,16 +234,28 @@ def run_setup(extensions):
],
**kw)
extensions = [murmur3_ext, libev_ext]
extensions = []
if "--no-murmur3" not in sys.argv:
extensions.append(murmur3_ext)
if "--no-libev" not in sys.argv:
extensions.append(libev_ext)
if "--no-cython" not in sys.argv:
try:
from Cython.Build import cythonize
cython_candidates = ['cluster', 'concurrent', 'connection', 'cqltypes', 'marshal', 'metadata', 'pool', 'protocol', 'query', 'util']
extensions.extend(cythonize(
[Extension('cassandra.%s' % m, ['cassandra/%s.py' % m], extra_compile_args=['-Wno-unused-function']) for m in cython_candidates],
exclude_failures=True))
except ImportError:
warnings.warn("Cython is not installed. Not compiling core driver files as extensions (optional).")
if "--no-extensions" in sys.argv:
sys.argv = [a for a in sys.argv if a != "--no-extensions"]
extensions = []
elif "--no-murmur3" in sys.argv:
sys.argv = [a for a in sys.argv if a != "--no-murmur3"]
extensions.remove(murmur3_ext)
elif "--no-libev" in sys.argv:
sys.argv = [a for a in sys.argv if a != "--no-libev"]
extensions.remove(libev_ext)
sys.argv = [a for a in sys.argv if a not in ("--no-murmur3", "--no-libev", "--no-cython", "--no-extensions")]
is_windows = os.name == 'nt'
if is_windows: