from parser import command, argument, call import yaml import requirements FAIL = '\033[91m' SUCCESS = '\033[92m' RESET = '\033[0m' @command('check', help='Checks for pep8 errors in openslides and tests') def check(args=None): """ Checks for pep8 and other code styling conventions. """ value = call('flake8 --max-line-length=150 --statistics openslides tests') value += call('python -m mypy openslides/ tests/') return value @command('travis', help='Runs the code that travis does') def travis(args=None): """ Runs all commands that travis tests. """ return_codes = [] with open('.travis.yml') as f: travis = yaml.load(f) for line in travis['script']: print('Run: {}'.format(line)) return_code = call(line) return_codes.append(return_code) if return_code: print(FAIL + 'fail!\n' + RESET) else: print(SUCCESS + 'success!\n' + RESET) # Retuns True if one command exited with a different statuscode then 1 return bool(list(filter(bool, return_codes))) @argument('-r', '--requirements', nargs='?', default='requirements.txt') @command('min_requirements', help='Prints a pip line to install the minimum supported versions of ' 'the requirements.') def min_requirements(args=None): """ Prints a pip install command to install the minimal supported versions of a requirement file. Uses requirements.txt by default. The following line will install the version: pip install $(python make min_requirements) """ def get_lowest_versions(requirements_file): with open(requirements_file) as f: for req in requirements.parse(f): if req.specifier: for spec, version in req.specs: if spec == ">=": yield "{}=={}".format(req.name, version) print(' '.join(get_lowest_versions(args.requirements))) @command('clear', help='Deletes unneeded files and folders') def clean(args=None): """ Deletes all .pyc and .orig files and empty folders. """ call('find -name "*.pyc" -delete') call('find -name "*.orig" -delete') call('find -type d -empty -delete') @command('isort', help='Sorts all imports in all python files.') def isort(args=None): return call('isort --recursive openslides tests')