diff --git a/.travis.yml b/.travis.yml index 7ce7984..2fe661a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,35 +6,35 @@ matrix: - python: "2.7" include: - python: "2.6" - env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.3.6 + env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py26 - python: "2.6" - env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.4.6 + env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py26 - python: "2.6" - env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.3.6 + env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py26 - python: "2.6" - env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.4.6 + env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py26 - python: "2.7" - env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.3.6 + env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py27 - python: "2.7" - env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.4.6 + env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py27 - python: "2.7" - env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.3.6 + env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py27 - python: "2.7" - env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.4.6 + env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py27 - python: "2.7" - env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.5.0-alpha + env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.5.0-alpha TOX_VENV=py27 - python: "3.3" - env: ZOOKEEPER_VERSION=3.3.6 + env: ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py33 - python: "3.3" - env: ZOOKEEPER_VERSION=3.4.6 + env: ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py33 - python: "3.4" - env: ZOOKEEPER_VERSION=3.3.6 + env: ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py34 - python: "3.4" - env: ZOOKEEPER_VERSION=3.4.6 + env: ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py34 - python: "pypy" - env: ZOOKEEPER_VERSION=3.3.6 + env: ZOOKEEPER_VERSION=3.3.6 TOX_VENV=pypy - python: "pypy" - env: ZOOKEEPER_VERSION=3.4.6 + env: ZOOKEEPER_VERSION=3.4.6 TOX_VENV=pypy notifications: email: false diff --git a/Makefile b/Makefile index a1f5dcd..a4224b6 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,10 @@ HERE = $(shell pwd) BIN = $(HERE)/bin PYTHON = $(BIN)/python - PIP_DOWNLOAD_CACHE ?= $(HERE)/.pip_cache INSTALL = $(BIN)/pip install INSTALL += --download-cache $(PIP_DOWNLOAD_CACHE) - +TOX_VENV ?= py27 BUILD_DIRS = bin build include lib lib64 man share GEVENT_VERSION ?= 1.0.1 @@ -14,19 +13,15 @@ PYPY = $(shell $(PYTHON_EXE) -c "import sys; print(getattr(sys, 'pypy_version_in TRAVIS ?= false TRAVIS_PYTHON_VERSION ?= $(shell $(PYTHON_EXE) -c "import sys; print('.'.join([str(s) for s in sys.version_info][:2]))") -ZOOKEEPER = $(BIN)/zookeeper -ZOOKEEPER_VERSION ?= 3.4.6 -ZOOKEEPER_PATH ?= $(ZOOKEEPER) - -GEVENT_SUPPORTED = yes +GREENLET_SUPPORTED = yes ifeq ($(findstring 3.,$(TRAVIS_PYTHON_VERSION)), 3.) - GEVENT_SUPPORTED = no + GREENLET_SUPPORTED = no endif ifeq ($(PYPY),yes) - GEVENT_SUPPORTED = no + GREENLET_SUPPORTED = no endif -.PHONY: all build clean test zookeeper clean-zookeeper +.PHONY: all build clean test all: build @@ -34,7 +29,8 @@ $(PYTHON): python sw/virtualenv.py . build: $(PYTHON) -ifeq ($(GEVENT_SUPPORTED),yes) +ifeq ($(GREENLET_SUPPORTED),yes) + $(INSTALL) -U -r requirements_eventlet.txt $(INSTALL) -U -r requirements_gevent.txt $(INSTALL) -f https://github.com/surfly/gevent/releases gevent==$(GEVENT_VERSION) endif @@ -48,24 +44,9 @@ endif clean: rm -rf $(BUILD_DIRS) -test: - ZOOKEEPER_PATH=$(ZOOKEEPER_PATH) NOSE_LOGFORMAT='%(thread)d:%(filename)s: %(levelname)s: %(message)s' \ - $(BIN)/nosetests -d -v --with-coverage kazoo.tests +test: $(PYTHON) + tox -e$(TOX_VENV) html: cd docs && \ make html - -$(ZOOKEEPER): - @echo "Installing Zookeeper" - mkdir -p $(BIN) - cd $(BIN) && \ - curl -C - http://apache.osuosl.org/zookeeper/zookeeper-$(ZOOKEEPER_VERSION)/zookeeper-$(ZOOKEEPER_VERSION).tar.gz | tar -zx - mv $(BIN)/zookeeper-$(ZOOKEEPER_VERSION) $(ZOOKEEPER_PATH) - chmod a+x $(ZOOKEEPER_PATH)/bin/zkServer.sh - @echo "Finished installing Zookeeper" - -zookeeper: $(ZOOKEEPER) - -clean-zookeeper: - rm -rf zookeeper $(ZOOKEEPER_PATH) diff --git a/requirements.txt b/requirements.txt index 064f072..87f71c2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ coverage==3.7.1 mock==1.0.1 nose==1.3.3 +flake8==2.3.0 diff --git a/setup-zookeeper-env.sh b/setup-zookeeper-env.sh new file mode 100755 index 0000000..5eae2d6 --- /dev/null +++ b/setup-zookeeper-env.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +set -x -e + +HERE=`pwd` +ZOO_TMP_DIR=$(mktemp -d /tmp/ZOO-TMP-XXXXX) +mkdir -p $ZOO_TMP_DIR/bin +mkdir -p $ZOO_TMP_DIR/log + +ZOOKEEPER_STARTED=0 +ZOOKEEPER_VERSION=${ZOOKEEPER_VERSION:-3.4.6} +ZOO_BASE_DIR="$PWD/bin/" +ZOOKEEPER_PATH="$ZOO_BASE_DIR/zookeeper-$ZOOKEEPER_VERSION" + + +function download_zookeeper(){ + mkdir -p $ZOO_BASE_DIR + cd $ZOO_BASE_DIR && \ + curl -C - http://apache.osuosl.org/zookeeper/zookeeper-$ZOOKEEPER_VERSION/zookeeper-$ZOOKEEPER_VERSION.tar.gz | tar -zx + chmod a+x $ZOOKEEPER_PATH/bin/zkServer.sh +} + + +function stop_zookeeper_server(){ + $ZOO_TMP_DIR/bin/zkServer.sh stop +} + + +function clean_exit(){ + local error_code="$?" + if [ $ZOOKEEPER_STARTED -eq 1 ]; then + stop_zookeeper_server + fi + rm -rf ${ZOO_TMP_DIR} + return $error_code +} + + +function start_zookeeper_server(){ + # Copy zookeeper scripts in temporary directory + cp $ZOOKEEPER_PATH/bin/* $ZOO_TMP_DIR/bin + + # Copy zookeeper conf and set dataDir variable to the zookeeper temporary + # directory + cp "$ZOOKEEPER_PATH/conf/zoo_sample.cfg" "$ZOO_TMP_DIR/zoo.cfg" + + sed -i -r "s@(dataDir *= *).*@\1$ZOO_TMP_DIR@" $ZOO_TMP_DIR/zoo.cfg + + # Replace some variables by the zookeeper temporary directory + sed -i -r "s@(ZOOCFGDIR *= *).*@\1$ZOO_TMP_DIR@" $ZOO_TMP_DIR/bin/zkEnv.sh + + sed -i -r "s@(ZOO_LOG_DIR *= *).*@\1$ZOO_TMP_DIR/log@" $ZOO_TMP_DIR/bin/zkEnv.sh + + $ZOO_TMP_DIR/bin/zkServer.sh start +} + + +if [ ! -d "$ZOOKEEPER_PATH" ]; then + download_zookeeper +fi + +trap "clean_exit" EXIT + +start_zookeeper_server +if [ $? -eq 0 ]; then + ZOOKEEPER_STARTED=1 +fi + +export ZOOKEEPER_PATH +cd $HERE + +# Yield execution to venv command +$* + diff --git a/setup.py b/setup.py index d094aeb..3af11ce 100644 --- a/setup.py +++ b/setup.py @@ -20,6 +20,7 @@ tests_require = install_requires + [ 'coverage', 'mock', 'nose', + 'flake8', ] if not (PYTHON3 or PYPY): diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..c72e3aa --- /dev/null +++ b/tox.ini @@ -0,0 +1,34 @@ +[tox] +minversion = 1.6 +skipsdist = True +envlist = pep8, + py26, + py27, + py33, + py34, + pypy + +[testenv:pep8] +commands = flake8 {posargs} + +[testenv] +usedevelop = True +install_command = pip install {opts} {packages} +setenv = VIRTUAL_ENV={envdir} +deps = -r{toxinidir}/requirements.txt + -r{toxinidir}/requirements_sphinx.txt +commands = {toxinidir}/setup-zookeeper-env.sh nosetests {posargs} -d -v --with-coverage kazoo.tests + +[testenv:py27] +deps = {[testenv]deps} + -r{toxinidir}/requirements_gevent.txt + -r{toxinidir}/requirements_eventlet.txt + +[testenv:py26] +deps = {[testenv]deps} + -r{toxinidir}/requirements_gevent.txt + -r{toxinidir}/requirements_eventlet.txt + +[flake8] +builtins = _ +exclude = .venv,.tox,dist,doc,*egg,.git,build,tools