Как использовать опцию исключения с помощью pep8.py
У меня такая структура каталогов
/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/
?
Ответы
Ответ 1
Вы можете попробовать что-то вроде этого:
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
Я уверен, что я изобретаю колесо здесь, но мне также не удалось заставить 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.*')