|
|
|
@ -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() |