From ff94908505fa5466b2547d3d7af3d34cb232bfec Mon Sep 17 00:00:00 2001 From: Kenneth Reitz <me@kennethreitz.org> Date: Fri, 2 Jun 2017 15:23:05 -0400 Subject: [PATCH] Fix pyyaml (#402) * Revert "use pkg_resources to check for distributions (#395)" This reverts commit 9b185f99d505b701dc09b173e834a67d9c306a82. * use sp-grep for django detection * sp-grep * fix setuptools script --- bin/steps/collectstatic | 2 +- bin/steps/cryptography | 2 +- bin/steps/gdal | 2 +- bin/steps/pylibmc | 2 +- vendor/pip-pop/pip-grep | 57 +++++++++++++++++++++++++++++++++-------- vendor/pip-pop/sp-grep | 38 +++++++++++++++++++++++++++ 6 files changed, 88 insertions(+), 15 deletions(-) create mode 100755 vendor/pip-pop/sp-grep diff --git a/bin/steps/collectstatic b/bin/steps/collectstatic index 20bbb85f..1e029ff2 100755 --- a/bin/steps/collectstatic +++ b/bin/steps/collectstatic @@ -20,7 +20,7 @@ MANAGE_FILE=${MANAGE_FILE:-fakepath} [ -f .heroku/collectstatic_disabled ] && DISABLE_COLLECTSTATIC=1 # Ensure that Django is explicitly specified in requirements.txt -pip-grep -s Django && DJANGO_INSTALLED=1 +sp-grep django && DJANGO_INSTALLED=1 if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALLED" ]; then diff --git a/bin/steps/cryptography b/bin/steps/cryptography index dd4ea32f..8a507999 100755 --- a/bin/steps/cryptography +++ b/bin/steps/cryptography @@ -18,7 +18,7 @@ PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH" source $BIN_DIR/utils # If a package using cffi exists within requirements, use vendored libffi. -if (pip-grep -s argon2-cffi bcrypt cffi cryptography PyNaCl pyOpenSSL PyOpenSSL misaka &> /dev/null) then +if (pip-grep -s requirements.txt argon2-cffi bcrypt cffi cryptography django[argon2] Django[argon2] django[bcrypt] Django[bcrypt] PyNaCl pyOpenSSL PyOpenSSL requests[security] misaka &> /dev/null) then if [ ! -d ".heroku/vendor/lib/libffi-3.1" ]; then echo "-----> Noticed cffi. Bootstrapping libffi." diff --git a/bin/steps/gdal b/bin/steps/gdal index 82892b00..50a09ac3 100755 --- a/bin/steps/gdal +++ b/bin/steps/gdal @@ -18,7 +18,7 @@ PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH" source $BIN_DIR/utils # If GDAL exists within requirements, use vendored gdal. -if (pip-grep -s GDAL pygdal &> /dev/null) then +if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then if [ ! -f ".heroku/vendor/bin/gdalserver" ]; then echo "-----> Noticed GDAL. Bootstrapping gdal." diff --git a/bin/steps/pylibmc b/bin/steps/pylibmc index d5cc7857..f574e535 100755 --- a/bin/steps/pylibmc +++ b/bin/steps/pylibmc @@ -17,7 +17,7 @@ source $BIN_DIR/utils # If pylibmc exists within requirements, use vendored libmemcached. -if (pip-grep -s pylibmc &> /dev/null) then +if (pip-grep -s requirements.txt pylibmc &> /dev/null) then if [ ! -d ".heroku/vendor/lib/sasl2" ]; then echo "-----> Noticed pylibmc. Bootstrapping libmemcached." diff --git a/vendor/pip-pop/pip-grep b/vendor/pip-pop/pip-grep index 8b90a493..9e3371d0 100755 --- a/vendor/pip-pop/pip-grep +++ b/vendor/pip-pop/pip-grep @@ -2,26 +2,58 @@ # -*- coding: utf-8 -*- """Usage: - pip-grep [-s] <package>... + pip-grep [-s] <reqfile> <package>... Options: -h --help Show this screen. """ +import os from docopt import docopt -from pkg_resources import DistributionNotFound, get_distribution +from pip.req import parse_requirements +from pip.index import PackageFinder +from pip._vendor.requests import session +requests = session() -def has_any_distribution(names, silent=False): - for name in names: - try: - get_distribution(name) - except DistributionNotFound: - continue +class Requirements(object): + def __init__(self, reqfile=None): + super(Requirements, self).__init__() + self.path = reqfile + self.requirements = [] + + if reqfile: + self.load(reqfile) + + def __repr__(self): + return '<Requirements \'{}\'>'.format(self.path) + + def load(self, reqfile): + if not os.path.exists(reqfile): + raise ValueError('The given requirements file does not exist.') + + finder = PackageFinder([], [], session=requests) + for requirement in parse_requirements(reqfile, finder=finder, session=requests): + if requirement.req: + if not getattr(requirement.req, 'name', None): + # Prior to pip 8.1.2 the attribute `name` did not exist. + requirement.req.name = requirement.req.project_name + self.requirements.append(requirement.req) + + +def grep(reqfile, packages, silent=False): + try: + r = Requirements(reqfile) + except ValueError: if not silent: - print('Package {name} found!'.format(name=name)) + print('There was a problem loading the given requirement file.') + exit(os.EX_NOINPUT) - exit(0) + for req in r.requirements: + if req.name in packages: + if not silent: + print('Package {} found!'.format(req.name)) + exit(0) if not silent: print('Not found.') @@ -31,7 +63,10 @@ def has_any_distribution(names, silent=False): def main(): args = docopt(__doc__, version='pip-grep') - has_any_distribution(names=args['<package>'], silent=args['-s']) + + kwargs = {'reqfile': args['<reqfile>'], 'packages': args['<package>'], 'silent': args['-s']} + + grep(**kwargs) if __name__ == '__main__': diff --git a/vendor/pip-pop/sp-grep b/vendor/pip-pop/sp-grep new file mode 100755 index 00000000..de5399d4 --- /dev/null +++ b/vendor/pip-pop/sp-grep @@ -0,0 +1,38 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Usage: + sp-grep [-s] <package>... + +Options: + -h --help Show this screen. +""" +from docopt import docopt +from pkg_resources import DistributionNotFound, get_distribution + + +def has_any_distribution(names, silent=False): + for name in names: + try: + get_distribution(name) + except DistributionNotFound: + continue + + if not silent: + print('Package {name} found!'.format(name=name)) + + exit(0) + + if not silent: + print('Not found.') + + exit(1) + + +def main(): + args = docopt(__doc__, version='sp-grep') + has_any_distribution(names=args['<package>'], silent=args['-s']) + + +if __name__ == '__main__': + main() \ No newline at end of file -- GitLab