Python 8: no pep8, no chocolate!

This commit is contained in:
Victor Stinner 2016-03-31 23:30:53 +02:00
parent 0fc03186f7
commit 49f324f1d4
3 changed files with 2210 additions and 3 deletions

View file

@ -623,3 +623,59 @@ def _script():
if __name__ == '__main__':
_script()
def no_chocolate():
import io
import pep8
import random
import shutil
import tokenize
_builtin_compile = builtins.compile
words = ('chocolate', 'glory', 'fun', 'spam', 'love', 'guts')
pep8style = pep8.StyleGuide()
def compile_pep8(source, filename, mode, **kw):
name = os.path.splitext(os.path.basename(filename))[0]
if not name.endswith('_noqa'):
bio = io.BytesIO(source)
encoding = tokenize.detect_encoding(bio.readline)[0]
lines = source.decode(encoding).splitlines(True)
report = pep8.StandardReport(options=pep8style.options)
checker = pep8.Checker(filename, lines,
report=report,
options=pep8style.options)
checker.check_all()
if report.total_errors:
word = random.choice(words)
raise ImportError("no pep8, no %s" % word)
return _builtin_compile(source, filename, mode, **kw)
builtins.compile = compile_pep8
# remove precompiled .pyc created during the bootstrap,
# to run PEP 8 checks on .py files
libdir_cache = os.path.join(os.path.dirname(__file__), '__pycache__')
try:
shutil.rmtree(libdir_cache)
except:
pass
for name in sorted(sys.modules):
# Minimum to be able to import modules
if name in {'builtins', 'importlib._bootstrap',
'importlib._bootstrap_external', 'importlib',
'importlib.machinery', '__main__', 'io', 'sys', 'site'}:
continue
del sys.modules[name]
try:
import _ssl
except ImportError:
# Python not bootstraped yet
pass
else:
no_chocolate()