Add location to requirement.Requirement
This will provide space to store the result of parsing requirements like -e file:///opt/stack/new/oslo.THING, which we need to do for edit-constraint to work in devstack when more than one library is being installed from git. This is a separate patch to make reviewing the actual new functionality easier - it is entirely mechanical, adding the field and dealing with test fallout. Change-Id: Ied4e92717b0dab871dac42ae639d1f2a6c236414
This commit is contained in:
parent
5f4b005ba4
commit
b838ab1e43
openstack_requirements
@ -24,7 +24,8 @@ def edit(reqs, name, replacement):
|
||||
if not replacement:
|
||||
reqs.pop(name, None)
|
||||
else:
|
||||
reqs[name] = [(requirement.Requirement('', '', '', replacement), '')]
|
||||
reqs[name] = [
|
||||
(requirement.Requirement('', '', '', '', replacement), '')]
|
||||
result = []
|
||||
for entries in reqs.values():
|
||||
for entry, _ in entries:
|
||||
|
@ -111,7 +111,7 @@ def _sync_requirements_file(
|
||||
elif req is None:
|
||||
# Unparsable lines.
|
||||
output_requirements.append(
|
||||
requirement.Requirement('', '', '', req_line))
|
||||
requirement.Requirement('', '', '', '', req_line))
|
||||
continue
|
||||
elif not req.package:
|
||||
# Comment-only lines
|
||||
|
@ -31,7 +31,7 @@ _REQS_HEADER = [
|
||||
|
||||
|
||||
Requirement = collections.namedtuple(
|
||||
'Requirement', ['package', 'specifiers', 'markers', 'comment'])
|
||||
'Requirement', ['package', 'location', 'specifiers', 'markers', 'comment'])
|
||||
Requirements = collections.namedtuple('Requirements', ['reqs'])
|
||||
|
||||
|
||||
@ -77,7 +77,7 @@ def parse_line(req_line):
|
||||
else:
|
||||
name = ''
|
||||
specifier = ''
|
||||
return Requirement(name, specifier, markers, comment)
|
||||
return Requirement(name, '', specifier, markers, comment)
|
||||
|
||||
|
||||
def to_content(reqs, marker_sep=';', line_prefix='', prefix=True):
|
||||
|
@ -45,7 +45,7 @@ class TestEdit(testtools.TestCase):
|
||||
reqs = {}
|
||||
res = edit.edit(reqs, 'foo', 'foo==1.2')
|
||||
self.assertEqual(requirement.Requirements(
|
||||
[requirement.Requirement('', '', '', 'foo==1.2')]), res)
|
||||
[requirement.Requirement('', '', '', '', 'foo==1.2')]), res)
|
||||
|
||||
def test_delete(self):
|
||||
reqs = requirement.parse('foo==1.2\n')
|
||||
@ -56,10 +56,10 @@ class TestEdit(testtools.TestCase):
|
||||
reqs = requirement.parse('foo==1.2\n')
|
||||
res = edit.edit(reqs, 'foo', 'foo==1.3')
|
||||
self.assertEqual(requirement.Requirements(
|
||||
[requirement.Requirement('', '', '', 'foo==1.3')]), res)
|
||||
[requirement.Requirement('', '', '', '', 'foo==1.3')]), res)
|
||||
|
||||
def test_replace_many(self):
|
||||
reqs = requirement.parse('foo==1.2;p\nfoo==1.3;q')
|
||||
res = edit.edit(reqs, 'foo', 'foo==1.3')
|
||||
self.assertEqual(requirement.Requirements(
|
||||
[requirement.Requirement('', '', '', 'foo==1.3')]), res)
|
||||
[requirement.Requirement('', '', '', '', 'foo==1.3')]), res)
|
||||
|
@ -200,9 +200,10 @@ class TestMergeSetupCfg(testtools.TestCase):
|
||||
console_scripts =
|
||||
foo = bar:quux
|
||||
""")
|
||||
blank = requirement.Requirement('', '', '', '')
|
||||
r1 = requirement.Requirement('b', '>=1', "python_version=='2.7'", '')
|
||||
r2 = requirement.Requirement('d', '', '', '# BSD')
|
||||
blank = requirement.Requirement('', '', '', '', '')
|
||||
r1 = requirement.Requirement(
|
||||
'b', '', '>=1', "python_version=='2.7'", '')
|
||||
r2 = requirement.Requirement('d', '', '', '', '# BSD')
|
||||
reqs = {
|
||||
'a': requirement.Requirements([blank, r1]),
|
||||
'c': requirement.Requirements([blank, r2])}
|
||||
|
@ -25,32 +25,33 @@ class TestParseRequirement(testtools.TestCase):
|
||||
scenarios = [
|
||||
('package', dict(
|
||||
line='swift',
|
||||
req=requirement.Requirement('swift', '', '', ''))),
|
||||
req=requirement.Requirement('swift', '', '', '', ''))),
|
||||
('specifier', dict(
|
||||
line='alembic>=0.4.1',
|
||||
req=requirement.Requirement('alembic', '>=0.4.1', '', ''))),
|
||||
req=requirement.Requirement('alembic', '', '>=0.4.1', '', ''))),
|
||||
('specifiers', dict(
|
||||
line='alembic>=0.4.1,!=1.1.8',
|
||||
req=requirement.Requirement('alembic', '!=1.1.8,>=0.4.1', '', ''))),
|
||||
req=requirement.Requirement('alembic', '', '!=1.1.8,>=0.4.1', '',
|
||||
''))),
|
||||
('comment-only', dict(
|
||||
line='# foo',
|
||||
req=requirement.Requirement('', '', '', '# foo'))),
|
||||
req=requirement.Requirement('', '', '', '', '# foo'))),
|
||||
('comment', dict(
|
||||
line='Pint>=0.5 # BSD',
|
||||
req=requirement.Requirement('Pint', '>=0.5', '', '# BSD'))),
|
||||
req=requirement.Requirement('Pint', '', '>=0.5', '', '# BSD'))),
|
||||
('comment-with-semicolon', dict(
|
||||
line='Pint>=0.5 # BSD;fred',
|
||||
req=requirement.Requirement('Pint', '>=0.5', '', '# BSD;fred'))),
|
||||
req=requirement.Requirement('Pint', '', '>=0.5', '', '# BSD;fred'))),
|
||||
('case', dict(
|
||||
line='Babel>=1.3',
|
||||
req=requirement.Requirement('Babel', '>=1.3', '', ''))),
|
||||
req=requirement.Requirement('Babel', '', '>=1.3', '', ''))),
|
||||
('markers', dict(
|
||||
line="pywin32;sys_platform=='win32'",
|
||||
req=requirement.Requirement('pywin32', '', "sys_platform=='win32'",
|
||||
''))),
|
||||
req=requirement.Requirement('pywin32', '', '',
|
||||
"sys_platform=='win32'", ''))),
|
||||
('markers-with-comment', dict(
|
||||
line="Sphinx<=1.2; python_version=='2.7'# Sadface",
|
||||
req=requirement.Requirement('Sphinx', '<=1.2',
|
||||
req=requirement.Requirement('Sphinx', '', '<=1.2',
|
||||
"python_version=='2.7'", '# Sadface')))]
|
||||
|
||||
def test_parse(self):
|
||||
@ -76,7 +77,7 @@ class TestToContent(testtools.TestCase):
|
||||
def test_smoke(self):
|
||||
reqs = requirement.to_content(requirement.Requirements(
|
||||
[requirement.Requirement(
|
||||
'foo', '<=1', "python_version=='2.7'", '# BSD')]),
|
||||
'foo', '', '<=1', "python_version=='2.7'", '# BSD')]),
|
||||
marker_sep='!')
|
||||
self.assertEqual(
|
||||
''.join(requirement._REQS_HEADER
|
||||
|
@ -257,9 +257,10 @@ class TestSyncRequirementsFile(testtools.TestCase):
|
||||
actions, reqs = update._sync_requirements_file(
|
||||
global_reqs, project_reqs, 'f', False, False, False)
|
||||
self.assertEqual(requirement.Requirements([
|
||||
requirement.Requirement('foo', '<2', "python_version=='2.7'", ''),
|
||||
requirement.Requirement(
|
||||
'foo', '>1', "python_version!='2.7'", '')]),
|
||||
'foo', '', '<2', "python_version=='2.7'", ''),
|
||||
requirement.Requirement(
|
||||
'foo', '', '>1', "python_version!='2.7'", '')]),
|
||||
reqs)
|
||||
self.assertEqual(project.StdOut(
|
||||
" foo "
|
||||
@ -284,9 +285,12 @@ class TestSyncRequirementsFile(testtools.TestCase):
|
||||
actions, reqs = update._sync_requirements_file(
|
||||
global_reqs, project_reqs, 'f', False, False, False)
|
||||
self.assertEqual(requirement.Requirements([
|
||||
requirement.Requirement('foo', '<2', "python_version=='2.7'", ''),
|
||||
requirement.Requirement('foo', '>1', "python_version!='2.7'", ''),
|
||||
requirement.Requirement('', '', '', "# mumbo gumbo")]),
|
||||
requirement.Requirement(
|
||||
'foo', '', '<2', "python_version=='2.7'", ''),
|
||||
requirement.Requirement(
|
||||
'foo', '', '>1', "python_version!='2.7'", ''),
|
||||
requirement.Requirement(
|
||||
'', '', '', '', "# mumbo gumbo")]),
|
||||
reqs)
|
||||
self.assertThat(actions, matchers.HasLength(0))
|
||||
|
||||
@ -305,9 +309,12 @@ class TestSyncRequirementsFile(testtools.TestCase):
|
||||
actions, reqs = update._sync_requirements_file(
|
||||
global_reqs, project_reqs, 'f', False, False, False)
|
||||
self.assertEqual(requirement.Requirements([
|
||||
requirement.Requirement('foo', '<2', "python_version=='2.7'", ''),
|
||||
requirement.Requirement('foo', '>1', "python_version!='2.7'", ''),
|
||||
requirement.Requirement('', '', '', "# mumbo gumbo")]),
|
||||
requirement.Requirement(
|
||||
'foo', '', '<2', "python_version=='2.7'", ''),
|
||||
requirement.Requirement(
|
||||
'foo', '', '>1', "python_version!='2.7'", ''),
|
||||
requirement.Requirement(
|
||||
'', '', '', '', "# mumbo gumbo")]),
|
||||
reqs)
|
||||
self.assertEqual(project.StdOut(
|
||||
" foo<1.8;python_version=='2.7' -> "
|
||||
@ -331,9 +338,10 @@ class TestSyncRequirementsFile(testtools.TestCase):
|
||||
actions, reqs = update._sync_requirements_file(
|
||||
global_reqs, project_reqs, 'f', False, False, False)
|
||||
self.assertEqual(requirement.Requirements([
|
||||
requirement.Requirement('foo', '<2', "python_version=='2.7'", ''),
|
||||
requirement.Requirement(
|
||||
'foo', '>1', "python_version!='2.7'", '')]),
|
||||
'foo', '', '<2', "python_version=='2.7'", ''),
|
||||
requirement.Requirement(
|
||||
'foo', '', '>1', "python_version!='2.7'", '')]),
|
||||
reqs)
|
||||
self.assertThat(actions, matchers.HasLength(0))
|
||||
|
||||
@ -350,7 +358,7 @@ class TestSyncRequirementsFile(testtools.TestCase):
|
||||
actions, reqs = update._sync_requirements_file(
|
||||
global_reqs, project_reqs, 'f', False, False, False)
|
||||
self.assertEqual(requirement.Requirements([
|
||||
requirement.Requirement('foo', '>1', "", '')]),
|
||||
requirement.Requirement('foo', '', '>1', "", '')]),
|
||||
reqs)
|
||||
self.assertEqual(project.StdOut(
|
||||
" foo<2;python_version=='2.7' -> foo>1\n"), actions[2])
|
||||
|
Loading…
x
Reference in New Issue
Block a user