[Pytest-commit] commit/tox: 4 new changesets

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Mon Mar 9 08:10:48 CET 2015


4 new commits in tox:

https://bitbucket.org/hpk42/tox/commits/aca6e943ba18/
Changeset:   aca6e943ba18
Branch:      fix-force-dep-with-reqs-file
User:        djeebus
Date:        2014-11-03 22:50:29+00:00
Summary:     Fix issues with external requirements files and force dep
Using --force-dep while your [testenv] included a dep similar to "-r{toxinidir}/reqs.txt" would cause an unhandled exception similar to: ValueError: ('Expected version spec in', '-rrequirements-test.txt', 'at', 'requirements-test.txt')
Affected #:  2 files

diff -r 9d8f0d5319e77951c0542ece53c960dc3b2886e7 -r aca6e943ba184799252b50b31aa08928fb092c0b tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -1384,6 +1384,59 @@
             r'*deps=*dep1, dep2==5.0*',
         ])
 
+    def test_force_dep_with_requirements_txt_file(self, cmd, initproj):
+        """
+        Make sure we can override dependencies configured in external reqs.txt
+        when using the command line option --force-dep.
+        """
+        initproj("example123-0.5", filedefs={
+            'tox.ini': '''
+            [tox]
+
+            [testenv]
+            deps=
+                dep1==1.0
+                -r{toxinidir}/reqs.txt
+            ''',
+            'reqs.txt': '''
+            -e git://hello/world/git
+            dep2>=2.0
+            -i http://index.local/
+            dep3
+            dep4==4.0
+            -r reqs2.txt
+            ''',
+            'reqs2.txt': '''
+            dep5>=2.2
+            '''
+        })
+        config = parseconfig(
+            ['--force-dep=dep1==1.5', '--force-dep=dep2==2.1',
+             '--force-dep=dep3==3.0'])
+        assert config.option.force_dep == [
+            'dep1==1.5', 'dep2==2.1', 'dep3==3.0']
+
+        deps = config.envconfigs['python'].deps
+        assert len(deps) == 2
+        assert deps[0].name == 'dep1==1.5'
+        include_file = deps[1].name
+        assert include_file.startswith('-r')
+        with open(include_file[2:]) as reqs:
+            lines = [x.strip() for x in reqs.readlines()]
+            assert len(lines) == 6
+            second_file = lines.pop(len(lines) - 1)
+            assert second_file.startswith('-r')
+            assert lines == [
+                '-e git://hello/world/git',
+                'dep2==2.1',
+                '-i http://index.local/',
+                'dep3==3.0',
+                'dep4==4.0',
+            ]
+        with open(second_file[2:]) as reqs2:
+            lines = [x.strip() for x in reqs2.readlines()]
+            assert lines == ['dep5>=2.2']
+
 class TestArgumentParser:
 
     def test_dash_e_single_1(self):

diff -r 9d8f0d5319e77951c0542ece53c960dc3b2886e7 -r aca6e943ba184799252b50b31aa08928fb092c0b tox/_config.py
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -1,4 +1,5 @@
 import argparse
+import tempfile
 import os
 import random
 import sys
@@ -363,6 +364,7 @@
         vc.whitelist_externals = reader.getlist(section,
                                                 "whitelist_externals")
         vc.deps = []
+        reqs_files = []
         for depline in reader.getlist(section, "deps"):
             m = re.match(r":(\w+):\s*(\S+)", depline)
             if m:
@@ -371,8 +373,41 @@
             else:
                 name = depline.strip()
                 ixserver = None
-            name = self._replace_forced_dep(name, config)
-            vc.deps.append(DepConfig(name, ixserver))
+
+            if name[:2] == '-r':  # not a dependency, but a file full of dependencies
+                fd, temp_path = tempfile.mkstemp()
+                reqs_files.append((name[2:].strip(), fd, temp_path))
+                vc.deps.append(DepConfig('-r%s' % temp_path))
+            elif name[0] == '-':  # an option to be sent to pip
+                vc.deps.append(DepConfig(name, ixserver))
+            else:
+                name = self._replace_forced_dep(name, config)
+                vc.deps.append(DepConfig(name, ixserver))
+
+        for reqs_file, fd, temp_path in reqs_files:
+            lines = []
+            with open(reqs_file, 'r') as reqs:
+                for req in reqs.readlines():
+                    req = req.strip()
+                    if not req:
+                        continue
+
+                    if req.startswith('-'):
+                        if req.startswith('-r'):
+                            new_fd, new_temp_path = tempfile.mkstemp()
+                            reqs_files.append((req[2:].strip(), new_fd, new_temp_path))
+                            lines.append('-r' + new_temp_path)
+                        else:
+                            lines.append(req)
+                        continue
+
+                    name = self._replace_forced_dep(req, config)
+                    lines.append(name)
+
+            with open(temp_path, mode='w') as temp_reqs:
+                temp_reqs.writelines(os.linesep.join(lines))
+                os.close(fd)
+
         vc.distribute = reader.getbool(section, "distribute", False)
         vc.sitepackages = self.config.option.sitepackages or \
                           reader.getbool(section, "sitepackages", False)


