From c6ac38cd7053740594a9178346ed07b378f624f0 Mon Sep 17 00:00:00 2001 From: Peter Teichman Date: Wed, 12 Sep 2012 18:44:24 -0400 Subject: [PATCH] Incorporate patch review on Flake8Command * add a note about the setuptools command to README * don't install the Flake8Command entry point without setuptools * fix a bug in Flake8Command that might cause double checking of files in 'packages' --- README | 25 +++++++++++++++++++++++++ flake8/run.py | 16 ++++++++++++---- setup.py | 12 +++++++----- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/README b/README index 379c174..33a453e 100644 --- a/README +++ b/README @@ -123,6 +123,31 @@ In order to use Flake8 inside a buildout, edit your buildout.cfg and add this:: entry-points = flake8=flake8.run:main + +setuptools integration +====================== + +If setuptools is available, Flake8 provides a command that checks the +Python files declared by your project. To use it, add flake8 to your +setup_requires:: + + setup( + name="project", + packages=["project"], + + setup_requires=[ + "flake8" + ] + ) + +Running ``python setup.py flake8`` on the command line will check the +files listed in your ``py_modules`` and ``packages``. If any warnings +are found, the command will exit with an error code:: + + $ python setup.py flake8 + + + Original projects ================= diff --git a/flake8/run.py b/flake8/run.py index bcc3308..b19821e 100644 --- a/flake8/run.py +++ b/flake8/run.py @@ -35,6 +35,7 @@ def check_code(code, complexity=-1): def _get_python_files(paths): + seen = set() for path in paths: if os.path.isdir(path): for dirpath, dirnames, filenames in os.walk(path): @@ -42,11 +43,11 @@ def _get_python_files(paths): if not filename.endswith('.py'): continue fullpath = os.path.join(dirpath, filename) - if not skip_file(fullpath): + if not skip_file(fullpath) and fullpath not in seen: yield fullpath else: - if not skip_file(path): + if not skip_file(path) and path not in seen: yield path @@ -183,7 +184,7 @@ else: def distribution_files(self): if self.distribution.packages: for package in self.distribution.packages: - yield package + yield package.replace(".", os.path.sep) if self.distribution.py_modules: for filename in self.distribution.py_modules: @@ -192,9 +193,16 @@ else: def run(self): _initpep8() + # _get_python_files can produce the same file several + # times, if one of its paths is a parent of another. Keep + # a set of checked files to de-duplicate. + checked = set() + warnings = 0 for path in _get_python_files(self.distribution_files()): - warnings += check_file(path) + if path not in checked: + warnings += check_file(path) + checked.add(path) raise SystemExit(warnings > 0) diff --git a/setup.py b/setup.py index 1dc5694..74efd37 100755 --- a/setup.py +++ b/setup.py @@ -1,12 +1,14 @@ import sys ispy3 = sys.version_info[0] == 3 +issetuptools = False if ispy3: from distutils.core import setup # NOQA else: try: from setuptools import setup # NOQA + issetuptools = True except ImportError: from distutils.core import setup # NOQA @@ -14,6 +16,10 @@ from flake8 import __version__ README = open('README').read() +entry_points = {} +if issetuptools: + entry_points["distutils.commands"] = ["flake8 = flake8.run:Flake8Command"] + setup( name="flake8", license="MIT", @@ -24,11 +30,7 @@ setup( url="http://bitbucket.org/tarek/flake8", packages=["flake8", "flake8.tests"], scripts=["flake8/flake8"], - entry_points = { - "distutils.commands": [ - "flake8 = flake8.run:Flake8Command", - ], - }, + entry_points=entry_points, long_description=README, classifiers=[ "Environment :: Console",