#!/usr/bin/env python3 from lib.css_parser import parse, CssParserException from typing import Iterable, Text import sys import glob import subprocess # check for the venv from lib import sanity_check sanity_check.check_venv(__file__) def validate(fn): # type: (str) -> None text = open(fn).read() section_list = parse(text) if text != section_list.text(): sys.stderr.write(''' FAIL: {} is being rejected by our finicky linter) (you can manually apply the diff to fix)\n\n'''.format(fn,)) sys.stderr.flush() open('/var/tmp/pretty_css.txt', 'w').write(section_list.text()) subprocess.call(['diff', '-u', fn, '/var/tmp/pretty_css.txt'], stderr=subprocess.STDOUT) sys.exit(1) def check_our_files(filenames): # type: (Iterable[str]) -> None for filename in filenames: if 'pygments.css' in filename: # This just has really strange formatting that our # parser doesn't like continue try: validate(filename) except CssParserException as e: msg = ''' ERROR! Some CSS seems to be misformatted. {} See line {} in file {} '''.format(e.msg, e.token.line, filename) print(msg) sys.exit(1) if __name__ == '__main__': # If command arguments are provided, we only check those filenames. # Otherwise, we check all possible filenames. filenames = sys.argv[1:] if not filenames: filenames = glob.glob('static/styles/*.css') check_our_files(filenames)