https://bitbucket.org/hpk42/tox/commits/80bb02e004fc/
Changeset:   80bb02e004fc
Branch:      fix-force-dep-with-reqs-file
User:        djeebus
Date:        2014-11-04 00:51:30+00:00
Summary:     Ignore comments
Affected #:  2 files

diff -r aca6e943ba184799252b50b31aa08928fb092c0b -r 80bb02e004fc52c57997977b5ae1f2255707f497 tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -1400,7 +1400,10 @@
             ''',
             'reqs.txt': '''
             -e git://hello/world/git
-            dep2>=2.0
+            # comment
+            dep2>=2.0   # comment
+
+
             -i http://index.local/
             dep3
             dep4==4.0

diff -r aca6e943ba184799252b50b31aa08928fb092c0b -r 80bb02e004fc52c57997977b5ae1f2255707f497 tox/_config.py
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -400,6 +400,8 @@
                         else:
                             lines.append(req)
                         continue
+                    elif req.startswith('#'):
+                        continue
 
                     name = self._replace_forced_dep(req, config)
                     lines.append(name)


https://bitbucket.org/hpk42/tox/commits/4f704801ff0a/
Changeset:   4f704801ff0a
Branch:      fix-force-dep-with-reqs-file-with-pip
User:        sontek
Date:        2015-03-06 00:42:07+00:00
Summary:     Support force dependencies with requirements.txt using pip
Affected #:  2 files

diff -r 80bb02e004fc52c57997977b5ae1f2255707f497 -r 4f704801ff0a8b08ee7addce1cc0ca42c61877cb tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -1399,7 +1399,7 @@
                 -r{toxinidir}/reqs.txt
             ''',
             'reqs.txt': '''
-            -e git://hello/world/git
+            -e git://hello/world/git#egg=Hello
             # comment
             dep2>=2.0   # comment
 
@@ -1420,25 +1420,13 @@
             'dep1==1.5', 'dep2==2.1', 'dep3==3.0']
 
         deps = config.envconfigs['python'].deps
-        assert len(deps) == 2
-        assert deps[0].name == 'dep1==1.5'
-        include_file = deps[1].name
-        assert include_file.startswith('-r')
-        with open(include_file[2:]) as reqs:
-            lines = [x.strip() for x in reqs.readlines()]
-            assert len(lines) == 6
-            second_file = lines.pop(len(lines) - 1)
-            assert second_file.startswith('-r')
-            assert lines == [
-                '-e git://hello/world/git',
-                'dep2==2.1',
-                '-i http://index.local/',
-                'dep3==3.0',
-                'dep4==4.0',
-            ]
-        with open(second_file[2:]) as reqs2:
-            lines = [x.strip() for x in reqs2.readlines()]
-            assert lines == ['dep5>=2.2']
+        assert len(deps) == 6
+        expected = ['dep1==1.5', 'Hello', 'dep2==2.1',
+                    'dep3==3.0', 'dep4', 'dep5']
+
+        for index, dep in enumerate(deps):
+            assert dep.name == expected[index]
+
 
 class TestArgumentParser:
 

diff -r 80bb02e004fc52c57997977b5ae1f2255707f497 -r 4f704801ff0a8b08ee7addce1cc0ca42c61877cb tox/_config.py
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -1,5 +1,4 @@
 import argparse
-import tempfile
 import os
 import random
 import sys
@@ -10,7 +9,8 @@
 import itertools
 
 from tox.interpreters import Interpreters
-
+from pip.req.req_file import parse_requirements
+from pip.download import PipSession
 import py
 
 import tox
@@ -364,7 +364,8 @@
         vc.whitelist_externals = reader.getlist(section,
                                                 "whitelist_externals")
         vc.deps = []
-        reqs_files = []
+        requirement_files = []
+
         for depline in reader.getlist(section, "deps"):
             m = re.match(r":(\w+):\s*(\S+)", depline)
             if m:
@@ -374,41 +375,27 @@
                 name = depline.strip()
                 ixserver = None
 
-            if name[:2] == '-r':  # not a dependency, but a file full of dependencies
-                fd, temp_path = tempfile.mkstemp()
-                reqs_files.append((name[2:].strip(), fd, temp_path))
-                vc.deps.append(DepConfig('-r%s' % temp_path))
-            elif name[0] == '-':  # an option to be sent to pip
-                vc.deps.append(DepConfig(name, ixserver))
+
+            # We want to parse requirements.txt files last so that
+            # we can process them with forced dependencies
+            if name[:2] == '-r':
+                fname = name[2:].strip()
+                requirement_files.append(fname)
             else:
                 name = self._replace_forced_dep(name, config)
                 vc.deps.append(DepConfig(name, ixserver))
 
-        for reqs_file, fd, temp_path in reqs_files:
-            lines = []
-            with open(reqs_file, 'r') as reqs:
-                for req in reqs.readlines():
-                    req = req.strip()
-                    if not req:
-                        continue
+            pip_session = PipSession()
 
