From 0d7afadd63cfaabec1ecd224a7f731ae7bd20543 Mon Sep 17 00:00:00 2001 From: Dan Ryan Date: Mon, 16 Jul 2018 02:17:00 -0400 Subject: [PATCH] Update pythonfinder Signed-off-by: Dan Ryan --- pipenv/vendor/pythonfinder/models/path.py | 2 +- pipenv/vendor/pythonfinder/models/windows.py | 21 ++++++++++++++++---- pipenv/vendor/pythonfinder/pythonfinder.py | 9 +++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/pipenv/vendor/pythonfinder/models/path.py b/pipenv/vendor/pythonfinder/models/path.py index 893b6af0..a7255049 100644 --- a/pipenv/vendor/pythonfinder/models/path.py +++ b/pipenv/vendor/pythonfinder/models/path.py @@ -174,7 +174,7 @@ class SystemPath(object): paths = (self.get_path(k) for k in self.path_order) path_filter = filter(None, (sub_finder(p) for p in paths if p is not None)) version_sort = operator.attrgetter("as_python.version_sort") - return [c for c in sorted(path_filter, key=version_sort, reverse=True)] + return (c for c in sorted(path_filter, key=version_sort, reverse=True)) def find_python_version(self, major=None, minor=None, patch=None, pre=None, dev=None): """Search for a specific python version on the path. diff --git a/pipenv/vendor/pythonfinder/models/windows.py b/pipenv/vendor/pythonfinder/models/windows.py index b6998823..4e5b5b98 100644 --- a/pipenv/vendor/pythonfinder/models/windows.py +++ b/pipenv/vendor/pythonfinder/models/windows.py @@ -16,16 +16,29 @@ class WindowsFinder(BaseFinder): version_list = attr.ib(default=attr.Factory(list)) versions = attr.ib() - def find_python_version(self, major, minor=None, patch=None, pre=None, dev=None): + def find_all_python_versions(self, major=None, minor=None, patch=None, pre=None, dev=None): version_matcher = operator.methodcaller( - "matches", major, minor=minor, patch=patch, pre=pre, dev=dev + "matches", major=major, minor=minor, patch=patch, pre=pre, dev=dev ) py_filter = filter( None, filter(lambda c: version_matcher(c), self.version_list) ) - version_sort = operator.attrgetter("version") + version_sort = operator.attrgetter("version_sort") + for c in sorted(py_filter, key=version_sort, reverse=True): + yield c.comes_from + + def find_python_version(self, major=None, minor=None, patch=None, pre=None, dev=None): + # version_matcher = operator.methodcaller( + # "matches", major=major, minor=minor, patch=patch, pre=pre, dev=dev + # ) + # py_filter = filter( + # None, filter(lambda c: version_matcher(c), self.version_list) + # ) + # version_sort = operator.attrgetter("version_sort") return next( - (c.comes_from for c in sorted(py_filter, key=version_sort, reverse=True)), None + self.find_all_python_versions( + major=major, minor=minor, patch=patch, pre=pre, dev=dev + ), None ) @versions.default diff --git a/pipenv/vendor/pythonfinder/pythonfinder.py b/pipenv/vendor/pythonfinder/pythonfinder.py index eff73e22..fa7578d2 100644 --- a/pipenv/vendor/pythonfinder/pythonfinder.py +++ b/pipenv/vendor/pythonfinder/pythonfinder.py @@ -2,6 +2,7 @@ from __future__ import print_function, absolute_import import os import six +import operator from .models import SystemPath @@ -67,3 +68,11 @@ class Finder(object): return self.system_path.find_python_version( major=major, minor=minor, patch=patch, pre=pre, dev=dev ) + + def find_all_python_versions(self, major=None, minor=None, patch=None, pre=None, dev=None): + version_sort = operator.attrgetter("as_python.version_sort") + versions = self.system_path.find_all_python_versions(major=major, minor=minor, patch=patch, pre=pre, dev=dev) + if os.name == 'nt': + windows_versions = self.windows_finder.find_all_python_versions(major=major, minor=minor, patch=patch, pre=pre, dev=dev) + versions = list(versions) + list(windows_versions) + return sorted(versions, key=version_sort, reverse=True)