Setup isort for code style linting

This commit is contained in:
José Padilla 2015-06-25 16:58:24 -04:00 committed by José Padilla
parent 7351a3f6ca
commit b4ba8ef4d7
6 changed files with 33 additions and 8 deletions

1
.gitignore vendored
View File

@ -14,3 +14,4 @@ MANIFEST
!.gitignore
!.travis.yml
!.isort.cfg

6
.isort.cfg Normal file
View File

@ -0,0 +1,6 @@
[settings]
skip=.tox
atomic=true
multi_line_output=5
known_third_party=pytest,django
known_first_party=rest_framework

View File

@ -3,7 +3,7 @@ language: python
sudo: false
env:
- TOX_ENV=py27-flake8
- TOX_ENV=py27-lint
- TOX_ENV=py27-docs
- TOX_ENV=py34-django18
- TOX_ENV=py33-django18

View File

@ -1,3 +1,6 @@
# PEP8 code linting, which we run on all commits.
flake8==2.4.0
pep8==1.5.7
# Sort and lint imports
isort==3.9.6

View File

@ -1,11 +1,11 @@
#! /usr/bin/env python
from __future__ import print_function
import pytest
import sys
import os
import subprocess
import sys
import pytest
PYTEST_ARGS = {
'default': ['tests', '--tb=short'],
@ -14,6 +14,7 @@ PYTEST_ARGS = {
FLAKE8_ARGS = ['rest_framework', 'tests', '--ignore=E501']
ISORT_ARGS = ['--recursive', '--check-only', '.']
sys.path.append(os.path.dirname(__file__))
@ -30,6 +31,13 @@ def flake8_main(args):
return ret
def isort_main(args):
print('Running isort code checking')
ret = subprocess.call(['isort'] + args)
print('isort failed' if ret else 'isort passed')
return ret
def split_class_and_function(string):
class_string, function_string = string.split('.', 1)
return "%s and %s" % (class_string, function_string)
@ -50,8 +58,10 @@ if __name__ == "__main__":
sys.argv.remove('--nolint')
except ValueError:
run_flake8 = True
run_isort = True
else:
run_flake8 = False
run_isort = False
try:
sys.argv.remove('--lintonly')
@ -67,6 +77,7 @@ if __name__ == "__main__":
else:
style = 'fast'
run_flake8 = False
run_isort = False
if len(sys.argv) > 1:
pytest_args = sys.argv[1:]
@ -79,7 +90,7 @@ if __name__ == "__main__":
expression = split_class_and_function(first_arg)
pytest_args = ['tests', '-k', expression] + pytest_args[1:]
elif is_class(first_arg) or is_function(first_arg):
# `runtests.py TestCase [flags]`
# `runtests.py TestCase [flags]`
# `runtests.py test_function [flags]`
pytest_args = ['tests', '-k', pytest_args[0]] + pytest_args[1:]
else:
@ -87,5 +98,9 @@ if __name__ == "__main__":
if run_tests:
exit_on_failure(pytest.main(pytest_args))
if run_flake8:
exit_on_failure(flake8_main(FLAKE8_ARGS))
if run_isort:
exit_on_failure(isort_main(ISORT_ARGS))

View File

@ -3,7 +3,7 @@ addopts=--tb=short
[tox]
envlist =
py27-{flake8,docs},
py27-{lint,docs},
{py26,py27}-django14,
{py26,py27,py32,py33,py34}-django{15,16},
{py27,py32,py33,py34}-django{17,18,master}
@ -22,14 +22,14 @@ deps =
-rrequirements/requirements-testing.txt
-rrequirements/requirements-optionals.txt
[testenv:py27-flake8]
[testenv:py27-lint]
commands = ./runtests.py --lintonly
deps =
-rrequirements/requirements-codestyle.txt
-rrequirements/requirements-testing.txt
commands = ./runtests.py --lintonly
[testenv:py27-docs]
commands = mkdocs build
deps =
-rrequirements/requirements-testing.txt
-rrequirements/requirements-documentation.txt
commands = mkdocs build