4 new commits in tox: https://bitbucket.org/hpk42/tox/commits/35145c72c733/ Changeset: 35145c72c733 User: suor Date: 2014-08-09 14:55:53 Summary: Remove factor negation support Affected #: 2 files
diff -r d835cca51418210730ba8c9cc88a8829bc7cb05d -r 35145c72c7334ddb0a7fd7f5d5e5e77353e09827 tests/test_config.py --- a/tests/test_config.py +++ b/tests/test_config.py @@ -835,20 +835,20 @@ def test_factors(self, newconfig): inisource=""" [tox] - envlist = a,b + envlist = a-x,b [testenv] deps= dep-all a: dep-a b: dep-b - !a: dep-not-a + x: dep-x """ conf = newconfig([], inisource) configs = conf.envconfigs - assert [dep.name for dep in configs['a'].deps] == ["dep-all", "dep-a"] - assert [dep.name for dep in configs['b'].deps] == \ - ["dep-all", "dep-b", "dep-not-a"] + assert [dep.name for dep in configs['a-x'].deps] == \ + ["dep-all", "dep-a", "dep-x"] + assert [dep.name for dep in configs['b'].deps] == ["dep-all", "dep-b"] def test_default_factors(self, newconfig): inisource=""" diff -r d835cca51418210730ba8c9cc88a8829bc7cb05d -r 35145c72c7334ddb0a7fd7f5d5e5e77353e09827 tox/_config.py --- a/tox/_config.py +++ b/tox/_config.py @@ -302,7 +302,7 @@ factors = set() if section in self._cfg: for _, value in self._cfg[section].items(): - factors.update(re.findall(r'^!?(\w+)\:\s+', value, re.M)) + factors.update(re.findall(r'^(\w+)\:\s+', value, re.M)) return factors def _makeenvconfig(self, name, section, subs, config): @@ -628,12 +628,12 @@ def _apply_factors(self, s): def factor_line(line): - m = re.search(r'^(!)?(\w+)\:\s+(.+)', line) + m = re.search(r'^(\w+)\:\s+(.+)', line) if not m: return line - negate, factor, line = m.groups() - if bool(negate) ^ (factor in self.factors): + factor, line = m.groups() + if factor in self.factors: return line lines = s.strip().splitlines() https://bitbucket.org/hpk42/tox/commits/34a35ffe5e17/ Changeset: 34a35ffe5e17 User: suor Date: 2014-08-09 16:19:09 Summary: Support boolean ops on factors Affected #: 2 files diff -r 35145c72c7334ddb0a7fd7f5d5e5e77353e09827 -r 34a35ffe5e17a0a162cc6b635c607573d7e39641 tests/test_config.py --- a/tests/test_config.py +++ b/tests/test_config.py @@ -850,6 +850,24 @@ ["dep-all", "dep-a", "dep-x"] assert [dep.name for dep in configs['b'].deps] == ["dep-all", "dep-b"] + def test_factor_ops(self, newconfig): + inisource=""" + [tox] + envlist = {a,b}-{x,y} + + [testenv] + deps= + a,b: dep-a-or-b + a-x: dep-a-and-x + {a,b}-y: dep-ab-and-y + """ + configs = newconfig([], inisource).envconfigs + get_deps = lambda env: [dep.name for dep in configs[env].deps] + assert get_deps("a-x") == ["dep-a-or-b", "dep-a-and-x"] + assert get_deps("a-y") == ["dep-a-or-b", "dep-ab-and-y"] + assert get_deps("b-x") == ["dep-a-or-b"] + assert get_deps("b-y") == ["dep-a-or-b", "dep-ab-and-y"] + def test_default_factors(self, newconfig): inisource=""" [tox] diff -r 35145c72c7334ddb0a7fd7f5d5e5e77353e09827 -r 34a35ffe5e17a0a162cc6b635c607573d7e39641 tox/_config.py --- a/tox/_config.py +++ b/tox/_config.py @@ -302,7 +302,8 @@ factors = set() if section in self._cfg: for _, value in self._cfg[section].items(): - factors.update(re.findall(r'^(\w+)\:\s+', value, re.M)) + exprs = re.findall(r'^([\w{},-]+)\:\s+', value, re.M) + factors.update(*mapcat(_split_factor_expr, exprs)) return factors def _makeenvconfig(self, name, section, subs, config): @@ -434,12 +435,17 @@ dep2_name = pkg_resources.Requirement.parse(dep2).project_name return dep1_name == dep2_name + def _split_env(env): """if handed a list, action="append" was used for -e """ if not isinstance(env, list): env = [env] return mapcat(_expand_envstr, env) +def _split_factor_expr(expr): + partial_envs = _expand_envstr(expr) + return [set(e.split('-')) for e in partial_envs] + def _expand_envstr(envstr): # split by commas not in groups tokens = re.split(r'(\{[^}]+\})|,', envstr) @@ -628,12 +634,12 @@ def _apply_factors(self, s): def factor_line(line): - m = re.search(r'^(\w+)\:\s+(.+)', line) + m = re.search(r'^([\w{},-]+)\:\s+(.+)', line) if not m: return line - factor, line = m.groups() - if factor in self.factors: + expr, line = m.groups() + if any(fs <= self.factors for fs in _split_factor_expr(expr)): return line lines = s.strip().splitlines() https://bitbucket.org/hpk42/tox/commits/d415689eb8ef/ Changeset: d415689eb8ef User: suor Date: 2014-08-09 16:44:41 Summary: Docs for factor expressions Affected #: 1 file diff -r 34a35ffe5e17a0a162cc6b635c607573d7e39641 -r d415689eb8ef671f6940a3e8c8c3d4677b153451 doc/config.txt --- a/doc/config.txt +++ b/doc/config.txt @@ -405,7 +405,7 @@ pytest django15: Django>=1.5,<1.6 django16: Django>=1.6,<1.7 - !py27: unittest2 + py26: unittest2 commands = py.test This uses two new facilities of tox-1.8: @@ -417,6 +417,7 @@ Let's go through this step by step. + Generative envlist +++++++++++++++++++++++ @@ -432,7 +433,7 @@ py27-django15 py27-django16 -You can still list environments explicitely along with generated ones:: +You can still list environments explicitly along with generated ones:: envlist = {py26,py27}-django{15,16}, docs, flake @@ -441,13 +442,13 @@ To help with understanding how the variants will produce section values, you can ask tox to show their expansion with a new option:: - $ tox -l - py26-django15 - py26-django16 - py27-django15 - py27-django16 - docs - flake + $ tox -l + py26-django15 + py26-django16 + py27-django15 + py27-django16 + docs + flake Factors and factor-conditional settings @@ -471,23 +472,14 @@ pytest django15: Django>=1.5,<1.6 django16: Django>=1.6,<1.7 - !py27: unittest2 + py26: unittest2 -The last line here uses negation of a factor, this means ``unittest2`` will be -in ``deps`` for all pythons except python2.7. The whole effect of this setting -definition could be described with a table: +Reading it line by line: -=============== ================================== -environment deps -=============== ================================== -py26-django15 pytest, Django>=1.5,<1.6, unitest2 -py26-django16 pytest, Django>=1.6,<1.7, unitest2 -py27-django15 pytest, Django>=1.5,<1.6 -py27-django16 pytest, Django>=1.6,<1.7 -=============== ================================== - -And this table can significantly grow as you have more dependencies and other -factors such as platform, python version and/or database. +- ``pytest`` will be included unconditionally, +- ``Django>=1.5,<1.6`` will be included for environments containing ``django15`` factor, +- ``Django>=1.6,<1.7`` similarly depends on ``django16`` factor, +- ``unittest`` will be loaded for Python 2.6 environments. .. note:: @@ -496,6 +488,34 @@ setting. +Complex factor conditions ++++++++++++++++++++++++++ + +Sometimes you need to specify same line for several factors or create a special case for +a combination of factors. Here is how you do it:: + + [tox] + envlist = py{25,26,27}-django{14,15,16}-{sqlite,mysql} + + [testenv] + deps = + py25-django14: simplejson ; use it only for this specific combination + py25,py26: unittest2 ; use it for both py25 and py26 + py{25,26}-django14: mock ; patching whatever in older python/django combo + +Take a look at first ``deps`` line. It shows how you can special case something +for a combination of factors, you just join combining factors with a hyphen. +This particular line states that ``simplejson`` will be loaded for python 2.5, django 1.4 +environments, e.g. ``py25-django14-sqlite`` and ``py25-django14-mysql``. + +The second line shows how you use same line for several factors - by listing them +delimited by commas. It's possible to list not only simple factors, but also their +combinations like ``py25-django14,py26-django14``. + +Finally, factor expressions are expanded the same way as envlist, so a last example +could be rewritten as ``py{25,26}-django14``. + + Other Rules and notes ===================== https://bitbucket.org/hpk42/tox/commits/8c6dbbf625b7/ Changeset: 8c6dbbf625b7 User: suor Date: 2014-08-11 12:17:59 Summary: Update complex factor docs Affected #: 1 file diff -r d415689eb8ef671f6940a3e8c8c3d4677b153451 -r 8c6dbbf625b7f41e851ea083faada2695bbdc1c0 doc/config.txt --- a/doc/config.txt +++ b/doc/config.txt @@ -491,29 +491,42 @@ Complex factor conditions +++++++++++++++++++++++++ -Sometimes you need to specify same line for several factors or create a special case for -a combination of factors. Here is how you do it:: +Sometimes you need to specify same line for several factors or create a special +case for a combination of factors. Here is how you do it:: [tox] - envlist = py{25,26,27}-django{14,15,16}-{sqlite,mysql} + envlist = py{26,27,33}-django{15,16}-{sqlite,mysql} [testenv] deps = - py25-django14: simplejson ; use it only for this specific combination - py25,py26: unittest2 ; use it for both py25 and py26 - py{25,26}-django14: mock ; patching whatever in older python/django combo + py33-mysql: PyMySQL ; use if both py33 and mysql are in an env name + py26,py27: urllib3 ; use if any of py26 or py27 are in an env name + py{26,27}-sqlite: mock ; mocking sqlite in python 2.x Take a look at first ``deps`` line. It shows how you can special case something for a combination of factors, you just join combining factors with a hyphen. -This particular line states that ``simplejson`` will be loaded for python 2.5, django 1.4 -environments, e.g. ``py25-django14-sqlite`` and ``py25-django14-mysql``. +This particular line states that ``PyMySQL`` will be loaded for python 3.3, +mysql environments, e.g. ``py33-django15-mysql`` and ``py33-django16-mysql``. -The second line shows how you use same line for several factors - by listing them -delimited by commas. It's possible to list not only simple factors, but also their -combinations like ``py25-django14,py26-django14``. +The second line shows how you use same line for several factors - by listing +them delimited by commas. It's possible to list not only simple factors, but +also their combinations like ``py26-sqlite,py27-sqlite``. -Finally, factor expressions are expanded the same way as envlist, so a last example -could be rewritten as ``py{25,26}-django14``. +Finally, factor expressions are expanded the same way as envlist, so last +example could be rewritten as ``py{26,27}-sqlite``. + +.. note:: + + Factors don't do substring matching against env name, instead every + hyphenated expression is split by ``-`` and if ALL the factors in an + expression are also factors of an env then that condition is considered + hold. + + For example, environment ``py26-mysql``: + + - could be matched with expressions ``py26``, ``py26-mysql``, + ``mysql-py26``, + - but not with ``py2`` or ``py26-sql``. Other Rules and notes 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. _______________________________________________ pytest-commit mailing list pytest-commit@python.org https://mail.python.org/mailman/listinfo/pytest-commit