Permalink
Fetching contributors…
Cannot retrieve contributors at this time
92 lines (61 sloc) 2.66 KB
.. currentmodule:: pycodestyle

Advanced usage

Automated tests

You can also execute pycodestyle tests from Python code. For example, this can be highly useful for automated testing of coding style conformance in your project:

import unittest
import pycodestyle


class TestCodeFormat(unittest.TestCase):

    def test_conformance(self):
        """Test that we conform to PEP-8."""
        style = pycodestyle.StyleGuide(quiet=True)
        result = style.check_files(['file1.py', 'file2.py'])
        self.assertEqual(result.total_errors, 0,
                         "Found code style errors (and warnings).")

There's also a shortcut for checking a single file:

import pycodestyle

fchecker = pycodestyle.Checker('testsuite/E27.py', show_source=True)
file_errors = fchecker.check_all()

print("Found %s errors (and warnings)" % file_errors)

Configuring tests

You can configure automated pycodestyle tests in a variety of ways.

For example, you can pass in a path to a configuration file that pycodestyle should use:

import pycodestyle

style = pycodestyle.StyleGuide(config_file='/path/to/tox.ini')

You can also set specific options explicitly:

style = pycodestyle.StyleGuide(ignore=['E501'])

Skip file header

Another example is related to the feature request #143: skip a number of lines at the beginning and the end of a file. This use case is easy to implement through a custom wrapper for the PEP 8 library:

#!python
import pycodestyle

LINES_SLICE = slice(14, -20)

class StyleGuide(pycodestyle.StyleGuide):
    """This subclass of pycodestyle.StyleGuide will skip the first and last lines
    of each file."""

    def input_file(self, filename, lines=None, expected=None, line_offset=0):
        if lines is None:
            assert line_offset == 0
            line_offset = LINES_SLICE.start or 0
            lines = pycodestyle.readlines(filename)[LINES_SLICE]
        return super(StyleGuide, self).input_file(
            filename, lines=lines, expected=expected, line_offset=line_offset)

if __name__ == '__main__':
    style = StyleGuide(parse_argv=True, config_file=True)
    report = style.check_files()
    if report.total_errors:
        raise SystemExit(1)

This module declares a lines' window which skips 14 lines at the beginning and 20 lines at the end. If there's no line to skip at the end, it could be changed with LINES_SLICE = slice(14, None) for example.

You can save it in a file and use it with the same options as the original pycodestyle.