Merge pull request #2142 from altendky/2138-notpip_looping

Fix grouping of extras requirements in notpip
This commit is contained in:
Dan Ryan
2018-05-22 22:33:45 -04:00
committed by GitHub
3 changed files with 150 additions and 23 deletions
+8 -12
View File
@@ -206,30 +206,26 @@ class PackageFinder(object):
)
self.dependency_links.extend(links)
def get_extras_links(self, links):
@staticmethod
def get_extras_links(links):
requires = []
extras = {}
current_section = None
current_list = requires
for link in links:
if not link:
current_section = None
if not current_section:
if not (link.startswith('[')):
requires.append(link)
else:
current_section = link[1:-1]
extras[current_section] = []
current_list = requires
if link.startswith('['):
current_list = []
extras[link[1:-1]] = current_list
else:
extras[current_section].append(link)
current_list.append(link)
return extras
@staticmethod
def _sort_locations(locations, expand_dir=False):
"""
+11 -11
View File
@@ -1362,29 +1362,29 @@ index f653f6e..48aaa35 100644
)
self.dependency_links.extend(links)
+ def get_extras_links(self, links):
+ @classmethod
+ def get_extras_links(links):
+ requires = []
+ extras = {}
+
+ current_section = None
+ current_list = requires
+
+ for link in links:
+ if not link:
+ current_section = None
+
+ if not current_section:
+ if not (link.startswith('[')):
+ requires.append(link)
+ else:
+ current_section = link[1:-1]
+ extras[current_section] = []
+ current_list = requires
+ if link.startswith('['):
+ current_list = []
+ extras[link[1:-1]] = current_list
+ else:
+ extras[current_section].append(link)
+ current_list.append(link)
+
+ return extras
+
+
+
+
+
+
+
@staticmethod
def _sort_locations(locations, expand_dir=False):
+131
View File
@@ -0,0 +1,131 @@
from __future__ import absolute_import
import pytest
from notpip.index import PackageFinder
get_extras_links_scenarios = {
'windows and not windows': (
[
'chardet',
'[:platform_system != "windows"]',
'twisted',
'[:platform_system == "windows"]',
'twisted[windows_platform]',
],
{
':platform_system != "windows"': [
'twisted',
],
':platform_system == "windows"': [
'twisted[windows_platform]',
],
},
),
'requests': (
[
'chardet<3.1.0,>=3.0.2',
'idna<2.7,>=2.5',
'urllib3<1.23,>=1.21.1',
'certifi>=2017.4.17',
'[security]',
'pyOpenSSL>=0.14',
'cryptography>=1.3.4',
'idna>=2.0.0',
'[socks]',
'PySocks!=1.5.7,>=1.5.6',
(
'[socks:sys_platform == "win32"'
' and (python_version == "2.7" or python_version == "2.6")]'
),
'win_inet_pton',
],
{
'security': [
'pyOpenSSL>=0.14',
'cryptography>=1.3.4',
'idna>=2.0.0',
],
'socks': [
'PySocks!=1.5.7,>=1.5.6',
],
'socks:sys_platform == "win32" '
'and (python_version == "2.7" or python_version == "2.6")': [
'win_inet_pton',
],
}
),
'attrs': (
[
'[dev]',
'coverage',
'hypothesis',
'pympler',
'pytest',
'six',
'zope.interface',
'sphinx',
'zope.interface',
'[docs]',
'sphinx',
'zope.interface',
'[tests]',
'coverage',
'hypothesis',
'pympler',
'pytest',
'six',
'zope.interface',
],
{
'dev': [
'coverage',
'hypothesis',
'pympler',
'pytest',
'six',
'zope.interface',
'sphinx',
'zope.interface',
],
'docs': [
'sphinx',
'zope.interface',
],
'tests': [
'coverage',
'hypothesis',
'pympler',
'pytest',
'six',
'zope.interface',
],
},
),
'misc': (
[
'chardet',
'[:platform_system != "windows"]',
'attrs',
'[:platform_system == "windows"]',
'pytz',
],
{
':platform_system != "windows"': [
'attrs',
],
':platform_system == "windows"': [
'pytz',
],
},
),
}
@pytest.mark.parametrize(
'scenarios,expected',
list(get_extras_links_scenarios.values()),
ids=list(get_extras_links_scenarios.keys()),
)
def test_get_extras_links(scenarios, expected):
assert PackageFinder.get_extras_links(scenarios) == expected