2011-05-03 21 views
16

excluir Tengo una estructura de directorios como éstecómo utilizar la opción con pep8.py

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

y quiero correr PEP8 en el directorio /path/to/dir/ excluyendo /path/to/dir/a/foo

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

y la salida esperada de PEP8 es decir, no debe incluir los archivos de /a/foo/

pero pep8 está revisando los archivos dentro de /a/foo/ también

cuando hago esto

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

que está excluyendo los archivos de ambos y a/foo/b/foo/

Cuál es el patrón que debe darse a PEP8 opción de excluir de manera que excluye los archivos sólo de /a/foo/ pero no de b/foo/?

Respuesta

14

Usted puede intentar algo como esto:

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

La porción excluye utiliza fnmatch a contrastar la ruta como se ve en la source code.

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 
+1

Su excluir ejemplo no funciona :( – sorin

2

Estoy seguro de que estoy aquí reinventar la rueda, pero también he sido incapaz de conseguir el funcionamiento de la 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.*') 
+0

creo que en realidad Simplemente no entendía el unix regex (?) Y quería usar la expresión regular de Python. –

Cuestiones relacionadas