From b838ab1e43180d0b560bd24b211fe8947ac11f2b Mon Sep 17 00:00:00 2001 From: Robert Collins <rbtcollins@hp.com> Date: Fri, 3 Jul 2015 12:20:23 +1200 Subject: [PATCH] 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 --- .../cmds/edit_constraint.py | 3 +- openstack_requirements/cmds/update.py | 2 +- openstack_requirements/requirement.py | 4 +-- .../tests/test_edit_constraint.py | 6 ++-- openstack_requirements/tests/test_project.py | 7 +++-- .../tests/test_requirement.py | 23 +++++++------- openstack_requirements/tests/test_update.py | 30 ++++++++++++------- 7 files changed, 43 insertions(+), 32 deletions(-) diff --git a/openstack_requirements/cmds/edit_constraint.py b/openstack_requirements/cmds/edit_constraint.py index ebc98abe16..3a2ece224c 100644 --- a/openstack_requirements/cmds/edit_constraint.py +++ b/openstack_requirements/cmds/edit_constraint.py @@ -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: diff --git a/openstack_requirements/cmds/update.py b/openstack_requirements/cmds/update.py index fb51b740c5..10bba91c87 100644 --- a/openstack_requirements/cmds/update.py +++ b/openstack_requirements/cmds/update.py @@ -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 diff --git a/openstack_requirements/requirement.py b/openstack_requirements/requirement.py index 4fd7a1f314..b396e1bf44 100644 --- a/openstack_requirements/requirement.py +++ b/openstack_requirements/requirement.py @@ -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): diff --git a/openstack_requirements/tests/test_edit_constraint.py b/openstack_requirements/tests/test_edit_constraint.py index 3caef665a2..1f83f632d2 100644 --- a/openstack_requirements/tests/test_edit_constraint.py +++ b/openstack_requirements/tests/test_edit_constraint.py @@ -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) diff --git a/openstack_requirements/tests/test_project.py b/openstack_requirements/tests/test_project.py index 111bfb0eb7..ba1df5b360 100644 --- a/openstack_requirements/tests/test_project.py +++ b/openstack_requirements/tests/test_project.py @@ -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])} diff --git a/openstack_requirements/tests/test_requirement.py b/openstack_requirements/tests/test_requirement.py index f2f6926343..eb530feb18 100644 --- a/openstack_requirements/tests/test_requirement.py +++ b/openstack_requirements/tests/test_requirement.py @@ -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 diff --git a/openstack_requirements/tests/test_update.py b/openstack_requirements/tests/test_update.py index 94ce34370b..1d02b1e718 100644 --- a/openstack_requirements/tests/test_update.py +++ b/openstack_requirements/tests/test_update.py @@ -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])