From 5c90c800a65cc27034508af9061b0ef19cb15b1a Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Sun, 1 Dec 2024 14:34:51 +0100 Subject: [PATCH] Fix CI for the project Depends-On: https://review.opendev.org/c/openstack/horizon/+/936801 Change-Id: Ic97d90261f7634164fc9e2f90ed7851346532113 --- .pylintrc | 67 +------------------ .zuul.yaml | 3 +- bindep.txt | 11 ++- disaster_recovery/actions/panel.py | 2 +- disaster_recovery/actions/tables.py | 8 +-- disaster_recovery/actions/views.py | 2 +- disaster_recovery/actions/workflows/action.py | 2 +- disaster_recovery/backups/panel.py | 2 +- disaster_recovery/backups/tables.py | 8 +-- disaster_recovery/backups/views.py | 2 +- .../backups/workflows/restore.py | 2 +- disaster_recovery/clients/panel.py | 2 +- disaster_recovery/clients/tables.py | 8 +-- disaster_recovery/clients/views.py | 2 +- disaster_recovery/dashboard.py | 2 +- disaster_recovery/jobs/browsers.py | 2 +- disaster_recovery/jobs/panel.py | 2 +- disaster_recovery/jobs/tables.py | 12 ++-- disaster_recovery/jobs/workflows/actions.py | 2 +- disaster_recovery/jobs/workflows/create.py | 2 +- .../jobs/workflows/update_actions.py | 2 +- .../jobs/workflows/update_job.py | 2 +- disaster_recovery/sessions/browsers.py | 2 +- disaster_recovery/sessions/panel.py | 2 +- disaster_recovery/sessions/tables.py | 12 ++-- .../sessions/workflows/attach.py | 2 +- .../sessions/workflows/create.py | 2 +- disaster_recovery/utils.py | 2 +- doc/source/conf.py | 2 +- tox.ini | 13 ++-- 30 files changed, 60 insertions(+), 124 deletions(-) diff --git a/.pylintrc b/.pylintrc index 055dbd6..d3278a0 100644 --- a/.pylintrc +++ b/.pylintrc @@ -7,9 +7,6 @@ # pygtk.require(). #init-hook= -# Profiled execution. -profile=no - # Add files or directories to the blacklist. They should be base names, not # paths. ignore=CVS @@ -21,12 +18,6 @@ persistent=no # usually to register additional checkers. load-plugins= -# DEPRECATED -include-ids=no - -# DEPRECATED -symbols=no - [MESSAGES CONTROL] @@ -55,11 +46,6 @@ disable=E1002,W,C,R,method-hidden,import-error,no-member # mypackage.mymodule.MyReporterClass. output-format=text -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - # Tells whether to display a full report or only the messages reports=no @@ -70,10 +56,6 @@ reports=no # (RP0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) -# Add a comment according to your evaluation note. This is used by the global -# evaluation report (RP0004). -comment=no - # Template used to display messages. This is a python new-style format string # used to format the message information. See doc for all details #msg-template= @@ -109,10 +91,6 @@ ignored-modules=distutils # (useful for classes with attributes dynamically set). ignored-classes=SQLObject -# When zope mode is activated, add a predefined set of Zope acquired attributes -# to generated-members. -zope=no - # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E0201 when accessed. Python regular # expressions are accepted. @@ -127,12 +105,6 @@ notes=FIXME,XXX,TODO [BASIC] -# Required attributes for module, separated by a comma -required-attributes= - -# List of builtins function names that should not be used, separated by a comma -bad-functions=map,filter,apply,input,file - # Good variable names which should always be accepted, separated by a comma good-names=i,j,k,ex,Run,_ @@ -149,63 +121,33 @@ include-naming-hint=no # Regular expression matching correct function names function-rgx=[a-z_][a-z0-9_]{2,30}$ -# Naming hint for function names -function-name-hint=[a-z_][a-z0-9_]{2,30}$ - # Regular expression matching correct variable names variable-rgx=[a-z_][a-z0-9_]{2,30}$ -# Naming hint for variable names -variable-name-hint=[a-z_][a-z0-9_]{2,30}$ - # Regular expression matching correct constant names const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ -# Naming hint for constant names -const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - # Regular expression matching correct attribute names attr-rgx=[a-z_][a-z0-9_]{2,30}$ -# Naming hint for attribute names -attr-name-hint=[a-z_][a-z0-9_]{2,30}$ - # Regular expression matching correct argument names argument-rgx=[a-z_][a-z0-9_]{2,30}$ -# Naming hint for argument names -argument-name-hint=[a-z_][a-z0-9_]{2,30}$ - # Regular expression matching correct class attribute names class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ -# Naming hint for class attribute names -class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - # Regular expression matching correct inline iteration names inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ -# Naming hint for inline iteration names -inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ - # Regular expression matching correct class names class-rgx=[A-Z_][a-zA-Z0-9]+$ -# Naming hint for class names -class-name-hint=[A-Z_][a-zA-Z0-9]+$ - # Regular expression matching correct module names module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ -# Naming hint for module names -module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - # Regular expression matching correct method names method-rgx=[a-z_][a-z0-9_]{2,30}$ -# Naming hint for method names -method-name-hint=[a-z_][a-z0-9_]{2,30}$ - # Regular expression which should only match function or class names that do # not require a docstring. no-docstring-rgx=__.*__ @@ -248,9 +190,6 @@ ignore-long-lines=^\s*(# )??$ # else. single-line-if-stmt=no -# List of optional constructs for which whitespace checking is disabled -no-space-check=trailing-comma,dict-separator - # Maximum number of lines in a module max-module-lines=1000 @@ -295,10 +234,6 @@ max-public-methods=20 [CLASSES] -# List of interface methods to ignore, separated by a comma. This is used for -# instance to not check methods defines in Zope's Interface base class. -ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by - # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__,__new__,setUp @@ -331,4 +266,4 @@ int-import-graph= # Exceptions that will emit a warning when being caught. Defaults to # "Exception" -overgeneral-exceptions=Exception +overgeneral-exceptions=builtins.Exception diff --git a/.zuul.yaml b/.zuul.yaml index d1f686c..0dd982c 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -2,7 +2,8 @@ templates: - check-requirements - horizon-non-primary-django-jobs - - openstack-python3-zed-jobs + - openstack-python3-jobs + - publish-openstack-docs-pti check: jobs: diff --git a/bindep.txt b/bindep.txt index 4a1add2..43e230c 100644 --- a/bindep.txt +++ b/bindep.txt @@ -1,13 +1,10 @@ # A build time dependency # these are needed to compile Python dependencies from sources -python-dev [platform:dpkg test] python3-all-dev [platform:dpkg !platform:ubuntu-precise test] -python-devel [platform:rpm test] python3-devel [platform:rpm test] build-essential [platform:dpkg test] -# these are needed by infra for python-* jobs +libmariadb-dev-compat [platform:dpkg test] mariadb [platform:rpm test] -mariadb-server [platform:rpm test] -mysql-client [platform:dpkg test] -mysql-server [platform:dpkg test] - +mariadb-client [platform:dpkg test] +mariadb-devel [platform:rpm test] +mariadb-server [test] diff --git a/disaster_recovery/actions/panel.py b/disaster_recovery/actions/panel.py index 83a57d0..6822f0d 100644 --- a/disaster_recovery/actions/panel.py +++ b/disaster_recovery/actions/panel.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import horizon diff --git a/disaster_recovery/actions/tables.py b/disaster_recovery/actions/tables.py index c507813..731a765 100644 --- a/disaster_recovery/actions/tables.py +++ b/disaster_recovery/actions/tables.py @@ -11,8 +11,8 @@ # under the License. from django import shortcuts -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ungettext_lazy +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ngettext_lazy from horizon import tables from django.urls import reverse @@ -25,7 +25,7 @@ class DeleteAction(tables.DeleteAction): @staticmethod def action_present(count): - return ungettext_lazy( + return ngettext_lazy( u"Delete Action", u"Delete Actions", count @@ -33,7 +33,7 @@ class DeleteAction(tables.DeleteAction): @staticmethod def action_past(count): - return ungettext_lazy( + return ngettext_lazy( u"Deleted Action", u"Deleted Actions", count diff --git a/disaster_recovery/actions/views.py b/disaster_recovery/actions/views.py index 4564425..36b6ec3 100644 --- a/disaster_recovery/actions/views.py +++ b/disaster_recovery/actions/views.py @@ -13,7 +13,7 @@ import pprint from django.urls import reverse_lazy -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views import generic from horizon import tables diff --git a/disaster_recovery/actions/workflows/action.py b/disaster_recovery/actions/workflows/action.py index aa9b6e7..e202f8e 100644 --- a/disaster_recovery/actions/workflows/action.py +++ b/disaster_recovery/actions/workflows/action.py @@ -13,7 +13,7 @@ # limitations under the License. from django import shortcuts -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms diff --git a/disaster_recovery/backups/panel.py b/disaster_recovery/backups/panel.py index 8803ce3..94693bd 100644 --- a/disaster_recovery/backups/panel.py +++ b/disaster_recovery/backups/panel.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import horizon diff --git a/disaster_recovery/backups/tables.py b/disaster_recovery/backups/tables.py index b9cbee7..f7b9093 100644 --- a/disaster_recovery/backups/tables.py +++ b/disaster_recovery/backups/tables.py @@ -14,8 +14,8 @@ from django.urls import reverse from django.utils import safestring -from django.utils.translation import ungettext_lazy -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ngettext_lazy +from django.utils.translation import gettext_lazy as _ from horizon import tables from horizon.utils import functions as utils @@ -41,7 +41,7 @@ class DeleteBackup(tables.DeleteAction): @staticmethod def action_present(count): - return ungettext_lazy( + return ngettext_lazy( u"Delete Backup", u"Delete Backups", count @@ -49,7 +49,7 @@ class DeleteBackup(tables.DeleteAction): @staticmethod def action_past(count): - return ungettext_lazy( + return ngettext_lazy( u"Deleted Backup", u"Deleted Backups", count diff --git a/disaster_recovery/backups/views.py b/disaster_recovery/backups/views.py index 6fe3eb8..6f7efc0 100644 --- a/disaster_recovery/backups/views.py +++ b/disaster_recovery/backups/views.py @@ -13,7 +13,7 @@ import datetime import pprint -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views import generic from horizon import tables diff --git a/disaster_recovery/backups/workflows/restore.py b/disaster_recovery/backups/workflows/restore.py index 51b318f..f23bafb 100644 --- a/disaster_recovery/backups/workflows/restore.py +++ b/disaster_recovery/backups/workflows/restore.py @@ -13,7 +13,7 @@ # limitations under the License. from django.core import exceptions as d_exceptions -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms diff --git a/disaster_recovery/clients/panel.py b/disaster_recovery/clients/panel.py index 9f094bc..4a00b20 100644 --- a/disaster_recovery/clients/panel.py +++ b/disaster_recovery/clients/panel.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import horizon diff --git a/disaster_recovery/clients/tables.py b/disaster_recovery/clients/tables.py index 1badb1a..eba2388 100644 --- a/disaster_recovery/clients/tables.py +++ b/disaster_recovery/clients/tables.py @@ -10,8 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ungettext_lazy +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ngettext_lazy from horizon import tables from django.urls import reverse @@ -30,7 +30,7 @@ class DeleteClient(tables.DeleteAction): @staticmethod def action_present(count): - return ungettext_lazy( + return ngettext_lazy( u"Delete Client", u"Delete Clients", count @@ -38,7 +38,7 @@ class DeleteClient(tables.DeleteAction): @staticmethod def action_past(count): - return ungettext_lazy( + return ngettext_lazy( u"Deleted Client", u"Deleted Clients", count diff --git a/disaster_recovery/clients/views.py b/disaster_recovery/clients/views.py index 1747510..e720cab 100644 --- a/disaster_recovery/clients/views.py +++ b/disaster_recovery/clients/views.py @@ -12,7 +12,7 @@ import pprint -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views import generic from horizon import tables diff --git a/disaster_recovery/dashboard.py b/disaster_recovery/dashboard.py index 9ce559f..76f6878 100644 --- a/disaster_recovery/dashboard.py +++ b/disaster_recovery/dashboard.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import horizon diff --git a/disaster_recovery/jobs/browsers.py b/disaster_recovery/jobs/browsers.py index 06c68e5..41b3fc2 100644 --- a/disaster_recovery/jobs/browsers.py +++ b/disaster_recovery/jobs/browsers.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from disaster_recovery.jobs import tables diff --git a/disaster_recovery/jobs/panel.py b/disaster_recovery/jobs/panel.py index e0eaad0..6b88022 100644 --- a/disaster_recovery/jobs/panel.py +++ b/disaster_recovery/jobs/panel.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import horizon diff --git a/disaster_recovery/jobs/tables.py b/disaster_recovery/jobs/tables.py index 425510b..4e49dd6 100644 --- a/disaster_recovery/jobs/tables.py +++ b/disaster_recovery/jobs/tables.py @@ -13,8 +13,8 @@ # limitations under the License. from django import shortcuts -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ungettext_lazy +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ngettext_lazy from horizon import tables from horizon import messages @@ -48,7 +48,7 @@ class DeleteJob(tables.DeleteAction): @staticmethod def action_present(count): - return ungettext_lazy( + return ngettext_lazy( u"Delete Job File", u"Delete Job Files", count @@ -56,7 +56,7 @@ class DeleteJob(tables.DeleteAction): @staticmethod def action_past(count): - return ungettext_lazy( + return ngettext_lazy( u"Deleted Job File", u"Deleted Job Files", count @@ -194,7 +194,7 @@ class DeleteAction(tables.DeleteAction): @staticmethod def action_present(count): - return ungettext_lazy( + return ngettext_lazy( u"Delete Action", u"Delete Action", count @@ -202,7 +202,7 @@ class DeleteAction(tables.DeleteAction): @staticmethod def action_past(count): - return ungettext_lazy( + return ngettext_lazy( u"Deleted action File", u"Deleted action Files", count diff --git a/disaster_recovery/jobs/workflows/actions.py b/disaster_recovery/jobs/workflows/actions.py index 95f5850..5437569 100644 --- a/disaster_recovery/jobs/workflows/actions.py +++ b/disaster_recovery/jobs/workflows/actions.py @@ -11,7 +11,7 @@ # under the License. from django import shortcuts -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms diff --git a/disaster_recovery/jobs/workflows/create.py b/disaster_recovery/jobs/workflows/create.py index 82728c0..fb47a49 100644 --- a/disaster_recovery/jobs/workflows/create.py +++ b/disaster_recovery/jobs/workflows/create.py @@ -15,7 +15,7 @@ import datetime from django import shortcuts -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms diff --git a/disaster_recovery/jobs/workflows/update_actions.py b/disaster_recovery/jobs/workflows/update_actions.py index 20ad24f..410c5e2 100644 --- a/disaster_recovery/jobs/workflows/update_actions.py +++ b/disaster_recovery/jobs/workflows/update_actions.py @@ -13,7 +13,7 @@ # limitations under the License. from django import shortcuts -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms diff --git a/disaster_recovery/jobs/workflows/update_job.py b/disaster_recovery/jobs/workflows/update_job.py index cef7e65..2cb8f3f 100644 --- a/disaster_recovery/jobs/workflows/update_job.py +++ b/disaster_recovery/jobs/workflows/update_job.py @@ -15,7 +15,7 @@ import datetime from django import shortcuts -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms diff --git a/disaster_recovery/sessions/browsers.py b/disaster_recovery/sessions/browsers.py index 6b3da3e..6daddee 100644 --- a/disaster_recovery/sessions/browsers.py +++ b/disaster_recovery/sessions/browsers.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from disaster_recovery.sessions import tables diff --git a/disaster_recovery/sessions/panel.py b/disaster_recovery/sessions/panel.py index a009dab..8423dca 100644 --- a/disaster_recovery/sessions/panel.py +++ b/disaster_recovery/sessions/panel.py @@ -13,7 +13,7 @@ # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import horizon diff --git a/disaster_recovery/sessions/tables.py b/disaster_recovery/sessions/tables.py index 0f70e64..951ac7a 100644 --- a/disaster_recovery/sessions/tables.py +++ b/disaster_recovery/sessions/tables.py @@ -12,8 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ungettext_lazy +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ngettext_lazy from django.urls import reverse from horizon import tables @@ -45,7 +45,7 @@ class DeleteSession(tables.DeleteAction): @staticmethod def action_present(count): - return ungettext_lazy( + return ngettext_lazy( u"Delete Session", u"Delete Sessions", count @@ -53,7 +53,7 @@ class DeleteSession(tables.DeleteAction): @staticmethod def action_past(count): - return ungettext_lazy( + return ngettext_lazy( u"Deleted Session", u"Deleted Sessions", count @@ -85,7 +85,7 @@ class DeleteJobFromSession(tables.DeleteAction): @staticmethod def action_present(count): - return ungettext_lazy( + return ngettext_lazy( u"Delete Job", u"Delete Jobs", count @@ -93,7 +93,7 @@ class DeleteJobFromSession(tables.DeleteAction): @staticmethod def action_past(count): - return ungettext_lazy( + return ngettext_lazy( u"Deleted Job", u"Deleted Jobs", count diff --git a/disaster_recovery/sessions/workflows/attach.py b/disaster_recovery/sessions/workflows/attach.py index be805a0..87ae840 100644 --- a/disaster_recovery/sessions/workflows/attach.py +++ b/disaster_recovery/sessions/workflows/attach.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.urls import reverse from horizon import exceptions diff --git a/disaster_recovery/sessions/workflows/create.py b/disaster_recovery/sessions/workflows/create.py index ac39bc6..5050a7b 100644 --- a/disaster_recovery/sessions/workflows/create.py +++ b/disaster_recovery/sessions/workflows/create.py @@ -15,7 +15,7 @@ import datetime from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from horizon import exceptions diff --git a/disaster_recovery/utils.py b/disaster_recovery/utils.py index c779f5f..97d556f 100644 --- a/disaster_recovery/utils.py +++ b/disaster_recovery/utils.py @@ -19,7 +19,7 @@ from functools import wraps from django.urls import reverse from django.template.defaultfilters import date as django_date -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import get_user_home diff --git a/doc/source/conf.py b/doc/source/conf.py index d474efb..a1a6f5b 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -124,7 +124,7 @@ html_theme = 'default' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +#html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied diff --git a/tox.ini b/tox.ini index 00b1add..6cef44d 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py38,py39,pep8,pylint,docs +envlist = py39,py311,py312,pep8,pylint,docs minversion = 2.0 skipsdist = True @@ -18,12 +18,15 @@ deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/up commands = python manage.py test {posargs} -[testenv:py38] -basepython = python3.8 - [testenv:py39] basepython = python3.9 +[testenv:py311] +basepython = python3.11 + +[testenv:py312] +basepython = python3.12 + [testenv:pep8] commands = flake8 {posargs} @@ -36,7 +39,7 @@ commands = python setup.py test --coverage --testr-args={posargs} [testenv:docs] deps = -r{toxinidir}/doc/requirements.txt setenv = DJANGO_SETTINGS_MODULE=disaster_recovery.test.settings -commands = python setup.py build_sphinx +commands = sphinx-build -W --keep-going -b html doc/source doc/build/html [testenv:pylint] commands = pylint --rcfile .pylintrc disaster_recovery