deprecations: Deprecate support for '-py{N}' requirements

This has been marked as deprecated for a long time in the docs but
we've done nothing to indicate this from a code perspective. Fix this.

Change-Id: I916bf16773a2a2cffa3c352d5dba52e3fbc298c2
Fixes-Bug: #431529
This commit is contained in:
Stephen Finucane 2017-10-16 11:43:02 +01:00
parent f4a1a7dec0
commit 9be181e8e6
3 changed files with 29 additions and 6 deletions

View File

@ -46,6 +46,8 @@ from pbr import testr_command
from pbr import version
REQUIREMENTS_FILES = ('requirements.txt', 'tools/pip-requires')
PY_REQUIREMENTS_FILES = [x % sys.version_info[0] for x in (
'requirements-py%d.txt', 'tools/pip-requires-py%d')]
TEST_REQUIREMENTS_FILES = ('test-requirements.txt', 'tools/test-requires')
@ -57,9 +59,8 @@ def get_requirements_files():
# - REQUIREMENTS_FILES with -py2 or -py3 in the name
# (e.g. requirements-py3.txt)
# - REQUIREMENTS_FILES
return (list(map(('-py' + str(sys.version_info[0])).join,
map(os.path.splitext, REQUIREMENTS_FILES)))
+ list(REQUIREMENTS_FILES))
return PY_REQUIREMENTS_FILES + list(REQUIREMENTS_FILES)
def append_text_list(config, key, text_list):
@ -78,9 +79,20 @@ def _any_existing(file_list):
# Get requirements from the first file that exists
def get_reqs_from_files(requirements_files):
for requirements_file in _any_existing(requirements_files):
existing = _any_existing(requirements_files)
deprecated = [f for f in existing if f in PY_REQUIREMENTS_FILES]
if deprecated:
warnings.warn('Support for \'-pyN\'-suffixed requirements files is '
'deprecated in pbr 4.0 and will be removed in 5.0. '
'Use environment markers instead. Conflicting files: '
'%r' % deprecated,
DeprecationWarning)
for requirements_file in existing:
with open(requirements_file, 'r') as fil:
return fil.read().split('\n')
return []

View File

@ -549,14 +549,17 @@ class ParseRequirementsTest(base.BaseTestCase):
result = packaging.parse_requirements([requirements])
self.assertEqual(['pbr'], result)
def test_python_version(self):
@mock.patch('warnings.warn')
def test_python_version(self, mock_warn):
with open("requirements-py%d.txt" % sys.version_info[0],
"w") as fh:
fh.write("# this is a comment\nfoobar\n# and another one\nfoobaz")
self.assertEqual(['foobar', 'foobaz'],
packaging.parse_requirements())
mock_warn.assert_called_once_with(mock.ANY, DeprecationWarning)
def test_python_version_multiple_options(self):
@mock.patch('warnings.warn')
def test_python_version_multiple_options(self, mock_warn):
with open("requirements-py1.txt", "w") as fh:
fh.write("thisisatrap")
with open("requirements-py%d.txt" % sys.version_info[0],
@ -564,6 +567,9 @@ class ParseRequirementsTest(base.BaseTestCase):
fh.write("# this is a comment\nfoobar\n# and another one\nfoobaz")
self.assertEqual(['foobar', 'foobaz'],
packaging.parse_requirements())
# even though we have multiple offending files, this should only be
# called once
mock_warn.assert_called_once_with(mock.ANY, DeprecationWarning)
class ParseRequirementsTestScenarios(base.BaseTestCase):

View File

@ -0,0 +1,5 @@
---
deprecations:
- |
Support for ``pyN``-suffixed requirement files has been deprecated:
environment markers should be used instead.