Skip to content

Instantly share code, notes, and snippets.

@Matioz
Last active November 9, 2018 18:36
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Matioz/ef38143a0b595702f300de1f31cf91d9 to your computer and use it in GitHub Desktop.
Save Matioz/ef38143a0b595702f300de1f31cf91d9 to your computer and use it in GitHub Desktop.
Apply autopep8 on all staged files and verify them with pycodestyle
#!/usr/bin/env python
from __future__ import with_statement, print_function
import os
import re
import shutil
import subprocess
import sys
import tempfile
def system(*args, **kwargs):
kwargs.setdefault('stdout', subprocess.PIPE)
proc = subprocess.Popen(args, **kwargs)
out, err = proc.communicate()
return out
def apply_autopep8(filepath):
args = ['autopep8', '--in-place']
args.append(filepath)
output = system(*args)
def verify_pycodestyle(filepath):
args = ['pycodestyle']
args.append(filepath)
output = system(*args)
if len(output) != 0:
print(output)
exit(1)
def main():
try:
import autopep8 as ap8
except ImportError:
print("'autopep8' is required. Please install with `pip install autopep8`.", file=sys.stderr)
exit(1)
modified = re.compile('^[AM]+\s+(?P<name>.*\.py)', re.MULTILINE)
basedir = system('git', 'rev-parse', '--show-toplevel').decode("utf-8").strip()
files = system('git', 'status', '--porcelain').decode("utf-8")
files = modified.findall(files)
for name in files:
filepath = os.path.join(basedir, name)
apply_autopep8(filepath)
verify_pycodestyle(filepath)
system("git", "add", filepath)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment