pytest plugin to check PEP8 requirements
Project description
py.test plugin for efficiently checking PEP8 compliance
Usage
install via:
pip install pytest-pep8
if you then type:
py.test --pep8
every file ending in .py will be discovered and pep8-checked, starting from the command line arguments.
A little example
If you have a pep8-violating file like this:
# content of myfile.py somefunc( 123,456)
you can run it with the plugin installed:
$ py.test --pep8 =========================== test session starts ============================ platform linux2 -- Python 2.7.6 -- py-1.4.30 -- pytest-2.7.2 rootdir: /tmp/doc-exec-2, inifile: plugins: pep8, cache collected 1 items myfile.py F ================================= FAILURES ================================= ________________________________ PEP8-check ________________________________ /tmp/doc-exec-2/myfile.py:2:10: E201 whitespace after '(' somefunc( 123,456) ^ /tmp/doc-exec-2/myfile.py:2:14: E231 missing whitespace after ',' somefunc( 123,456) ^ ========================= 1 failed in 0.00 seconds =========================
For the meaning of (E)rror and (W)arning codes, see the error output when running against your files or checkout pep8.py.
Let’s not now fix the PEP8 errors:
# content of myfile.py somefunc(123, 456)
and run again:
$ py.test --pep8 =========================== test session starts ============================ platform linux2 -- Python 2.7.6 -- py-1.4.30 -- pytest-2.7.2 rootdir: /tmp/doc-exec-2, inifile: plugins: pep8, cache collected 1 items myfile.py . ========================= 1 passed in 0.00 seconds =========================
the pep8 check now is passing. Moreover, if you run it once again (and report skip reasons):
$ py.test --pep8 -rs =========================== test session starts ============================ platform linux2 -- Python 2.7.6 -- py-1.4.30 -- pytest-2.7.2 rootdir: /tmp/doc-exec-2, inifile: plugins: pep8, cache collected 1 items myfile.py s ========================= short test summary info ========================== SKIP [1] /home/hpk/p/pytest-pep8/pytest_pep8.py:65: file(s) previously passed PEP8 checks ======================== 1 skipped in 0.00 seconds =========================
you can see that the pep8 check was skipped because the file has not been modified since it was last checked. As the pep8 plugin uses the pytest-cache plugin to implement its caching, you can use its --clearcache option to remove all pytest caches, among them the pep8 related one, which will trigger the pep8 checking code to run once again:
$ py.test --pep8 --clearcache =========================== test session starts ============================ platform linux2 -- Python 2.7.6 -- py-1.4.30 -- pytest-2.7.2 rootdir: /tmp/doc-exec-2, inifile: plugins: pep8, cache collected 1 items myfile.py . ========================= 1 passed in 0.00 seconds =========================
Configuring PEP8 options per project and file
You may configure PEP8-checking options for your project by adding an pep8ignore entry to your setup.cfg or setup.cfg file like this:
# content of setup.cfg [pytest] pep8ignore = E201 E231
This would globally prevent complaints about two whitespace issues. Rerunning with the above example will now look better:
$ py.test -q --pep8 . 1 passed in 0.00 seconds
If you have some files where you want to specifically ignore some errors or warnings you can start a pep8ignore line with a glob-pattern and a space-separated list of codes:
# content of setup.cfg [pytest] pep8ignore = *.py E201 doc/conf.py ALL
So if you have a conf.py like this:
# content of doc/conf.py func ( [1,2,3]) #this line lots pep8 errors :)
then running again with the previous example will show a single failure and it will ignore doc/conf.py alltogether:
$ py.test --pep8 -v # verbose shows what is ignored =========================== test session starts ============================ platform linux2 -- Python 2.7.6 -- py-1.4.30 -- pytest-2.7.2 -- /home/hpk/venv/clean/bin/python cachedir: /tmp/doc-exec-2/.cache rootdir: /tmp/doc-exec-2, inifile: setup.cfg plugins: pep8, cache collecting ... collected 1 items myfile.py PASSED ========================= 1 passed in 0.01 seconds =========================
Note that doc/conf.py was not considered or imported.
If you’ld like to have longer lines than 79 chars (which is the default for the pep8 checker), you can configure it like this:
# content of setup.cfg [pytest] pep8maxlinelength = 99
Running PEP8 checks and no other tests
You can also restrict your test run to only perform “pep8” tests and not any other tests by typing:
py.test --pep8 -m pep8
This will only run test items with the “pep8” marker which this plugins adds dynamically.
Notes
The repository of this plugin is at http://bitbucket.org/pytest-dev/pytest-pep8
For more info on py.test see http://pytest.org
The code is partially based on Ronny Pfannschmidt’s pytest-codecheckers plugin.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.