Skip to content

Commit

Permalink
Add a new TORNADO_EXTENSION environment variable for testing purposes.
Browse files Browse the repository at this point in the history
This variable can be set to 0 to suppress or 1 to require the use of the
extension (instead of the default to use it when it is available but silently
fall back).  Require the extension to be present on travis-ci.
  • Loading branch information
bdarnell committed Jan 17, 2014
1 parent 21d6cde commit 70659cb
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@ install:
- if [[ $TRAVIS_PYTHON_VERSION == 'pypy' && $DEPS == true ]]; then pip install --use-mirrors futures mock; fi
- if [[ $TRAVIS_PYTHON_VERSION == '3.2' && $DEPS == true ]]; then pip install --use-mirrors pycares mock; fi
- if [[ $TRAVIS_PYTHON_VERSION == '3.3' && $DEPS == true ]]; then pip install --use-mirrors pycares; fi
# On travis the extension should always be built
- if [[ $TRAVIS_PYTHON_VERSION != 'pypy' ]]; then export TORNADO_EXTENSION=1; fi
- python setup.py install
- pip install --use-mirrors coveralls

script:
- if [[ $TRAVIS_PYTHON_VERSION != 'pypy' ]]; then export TORNADO_EXTENSION=1; fi
- export TARGET="-m tornado.test.runtests"
# We use "python -m coverage" instead of the "bin/coverage" script
# so we can pass additional arguments to python. However, this doesn't
Expand Down
10 changes: 8 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
# License for the specific language governing permissions and limitations
# under the License.

import os
import platform
import sys
import warnings
Expand Down Expand Up @@ -118,14 +119,20 @@ def build_extension(self, ext):
with open('README.rst') as f:
kwargs['long_description'] = f.read()

if platform.python_implementation() == 'CPython':
if (platform.python_implementation() == 'CPython' and
os.environ.get('TORNADO_EXTENSION') != '0'):
# This extension builds and works on pypy as well, although pypy's jit
# produces equivalent performance.
kwargs['ext_modules'] = [
Extension('tornado.speedups',
sources=['tornado/speedups.c']),
]

if os.environ.get('TORNADO_EXTENSION') != '1':
# Unless the user has specified that the extension is mandatory,
# fall back to the pure-python implementation on any build failure.
kwargs['cmdclass'] = {'build_ext': custom_build_ext}

if setuptools is not None:
# If setuptools is not available, you're on your own for dependencies.
if sys.version_info < (3, 2):
Expand Down Expand Up @@ -170,6 +177,5 @@ def build_extension(self, ext):
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
],
cmdclass={"build_ext": custom_build_ext},
**kwargs
)
9 changes: 6 additions & 3 deletions tornado/websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -913,12 +913,15 @@ def _websocket_mask_python(mask, data):
else:
return unmasked.tostring()

if os.environ.get('TORNADO_NO_EXTENSION'):
# This environment variable exists to make it easier to do performance comparisons;
# it's not guaranteed to remain supported in the future.
if (os.environ.get('TORNADO_NO_EXTENSION') or
os.environ.get('TORNADO_EXTENSION') == '0'):
# These environment variables exist to make it easier to do performance
# comparisons; they are not guaranteed to remain supported in the future.
_websocket_mask = _websocket_mask_python
else:
try:
from tornado.speedups import websocket_mask as _websocket_mask
except ImportError:
if os.environ.get('TORNADO_EXTENSION') == '1':
raise
_websocket_mask = _websocket_mask_python

0 comments on commit 70659cb

Please sign in to comment.