-                    if req.startswith('-'):
-                        if req.startswith('-r'):
-                            new_fd, new_temp_path = tempfile.mkstemp()
-                            reqs_files.append((req[2:].strip(), new_fd, new_temp_path))
-                            lines.append('-r' + new_temp_path)
-                        else:
-                            lines.append(req)
-                        continue
-                    elif req.startswith('#'):
-                        continue
+        for requirement_file in requirement_files:
+            req_deps = parse_requirements(
+                requirement_file,
+                session=pip_session
+            )
 
-                    name = self._replace_forced_dep(req, config)
-                    lines.append(name)
-
-            with open(temp_path, mode='w') as temp_reqs:
-                temp_reqs.writelines(os.linesep.join(lines))
-                os.close(fd)
+            for r in req_deps:
+                name = self._replace_forced_dep(r.name, config)
+                vc.deps.append(DepConfig(name, ixserver))
 
         vc.distribute = reader.getbool(section, "distribute", False)
         vc.sitepackages = self.config.option.sitepackages or \


https://bitbucket.org/hpk42/tox/commits/1c6afe4646fc/
Changeset:   1c6afe4646fc
User:        hpk42
Date:        2015-03-09 07:10:45+00:00
Summary:     Merged in sontek/tox/fix-force-dep-with-reqs-file-with-pip (pull request #136)

Support force dependencies with requirements.txt using pip
Affected #:  2 files

diff -r 69f9be62ef38ef3dca9a932d79f2df85c834258a -r 1c6afe4646fcd4ccc8a6e4c20cc8bc19d6a4549b tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -1423,6 +1423,50 @@
             r'*deps=*dep1, dep2==5.0*',
         ])
 
+    def test_force_dep_with_requirements_txt_file(self, cmd, initproj):
+        """
+        Make sure we can override dependencies configured in external reqs.txt
+        when using the command line option --force-dep.
+        """
+        initproj("example123-0.5", filedefs={
+            'tox.ini': '''
+            [tox]
+
+            [testenv]
+            deps=
+                dep1==1.0
+                -r{toxinidir}/reqs.txt
+            ''',
+            'reqs.txt': '''
+            -e git://hello/world/git#egg=Hello
+            # comment
+            dep2>=2.0   # comment
+
+
+            -i http://index.local/
+            dep3
+            dep4==4.0
+            -r reqs2.txt
+            ''',
+            'reqs2.txt': '''
+            dep5>=2.2
+            '''
+        })
+        config = parseconfig(
+            ['--force-dep=dep1==1.5', '--force-dep=dep2==2.1',
+             '--force-dep=dep3==3.0'])
+        assert config.option.force_dep == [
+            'dep1==1.5', 'dep2==2.1', 'dep3==3.0']
+
+        deps = config.envconfigs['python'].deps
+        assert len(deps) == 6
+        expected = ['dep1==1.5', 'Hello', 'dep2==2.1',
+                    'dep3==3.0', 'dep4', 'dep5']
+
+        for index, dep in enumerate(deps):
+            assert dep.name == expected[index]
+
+
 class TestArgumentParser:
 
     def test_dash_e_single_1(self):

diff -r 69f9be62ef38ef3dca9a932d79f2df85c834258a -r 1c6afe4646fcd4ccc8a6e4c20cc8bc19d6a4549b tox/_config.py
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -9,7 +9,8 @@
 import itertools
 
 from tox.interpreters import Interpreters
-
+from pip.req.req_file import parse_requirements
+from pip.download import PipSession
 import py
 
 import tox
@@ -371,6 +372,8 @@
         vc.whitelist_externals = reader.getlist(section,
                                                 "whitelist_externals")
         vc.deps = []
+        requirement_files = []
+
         for depline in reader.getlist(section, "deps"):
             m = re.match(r":(\w+):\s*(\S+)", depline)
             if m:
@@ -379,8 +382,29 @@
             else:
                 name = depline.strip()
                 ixserver = None
-            name = self._replace_forced_dep(name, config)
-            vc.deps.append(DepConfig(name, ixserver))
+
+
+            # We want to parse requirements.txt files last so that
+            # we can process them with forced dependencies
+            if name[:2] == '-r':
+                fname = name[2:].strip()
+                requirement_files.append(fname)
+            else:
+                name = self._replace_forced_dep(name, config)
+                vc.deps.append(DepConfig(name, ixserver))
+
+            pip_session = PipSession()
+
+        for requirement_file in requirement_files:
+            req_deps = parse_requirements(
+                requirement_file,
+                session=pip_session
+            )
+
+            for r in req_deps:
+                name = self._replace_forced_dep(r.name, config)
+                vc.deps.append(DepConfig(name, ixserver))
+
         vc.distribute = reader.getbool(section, "distribute", False)
         vc.sitepackages = self.config.option.sitepackages or \
                           reader.getbool(section, "sitepackages", False)

Repository URL: https://bitbucket.org/hpk42/tox/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.


More information about the pytest-commit mailing list