diff --git a/.prospector.yaml b/.prospector.yaml new file mode 100644 index 0000000..6414aca --- /dev/null +++ b/.prospector.yaml @@ -0,0 +1,14 @@ +ignore-paths: + - docs + - axes/migrations + +pep8: + options: + max-line-length: 119 + +pyflakes: + disable: + - F401 + +dodgy: + run: false diff --git a/axes/admin.py b/axes/admin.py index c67b72c..42f7257 100644 --- a/axes/admin.py +++ b/axes/admin.py @@ -55,7 +55,7 @@ class AccessAttemptAdmin(admin.ModelAdmin): 'failures_since_start' ] - def has_add_permission(self, request, obj=None): + def has_add_permission(self, request): return False admin.site.register(AccessAttempt, AccessAttemptAdmin) @@ -106,7 +106,7 @@ class AccessLogAdmin(admin.ModelAdmin): 'logout_time' ] - def has_add_permission(self, request, obj=None): + def has_add_permission(self, request): return False admin.site.register(AccessLog, AccessLogAdmin) diff --git a/axes/apps.py b/axes/apps.py index e850397..f4b641b 100644 --- a/axes/apps.py +++ b/axes/apps.py @@ -20,7 +20,8 @@ class AppConfig(apps.AppConfig): from django.contrib.auth.views import LoginView from django.utils.decorators import method_decorator - from axes import signals + from axes import signals # pylint: disable=unused-import,unused-variable + from axes.decorators import axes_dispatch from axes.decorators import axes_form_invalid diff --git a/axes/decorators.py b/axes/decorators.py index 69dced5..51daa77 100644 --- a/axes/decorators.py +++ b/axes/decorators.py @@ -77,7 +77,4 @@ def lockout_response(request): elif settings.AXES_LOCKOUT_URL: return HttpResponseRedirect(settings.AXES_LOCKOUT_URL) - else: - msg = get_lockout_message() - - return HttpResponse(msg, status=403) + return HttpResponse(get_lockout_message(), status=403) diff --git a/axes/utils.py b/axes/utils.py index 29bb3ed..69c08d8 100644 --- a/axes/utils.py +++ b/axes/utils.py @@ -1,12 +1,13 @@ from __future__ import unicode_literals -from platform import python_version -from sys import platform -if python_version() < '3.4' and platform == 'win32': - import win_inet_pton -from socket import inet_pton, AF_INET6, error +try: + import win_inet_pton # pylint: disable=unused-import +except ImportError: + pass -from django.core.cache import cache, caches +from socket import error, inet_pton, AF_INET6 + +from django.core.cache import caches from django.utils import six import ipware.ip2 @@ -116,5 +117,4 @@ def iso8601(timestamp): def get_lockout_message(): if settings.AXES_COOLOFF_TIME: return settings.AXES_COOLOFF_MESSAGE - else: - return settings.AXES_PERMALOCK_MESSAGE + return settings.AXES_PERMALOCK_MESSAGE diff --git a/requirements.txt b/requirements.txt index 908d475..82c4bd2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ -Django +django +prospector sphinx-rtd-theme -e . diff --git a/tox.ini b/tox.ini index ef5778f..36d3ca5 100644 --- a/tox.ini +++ b/tox.ini @@ -6,13 +6,14 @@ envlist = [testenv] deps = - py27: mock + coveralls django-appconf django-ipware - coveralls - django-111: Django>=1.11,<2.0 - django-20: Django>=2.0,<2.1 + django-111: django>=1.11,<2.0 + django-20: django>=2.0,<2.1 django-master: https://github.com/django/django/archive/master.tar.gz + prospector + py27: mock usedevelop = True ignore_outcome = django-master: True @@ -20,5 +21,6 @@ commands = coverage run -a --source=axes runtests.py -v2 coverage run -a --source=axes runtests.py -v2 cache coverage report + prospector --zero-exit setenv = PYTHONDONTWRITEBYTECODE=1