202 lines
7.6 KiB
INI
Raw Normal View History

[tox]
envlist = pep8,py27dj18,py27,py34,releasenotes
minversion = 1.6
skipsdist = True
[testenv]
basepython=python2.7
install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages}
setenv =
VIRTUAL_ENV={envdir}
INTEGRATION_TESTS=0
SELENIUM_HEADLESS=0
SELENIUM_PHANTOMJS=0
NOSE_WITH_OPENSTACK=1
NOSE_OPENSTACK_SHOW_ELAPSED=1
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
[testenv:py27]
whitelist_externals =
bash
commands =
bash -c 'project=`echo {posargs} | cut -d. -f1`; \
if [ -z "$project" ]; then \
{envpython} {toxinidir}/manage.py test horizon --settings=horizon.test.settings {posargs}; \
{envpython} {toxinidir}/manage.py test openstack_dashboard --settings=openstack_dashboard.test.settings --exclude-dir=openstack_dashboard/test/integration_tests {posargs}; \
else \
{envpython} {toxinidir}/manage.py test {posargs} --settings=$project.test.settings --exclude-dir=openstack_dashboard/test/integration_tests; \
fi'
# Django-1.8 is LTS
[testenv:py27dj18]
commands =
pip install django>=1.8,<1.9
{envpython} {toxinidir}/manage.py test horizon --settings=horizon.test.settings {posargs}
{envpython} {toxinidir}/manage.py test openstack_dashboard --settings=openstack_dashboard.test.settings --exclude-dir=openstack_dashboard/test/integration_tests {posargs}
[testenv:py34]
basepython = python3.4
setenv =
{[testenv]setenv}
PYTHONUNBUFFERED=1
whitelist_externals =
bash
commands =
bash -c 'project=`echo {posargs} | cut -d. -f1`; \
if [ -z "$project" ]; then \
{envpython} {toxinidir}/manage.py test horizon --settings=horizon.test.settings {posargs}; \
{envpython} {toxinidir}/manage.py test openstack_dashboard --settings=openstack_dashboard.test.settings --exclude-dir=openstack_dashboard/test/integration_tests {posargs}; \
else \
{envpython} {toxinidir}/manage.py test {posargs} --settings=$project.test.settings --exclude-dir=openstack_dashboard/test/integration_tests; \
fi'
[testenv:pep8]
usedevelop = True
whitelist_externals =
git
rm
setenv =
{[testenv]setenv}
DJANGO_SETTINGS_MODULE=openstack_dashboard.test.settings
commands =
{[testenv:extractmessages_check]commands}
flake8
[testenv:extractmessages]
usedevelop = True
setenv =
{[testenv]setenv}
commands =
{envpython} {toxinidir}/setup.py extract_messages -F babel-django.cfg -o horizon/locale/django.pot --input-dirs horizon/
{envpython} {toxinidir}/setup.py extract_messages -F babel-djangojs.cfg -o horizon/locale/djangojs.pot --input-dirs horizon/
{envpython} {toxinidir}/setup.py extract_messages -F babel-django.cfg -o openstack_dashboard/locale/django.pot --input-dirs openstack_dashboard/
{envpython} {toxinidir}/setup.py extract_messages -F babel-djangojs.cfg -o openstack_dashboard/locale/djangojs.pot --input-dirs openstack_dashboard/
[testenv:extractmessages_check]
# Only checks to see if translation files can be extracted and cleans afterwards
usedevelop = True
whitelist_externals =
rm
setenv =
{[testenv]setenv}
commands =
{[testenv:extractmessages]commands}
rm horizon/locale/django.pot
rm horizon/locale/djangojs.pot
rm openstack_dashboard/locale/django.pot
rm openstack_dashboard/locale/djangojs.pot
[testenv:compilemessages]
usedevelop = False
commands =
/bin/bash {toxinidir}/run_tests.sh --compilemessages -N
[testenv:venv]
# NOTE(from nova tox.ini by jaegerandi): This target does not use constraints
# because upstream infra does not yet support it. Once that's fixed, we can
# drop the install_command.
install_command = pip install -U --force-reinstall {opts} {packages}
commands = {posargs}
[testenv:manage]
# Env to launch manage.py commands
commands = {envpython} {toxinidir}/manage.py {posargs}
[testenv:cover]
# NOTE(jaegerandi): This target does not use constraints
# because upstream infra does not yet support it. Once that's fixed, we can
# drop the install_command.
install_command = pip install -U --force-reinstall {opts} {packages}
commands =
coverage erase
coverage run {toxinidir}/manage.py test horizon --settings=horizon.test.settings {posargs}
coverage run {toxinidir}/manage.py test openstack_dashboard --settings=openstack_dashboard.test.settings --exclude-dir=openstack_dashboard/test/integration_tests {posargs}
coverage combine
coverage xml
coverage html
[testenv:py27dj19]
commands = pip install django>=1.9,<1.10
/bin/bash run_tests.sh -N --no-pep8 {posargs}
[testenv:py27dj110]
commands = pip install django>=1.10,<1.11
/bin/bash run_tests.sh -N --no-pep8 {posargs}
[testenv:py27integration]
# Run integration tests only
passenv = AVCONV_INSTALLED
setenv =
PYTHONHASHSEED=0
INTEGRATION_TESTS=1
SELENIUM_HEADLESS=1
NOSE_WITH_OPENSTACK=1
NOSE_OPENSTACK_SHOW_ELAPSED=1
basepython = python2.7
commands = nosetests openstack_dashboard.test.integration_tests {posargs}
[testenv:npm]
commands =
nodeenv -p
npm install
npm run {posargs:test}
[testenv:docs]
setenv = DJANGO_SETTINGS_MODULE=openstack_dashboard.test.settings
commands = {envpython} {toxinidir}/setup.py build_sphinx
[testenv:releasenotes]
# NOTE(from nova tox.ini by jaegerandi): This target does not use constraints
# because upstream infra does not yet support it. Once that's fixed, we can
# drop the install_command.
install_command = pip install -U --force-reinstall {opts} {packages}
commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
[testenv:runserver]
commands = {envpython} {toxinidir}/manage.py runserver {posargs}
[testenv:tests_system_packages]
# Provide an environment for system packagers that dont want anything from pip
# Any extra deps needed for this env can be passed by setting TOX_EXTRA_DEPS
sitepackages = True
passenv = TOX_EXTRA_DEPS
# Sets deps to an empty list so nothing is installed from pip
deps =
commands =
pip install -U {env:TOX_EXTRA_DEPS:}
{envpython} {toxinidir}/manage.py test horizon --settings=horizon.test.settings {posargs}
{envpython} {toxinidir}/manage.py test openstack_dashboard --settings=openstack_dashboard.test.settings {posargs}
[flake8]
exclude = .venv,.git,.tox,dist,*lib/python*,*egg,build,panel_template,dash_template,local_settings.py,*/local/*,*/test/test_plugins/*,.ropeproject
# H405 multi line docstring summary not separated with an empty line
ignore = H405
max-complexity = 20
[hacking]
local-check-factory = horizon.hacking.checks.factory
import_exceptions = collections.defaultdict,
collections.OrderedDict,
django.conf.settings,
django.conf.urls.include,
django.conf.urls.patterns,
django.conf.urls.url,
django.core.urlresolvers.reverse,
django.core.urlresolvers.reverse_lazy,
django.template.loader.render_to_string,
django.test.utils.override_settings,
django.utils.encoding.force_text,
django.utils.html.conditional_escape,
django.utils.html.escape,
django.utils.http.urlencode,
django.utils.safestring.mark_safe,
Allow translators to translate BatchActions Currently BatchAction proposes only an action_present and action_past verb to be concatenated with a data_type_singular or data_type_plural string. The issue is that many languages need to conjugate the verb with the plural/singular subject, and some translations where terribly awfull and impossible to do. Indeed, some languages have up to 5 plural forms depending on the number of items. This patch introduces the fact that action_present is a method instead of an attribute, which in conjonction with https://review.openstack.org/57701 allows better translation to be performed. This patch also adds contextual mrkers to STATUS_DISPLAY_CHOICES, TASK_DISPLAY_CHOICES and POWER_DISPLAY_CHOICES because it was impossible to translate the stand-alone words out of context for a translator (i.e. the word "active" will be translated differently if the active object is feminine or masculine, since feminine and masculine depends also on the language, it is mission impossible for the translator to translate "active" if he does not know "what" is "active"). It is important to use unicode strings with contextual markers because of the following django bug: https://code.djangoproject.com/ticket/22565 The django community was very quick and responsive and fixed the bug very fast: https://code.djangoproject.com/changeset/142c27218a0bb07bb197faab7b1d8eb3a084f5b9 and back-ported their fix in the 1.6 and 1.7 django branches: https://code.djangoproject.com/changeset/61fd00d4fd65f44d0a05be4c7e95124e4102ec27 https://code.djangoproject.com/changeset/034866204b39f797c73997b03cd90443aa03aa91 but since in horizon we support back to django 1.4, we will have to live with it by providing unicode strings until we drop support of old django versions. We can't introduce contextual markers and ungettext (pluralization) verywhere at once because Translators would totally loose their previous work. So we have to progressively introduce contextual markers and pluralization, when a string is changed, or for new strings. It is also the reason why this patch changes only the strings of the instance view actions. Since we can't use contextual markers and pluralization for all the code at once, this patch partially: partial-bug: 1307476 Change-Id: I4cef42dc4a12f55cf750d9a18083254c6a96e716
2014-04-30 13:35:49 +02:00
django.utils.translation.npgettext_lazy,
django.utils.translation.pgettext_lazy,
django.utils.translation.ugettext_lazy,
django.utils.translation.ungettext_lazy,
operator.attrgetter,
StringIO.StringIO