[tox] envlist = py37,py27,pep8 minversion = 3.18.0 requires = # required to support py27/py36 envs virtualenv<20.22 # project-wide requirement; see .zuul.yaml tox<4 [pytest] addopts = --verbose -p no:requests_mock [testenv] usedevelop = True install_command = pip install -U {opts} {packages} setenv = VIRTUAL_ENV={envdir} deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = find {envdir} ( -type f -o -type l ) -name "*.py[co]" -delete find {envdir} -type d -name "__pycache__" -delete bash -ec "pytest --cov=swift --cov-branch --cov-report=html:cover --cov-report term {posargs:test/unit} || pytest --last-failed {posargs:test/unit}" allowlist_externals = bash find passenv = SWIFT_* [testenv:s3api] usedevelop = False deps = {[testenv:py36]deps} commands = pytest {posargs:test/s3api} passenv = SWIFT_* # For some reason we hit some EPERM issue when building the package for these tests? # (CentOS 8, CPython 3.6, tox 3.28.0) skipsdist = True skip_install = True [testenv:py27] deps = -c{toxinidir}/py2-constraints.txt -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py36] deps = -c{toxinidir}/py36-constraints.txt -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py37] deps = {[testenv:py36]deps} [testenv:cover] setenv = VIRTUAL_ENV={envdir} [testenv:pep8] allowlist_externals = ./.manpages commands = flake8 {posargs:swift test doc setup.py} flake8 --filename=bin/swift* bin python ./setup.py check --restructuredtext --strict bandit -c bandit.yaml -r swift -n 5 ./.manpages {posargs} [testenv:func-py3] basepython = python3 deps = {[testenv:py36]deps} allowlist_externals = ./.functests commands = ./.functests {posargs} [testenv:func-ec-py3] basepython = python3 deps = {[testenv:py36]deps} allowlist_externals = ./.functests commands = ./.functests {posargs} setenv = SWIFT_TEST_IN_PROCESS=1 SWIFT_TEST_IN_PROCESS_CONF_LOADER=ec [testenv:func-encryption-py3] basepython = python3 deps = {[testenv:py36]deps} allowlist_externals = ./.functests commands = ./.functests {posargs} setenv = SWIFT_TEST_IN_PROCESS=1 SWIFT_TEST_IN_PROCESS_CONF_LOADER=encryption [testenv:func] basepython = python2.7 deps = {[testenv:py27]deps} allowlist_externals = ./.functests commands = ./.functests {posargs} [testenv:func-encryption] basepython = python2.7 deps = {[testenv:py27]deps} allowlist_externals = ./.functests commands = ./.functests {posargs} setenv = SWIFT_TEST_IN_PROCESS=1 SWIFT_TEST_IN_PROCESS_CONF_LOADER=encryption [testenv:func-ec] basepython = python2.7 deps = {[testenv:py27]deps} allowlist_externals = ./.functests commands = ./.functests {posargs} setenv = SWIFT_TEST_IN_PROCESS=1 SWIFT_TEST_IN_PROCESS_CONF_LOADER=ec [testenv:venv] commands = {posargs} [testenv:docs] basepython = python3 deps = -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/doc/requirements.txt -r{toxinidir}/requirements.txt commands = sphinx-build -W -b html doc/source doc/build/html [testenv:api-ref] # This environment is called from CI scripts to test and publish # the API Ref to docs.openstack.org. basepython = python3 deps = -r{toxinidir}/doc/requirements.txt allowlist_externals = rm commands = rm -rf api-ref/build sphinx-build -W -b html -d api-ref/build/doctrees api-ref/source api-ref/build/html [testenv:bandit] deps = -r{toxinidir}/test-requirements.txt commands = bandit -c bandit.yaml -r swift -n 5 [flake8] # it's not a bug that we aren't using all of hacking, ignore: # H101: Use TODO(NAME) # H202: assertRaises Exception too broad # H214: Use assertIn/NotIn ... # H216: The unittest.mock module should be used rather than ... # H301: one import per line # H306: imports not in alphabetical order (time, os) # H404: multi line docstring should start without a leading new line # H405: multi line docstring summary not separated with an empty line # H501: Do not use self.__dict__ for string formatting # Disabled with going to hacking 2.0, needs further investigation and # changes to enable: # E402: module level import not at top of file # E731 do not assign a lambda expression, use a def # E741 ambiguous variable name # Swift team needs to decide if they want to enable either of these: # W503: line break before binary operator # W504: line break after binary operator ignore = H101,H202,H214,H216,H301,H306,H404,H405,H501,W503,W504,E402,E731,E741 exclude = .venv,.tox,dist,*egg filename = *.py,bin/* show-source = True [testenv:bindep] # Do not install any requirements. We want this to be fast and work even if # system dependencies are missing, since it's used to tell you what system # dependencies are missing! This also means that bindep must be installed # separately, outside of the requirements files. skip_install = True deps = bindep commands = bindep test doc [testenv:releasenotes] basepython = python3 deps = -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/doc/requirements.txt commands = sphinx-build -a -W -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html [testenv:lower-constraints] # FIXME(dhellmann): We'll want to uncomment this # when the full test suite works with python 3. # basepython = python3 basepython = python2.7 deps = -c{toxinidir}/lower-constraints.txt -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt # Drop the --upgrade flag so we don't accidentally drag anything forward when # we install swift install_command = pip install {opts} {packages} [testenv:pdf-docs] basepython = python3 deps = {[testenv:docs]deps} allowlist_externals = make commands = sphinx-build -W -b latex doc/source doc/build/pdf make -C doc/build/pdf