как использовать опцию исключения с pep8.py - PullRequest
17 голосов
/ 03 мая 2011

У меня есть такая структура каталогов

/path/to/dir/a/foo
/path/to/dir/b/foo

и хотите запустить pep8 в каталоге /path/to/dir/, исключая /path/to/dir/a/foo

pep8 --exclude='/path/to/dir/a/foo' /path/to/dir

и ожидаемый вывод pep8 не должен включать файлы из /a/foo/

но pep8 проверяет файлы внутри /a/foo/ также

когда я делаю это

pep8 --exclude='foo' /path/to/dir

исключает файлы из обоих и a/foo /b/foo/

Каков шаблон, который нужно указать опции pep8 exclude, чтобы исключить файлы только из /a/foo/, но не из b/foo/?

Ответы [ 2 ]

14 голосов
/ 03 мая 2011

Вы можете попробовать что-то вроде этого:

pep8 --exclude='*/a/foo*' /path/to/dir

Часть исключения использует fnmatch для сопоставления с путем, как показано в исходном коде .

def excluded(filename):
    """
    Check if options.exclude contains a pattern that matches filename.
    """
    basename = os.path.basename(filename)
    for pattern in options.exclude:
        if fnmatch(basename, pattern):
            # print basename, 'excluded because it matches', pattern
            return True
2 голосов
/ 05 января 2013

Я уверен, что заново изобретаю колесо, но я также не смог заставить работать API:

import os
import re
from pep8 import StyleGuide


def get_pyfiles(directory=None, exclusions=None, ftype='.py'):
    '''generator of all ftype files in all subdirectories.
    if directory is None, will look in current directory.
    exclusions should be a regular expression.

    '''
    if directory is None:
        directory = os.getcwd()

    pyfiles = (os.path.join(dpath, fname)
               for dpath, dnames, fnames in os.walk(directory)
               for fname in [f for f in fnames
                             if f.endswith(ftype)])

    if exclusions is not None:
        c = re.compile(exclusions)
        pyfiles = (fname for fname in pyfiles if c.match(fname) is None)

    return pyfiles


def get_pep8_counter(directory=None, exclusions=None):
    if directory is None:
        directory = os.getcwd()
    paths = list(get_pyfiles(directory=directory, exclusions=exclusions))
    # I am only interested in counters (but you could do something else)
    return StyleGuide(paths=paths).check_files().counters

counter = get_pep8_counter(exclusions='.*src.*|.*doc.*')
...