skip to navigation
skip to content

Not Logged In

pytest-pep8 1.0.5

pytest plugin to check PEP8 requirements

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.

Warning

Running pep8 tests on your project is likely to cause a lot of issues. This plugin allows to configure on a per-project and per-file basis which errors or warnings to care about, see pep8ignore. As a preliminary advise, if you have projects where you don't want to care at all about pep8 checks, you can put configure it like this:

# content of setup.cfg (or pytest.ini)
[pytest]
pep8ignore = * ALL

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.3 -- pytest-2.2.5.dev2
pep8: performing checks
collecting ... collected 1 items

myfile.py F

================================= FAILURES =================================
________________________________ PEP8-check ________________________________
/home/hpk/tmp/doc-exec-259/myfile.py:2:10: E201 whitespace after '('
somefunc( 123,456)
         ^
/home/hpk/tmp/doc-exec-259/myfile.py:2:14: E231 missing whitespace after ','
somefunc( 123,456)
             ^

========================= 1 failed in 0.01 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.3 -- pytest-2.2.5.dev2
pep8: performing checks
collecting ... collected 1 items

myfile.py .

========================= 1 passed in 0.01 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.3 -- pytest-2.2.5.dev2
pep8: performing checks
collecting ... collected 1 items

myfile.py s
========================= short test summary info ==========================
SKIP [1] /home/hpk/p/pytest-pep8/pytest_pep8.py:63: file(s) previously passed PEP8 checks

======================== 1 skipped in 0.01 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.3 -- pytest-2.2.5.dev2
pep8: performing checks
collecting ... collected 1 items

myfile.py .

========================= 1 passed in 0.01 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
collecting ... collected 1 items
.
1 passed in 0.01 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.3 -- pytest-2.2.5.dev2 -- /home/hpk/venv/1/bin/python
pep8: performing checks
cachedir: /home/hpk/tmp/doc-exec-259/.cache
collecting ... collected 1 items

myfile.py:0: PEP8-check(ignoring E201) 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/hpk42/pytest-pep8

For more info on py.test see http://pytest.org

The code is partially based on Ronny Pfannschmidt's pytest-codecheckers plugin.

 
File Type Py Version Uploaded on Size
pytest-pep8-1.0.5.tar.gz (md5) Source 2013-10-04 7KB
  • Downloads (All Versions):
  • 371 downloads in the last day
  • 1910 downloads in the last week
  • 7769 downloads in the last month